GM70シングル シャーシ冷却用ファンのコントローラ作成

2016-04-10 14.06.42

シャーシが決まっていませんが、なんとなく必要になりそうだったので作っておきました。山洋の DC ファンを PWM 制御するコントローラ + リレー4個まで接続出来るようにした基板です。DC ファンはたまたま山洋のを買ったので PWM 周波数は 25kHz です。

  • 構成は Arduino UNO R2 + TD62003 のシンクドライバ + TMP36GZ 温度センサー
  • ATMega328P の Timer2 高速 PWM モードで 25kHz PWM を生成
  • ボリュームのアナログ値を読み取って、ファンを低速で回す。
  • TMP36GZ(LM35DZと同じような温度センサー)のアナログ出力を読み出して、シャーシ内が高温になったらファンの回転を高める
  • 冷えたと判断したら元に戻る

最終的には上記の動きになるようプログラムする予定です。ひとまずボリュームのアナログ値を読み込んで PWM 幅を変更するサンプルを作成して実行してみました。

pwm90
pwm60
pwm10
pwm00

90%, 60%, 10%, 0% を並べてみました。デューティー比を下げるとキッチリいけてませんね。0% でヒゲみたいにワンショットでちゃってます。データシート読んで悪そうなところを見直しましょう。デューティー比を変えても 25kHz の周期でパルス出せているのでレジスタ設定の肝心な部分は OK でした。

DC ファンは全開で回すとモーターの音と風切り音がラックマウントのサーバーみたいにヤカマシイので最大20~30%のパワーあたりで調整入れていくような感じになりそうです。

2016/4/11 追記

高速 PWM モードでは、0% のときはパルスがでるとデータシートにもあったので、位相基準 PWM でプログラムすることに変更しました。
以下、初期化のところをメモしておきます。

//
// Timer2 Mode 5: 位相基準 PWM TOP=OCR2A
//
// クロックは 16MHz / 8 = 2MHz
// DC FAN PWM 周波数 = 25kHz
// OCR2A = 2MHz / 25kHz = 80 -> 40
// OCR2B = デューティー比 0 - 40 の 2.5% きざみになる
// PWM 出力端子は OC2B = PD3 = 3
//

void setup() {
    pinMode(3, OUTPUT);
    TCCR2A = _BV(COM2B1) | _BV(WGM20);
    TCCR2B = _BV(WGM22)  | _BV(CS21);
    OCR2A = 40;
    OCR2B = 0;
}    

void loop() {
  // Duty 0 - 50% テスト 
  int i;
  for(i = 0; i < 21; i++) {
    OCR2B = i;
    delay(5000);
  }
}