冷却ファンの回転数を検出し、PID制御する回路を作ります。
以前から何度か回してみている冷却ファン。こいつの PWM駆動はやりましたけど、回転数を検出するのは、これまでちゃんとやってなかったです。そこで、ファンの回転数を検出してフィードバック制御するための回路と、 Arduino での PID制御のスケッチを作ってみることにしました。
まず最初は、ファンを回して回転数センサから出力を取りだし、表示するための回路を作ります。
回転数を検出する方法
試してみるのは、ジャンク箱にある FHP-7543 という Core2 Duo の冷却フィンに付属してたファン。
仕様は、ほとんどわかりません (;´Д`)
電源が 12V、0.6A。コネクタは 4ピンなので、回転数制御は PWM で、回転数センサがついている、のだろう、と。回転数は 1500rpm ぐらいかな? 回転数センサは、1回転で 2パルス出力するんだとか、どこかのサイトで見たような気がしてます。とすると、毎秒 50パルス (pps) ぐらいで、周期は 20ms ってあたりでしょうか。
品番が違っても、CPU の冷却ファンだから似たり寄ったりな。
回転数を検出する方法は 2つ。ひとつは、一定期間のパルス数をカウントする方法。もうひとつは、パルスの周期を測定する方法。
パルス数をカウントする場合、サンプリング周期を 1秒間としても 50パルスしかないので、1パルス変化するだけで、1分間換算で 60パルスの変化になる。あまりに粗いので、うまくないです。
パルス周期を測定するには、Arduino の pulseIn() 関数が利用できる。こいつはマイクロ秒オーダーで検出できるので、10μs の変化で毎分 1.5パルス分。これなら解像度は充分じゃないでしょうか。
ということで、パルス周期から回転数を検出することにしましょう。
回路図
最終的な回路ではありません。とりあえず、回転数センサの出力を確認するための回路です。といっても、もちろん、最終的な形をイメージしながら。
ファンを PWM制御で駆動する回路
ファンを回転させるのは、過去記事の回路を使います。過去記事で作った回路は図1 のとおりです。
このままでもよいのですが、周波数調整用の R1、VR1 部分は、6.8KΩ にしてしまいましょう。制御用の周波数は 25KHz ですが、かなりラフなので、ボリュームで調整する必要はないです。
トランジスタ Q1、Q2 は、コンデンサ C1 を充電するための定電流回路。C1 の電圧をコンパレータ U1 で比較、3.5V に達したら放電して、のこぎり波を発生させます。のこぎり波はコンパレータ U2 に入力し、速度調整用ボリューム VR2 による基準電圧と比較されて PWM制御信号になります。
PWM制御信号は、ツェナーダイオード ZD1 (3.3V) で電圧を落としていますが、このあたりの仕様はよくわかっていません。入力電圧は 3.3V、とどこかのサイトで見たのでそうしています。ただ、ツェナーダイオードに流している電流が少ないので、実測値では 2.6V ほどです。
開放時にテスターであたると 4V ぐらいを示すので、もっと高くてもいいのかも。ちなみに、5V かけると、3V あたりで波形に段ができます。これが気になるので、やっぱり 3.3V でいきます。
回転数センサの出力を検出する回路
ファンの回転数センサの出力パルスを検出し、Arduino NANO に入力、pulseIn() 関数でパルス幅を取得します。
Sense はオープンコレクタらしいので、プルアップしてパルスが検出できます。R8 がプルアップ抵抗、C5 はノイズ除去用のコンデンサです。これらを追加しました。
出力されたパルスをオシロスコープで確認すると、周期約 26 ~ 14ms、デューティ比 50% ほどになっていました。パルス数に換算すると、約 38 ~ 71pps、最初の想定どおりです。
回転数を 7セグメントLED に表示させる回路
ファンの回転数を 7セグメントLED に表示させる回路です。
7セグメントLED のドライバは TM1630 です。このドライバは、Arduino のデジタル出力 3つで制御できるので、とっても便利です。
使い方の詳細は過去記事を参照ください。
回路図では 1桁タイプの 7セグメントLED 4個になっていますが、実際に使ったのは 4桁タイプです。ピン配置が違いますが、使い方は同じです。
電源回路
5V 電源回路です。
12V は ACアダプタ (3A) で供給しています。三端子レギュレータや Arduino のためには 9V程度が理想的なんですが、今回はファンのために 12V使ってます。ファンは 0.6A なんで、余裕をもってね。
あ、7セグメントLED ありますので、Arduino の 5V 出力は使わないほうが、吉です。
次回はじっさいにファンを動かしてみましょう
実験中のブレッドボードです。
中央の変換基板に載っているのがコンパレータ BA10339です。LM339 と同等、らしいです。その左のトランジスタまわりが定電流回路など。奥にみえているのが、冷却ファン。右上部分は電源回路です。
ファンの下に 7セグメントLED のブレッドボードがあります。こいつ、よく使うので、ブレッドボードでモジュール化してます。
Arduino は NANO 互換機。
Vin に入っているダイオードは、USB 接続中に電源を落としたときの逆流防止用です。デジタルピンからの出力も外部回路に影響するので、基本的に電源を落とす前に USB は抜きましょう。
スケッチを書き込むときは? うーん (;´Д`)
回路ができましたので、次回は、じっさいにファンを回してセンサ出力を確認してみます。