スポンサーリンク

25KHz の PWM 信号で CPU ファンモータを回す

突然ですが、25KHz の PWM 信号を作りたいです。

2 年ほど前に、CPU ファンモータの回転数制御するために、Arduino で 25KHz の PWM 信号を出力したことがありました。

Arduino CPUファン (PWM)を回してみた
体調があまり良くなくて、競技プログラミングのある問題のアルゴリズムを考えつつ、ぼんやりする日が続いてます。しかし、暑い。でもエアコンが寒い。そんな感じ。で、ファンを回してみようと思った。なんだかな〜 (^_^;)使っていない C...

これは、Arduino の内部タイマを利用して 25KHz のPWM 信号を発生させるものでした。
それはそれで良い方法なのですが、前回、三角波から PWM信号を発生できましたので、これを利用しない手はないなと。

三角波を発振できたので、PWM 信号を作ってみた
前回は、オペアンプを使って三角波発振回路を作ってみました。では、三角波ができたので、それを利用しましょう。といえば、PWM 信号の生成です。PWM 信号は、Arduino のアナログ出力でもおなじみですね。LED の明るさ...

しかし、前回の PWM 信号発生回路では、10KHzあたりが限界のようでした。そこで今回は、25KHz の PWM 信号を発生させる方法を考えてみましょう。

基本的な構成

これまで、矩形波の発振回路をいくつか試してきました。それらを利用すると、矩形波を発振、積分して三角波にし、コンパレータで PWM 信号にする、という構成になります。

うーん、なんだかまわりくどいねぇ (^_^;)

そういえば、トライアックを使ったパワーコントローラを作ったとき、CR 回路でのこぎり波を発生させてコンパレータで PWM 信号にするということをやりました。

パワーコントローラを作る
以前作った「トライアックによる電力調整 − 位相制御」では、秋月電子通商で購入したソリッドステートリレー (SSR) キットを改造して位相制御できるようにし、Arduino からトリガパルスを出力して AC100V の電力調整を行いました...

こいつは、トランジスタ 1 個とコンパレータ 1 個の単純な回路でしたよ。このときはコンデンサの放電を利用していますが、充電でも原理は同じ。これを採用しましょう。

キーワードは「のこぎり波」です。よりスマートな回路を求めてググリングの結果、こちらの記事に出会いました。

エヌテクキットPWM-00の解説
コンパレータを用いたPWM発生回路(備忘録的なもの)

コンデンサを充電していき、規定の電圧になったら強制放電させる。これを繰返してのこぎり波を発生。コンパレータで PWM 信号にする。基本はどれも同じです。
俺がパワーコントローラで作った回路と違うのは、コンデンサを定電流で充電する、ということ。コンデンサは一定の電流で充電することで、電圧の上昇が直線的な、きれいなのこぎり波を作ることができます。きれいなのこぎり波は、PWM 信号を直線的に変化させられます。

PWM 信号発生回路

図 (1) 25KHz PWM 信号発生回路

回路図です。

出力された PWM 信号で、ファンモータの回転数制御を行なってみました。

使用したコンパレータは、ジャンク箱にあった BA10339F 、4 回路入り。出力はオープンコレクタです。
性能を比較してませんが、LM339 の同等品だそうです。まぁ、汎用コンパレータなら、なんでもいいんじゃないでしょうか。

電源電圧は 5V ですので、のこぎり波の最大電圧を 3.5V としましょう。なので、抵抗 R3 、R4 による分圧回路の出力電圧も 3.5V です。

Vref = 5×10/(4.7+10) = 3.4 [V]

抵抗器は E6 系列を使っているので、まぁ、だいたいこんなところですね (^_^;)

周波数 25KHz は周期にすると 40μs ですから、コンデンサを 40μs で充電するってこと。コンデンサを 1nF (=0.001μF) とすると、充電電流 Ich は、

Ich = CV/t = 1×10-9×3.5/(40×10-6) = 0.088 [mA]

トランジスタ Q1 、Q2 が定電流回路で、電流値は Q1 のベースエミッタ間の抵抗値で決まります。Q1 のベースエミッタ間電圧を 0.6V とすると、R1 は、

R1 = VBE/Ich = 0.6/(0.088×10-3) = 6.8 [KΩ]

周波数調整用に 5KΩ のボリュームを付けるので、直列に 3.3KΩ の抵抗を付けることにしましょう。R2 にも同じぐらいの電流を流すとして、47KΩ としました。

これで、コンデンサが充電されて 3.5V に達すると、コンパレータ U1 の出力が HIGH になります。

トランジスタ Q3 は、U1 が HIGH になったときにオンになり、C1 を強制放電させます。0.1μs で放電させるとすると、放電電流 Id は、

Id = CV/t = 1×10-9×3.5/(0.1×10-6) = 35 [mA]

2SC1815 の最大コレクタ電流は 150mA で、しかも瞬間的なので、問題ないです。

ところが、C1 が瞬間的に放電されると、U1 の出力は瞬間的にしか HIGH になりません。ベースにも、瞬間的にしか電流を流せないことになります。
C1 を、一気に、十分に、放電させるためには、それなりの電流をベースにぶち込む必要があります。ここはカットアンドトライで R5 を 1KΩ としました。ベース電流は 4.3mA 。最大定格は 50mA ですので、問題ないです。で、放電時間は 0.1μs になっています。

コンパレータ U1 が LOW のときの吸い込み電流は 5mA になります。最大定格は 16mA なので、こちらも大丈夫ですね。

こうしてできあがったのこぎり波と、R6 、VR1 分圧回路の基準電圧を、コンパレータ U2 で比較して、PWM 信号が出力されます。
基準電圧は、

Vref = 5×10/(4.7+10) = 3.4 [V]

のこぎり波発生部と同じです。デューティー比調整のために、10KΩ はボリュームとします。
デューティー比は 2~98% になりました。完全に 0~100% にしたければ、R6 を少し小さくすれば良いです。

コンパレータ U2 の出力側は、ファンモータの回転数の制御回路です。
制御用 PWM 信号の入力電圧は 3.3V らしいので、ツェナーダイオードで電圧を制限しています。電流制限用の抵抗 R7 が 1KΩ なので、2.6V ほどになってしまいますが、特に問題はないようです。R7 を小さくすると U2 の吸い込み電流が大きくなってしまうので、まぁ、こんなもんでいいんじゃないですか (^_^;)
ちなみに、周波数 25KHz はかなりラフで、20~49KHz に変化させても影響はないようです。

出力波形

図 (2) PWM 信号とのこぎり波

図 (2) は、出力 PWM 信号 (黄色) とのこぎり波 (青色) です。

PWM 信号のデューティー比は 80% になっています。VR2 で、2~98% まで変化できます。
電圧は、ツェナーダイオードで 2.6V になっています。

のこぎり波の電圧は、最大 3.8V です。最小値はしっかり 0V に落ちていますね。
放電が不十分で電圧が残っていると、後段の影響を受けて周波数が変化することがあるようです。

図 (3) のこぎり波とコンパレータ U1 出力電圧

図 (3) は、のこぎり波 (黄色) とコンパレータ U1 の出力 (青色) です。U1 の出力とは、トランジスタ Q3 のベース電圧になります。

Q3 のベース電圧は、ピークで 1.0V になっています。データシートによると、VBE=1V のときのコレクタ電流は 150mA 。まぁトランジスタが壊れることは、ないでしょう。
ってゆーか、これくらいぶち込まないとコンデンサを放電させられないってこと。

ブレッドボード

図 (4) ブレッドボードのようす

ブレッドボードです。

小さいブレッドボードは実験用の電源です。下のブレッドボードが、今回の実験回路。

左側の半固定抵抗が周波数調整用 VR1 、右下がデューティー比設定用の VR2 です。
変換基板にのっている SSOP がコンパレータ BA10339F 。4 回路入りですが、今回は 2 回路のみ使っています。

右上に見えているのが CPU ファンです。4 線式 DC12V ですが、詳細な仕様がわからないジャンク品です。

PWM 発生回路によるファンモータの制御

ということで、CPU ファンモータの回転数制御回路ができました。

基準電圧を出している VR2 のかわりに、温度センサーの信号なんかを入れてやれば、温度による冷却ファンの制御ができますね。
簡単な回路なので、いろいろ応用できそうです。

タイトルとURLをコピーしました