So-net無料ブログ作成
検索選択

Raspberry Pi + HP ProLiant G7 ML110 : ファン制御 [基板]

Raspberry Piをネットから回転制御可能なファンコンに仕立てました。

標準のDELTAのファンは、確かにうるさいけど物は良さそうです。うるさいのはG7のファン制御が大味だからで、絞れば風量の割りに静かだと思います。厚みがあるからですかね。これを眠らせておくのはもったいないかなと。

RaspberryPiはGPIOピンを何本か持ってます。2.54mmピッチのヘッダに出てるので配線も簡単です。このGPIOをPWM制御してやればDELTAのファンを静かに回せます。ついでにネットワーク経由で回転速度を変えることも可能!

さぁ、作るぞ!・・・って世の中、この程度の事はもう出来上がってました・・・
Gordons Projects
GPIO制御の汎用ライブラリ+コマンドです。ありがたや~後でThanksとReplyを入れとこ。

DELTAのデータシートによるとPWM信号は30Hz~30KHzまで対応可能とのこと。G7のPWM信号は24KHzと意外と高めです。ソフト制御だとちょっと…無理じゃないですがそこまで必要ないですし。1KHz以下にしてタイマーで制御するとルーズで良いかな?
24KHzなんて不必要に高い周波数にしてるのは、ひょっとしてコイル鳴きを避けるためかも?手元の実験では出てませんが、ファンから1KHzの「ピー」なんてのが聞こえたらそりゃ困ります(笑)

ということで、とりあえずG7オリジナルに近い周波数にしてみます。RaspberryPiにはPWM制御回路が2系統入っていて(アナログオーディオ出力用です)、1系統がピンヘッダに出てます。これを使います。3つのファンを同じPWM信号で制御する事になりますが、まぁ気にしない。
アナログオーディオ出力のフィルタを取っちゃえばミニピンジャックから2系統出せますけどね。
…PWM制御回路を使えば、レジスタ設定すれば自動的に延々と信号が出力されるので、制御プログラム作ったり常駐させたりしなくて済むなぁ、そっちの方が楽だなぁ、って手抜きのバックグラウンドもあります(笑)

前置きが長いですが、さて、作業開始。
まずは上のURLからライブラリを貰ってきます。あっても害はないのでインストールもしてしまします。
$ mkdir wiringpi
$ cd wiringpi
$ wget http://project-downloads.drogon.net/files/wiringPi.tgz
$ tar xfz wiringPi.tgz
$ cd wiringPi
$ make
$ sudo make install
$ cd ../gpio
$ make
$ sudo make install

試しにコマンドから
$ sudo gpio mode 1 pwm  ピン1をPWMモードに設定
$ sudo gpio pwm 1 数字  PWMの値を設定

と実行するとGPIO18、ヘッダピンの12ピン(外側の6列目)にPWM波形が現れます。簡単。

ただ、標準設定ではオーディオとかで使われるPWM出力のアルゴリズムが設定されてます。出来るだけbit位置を拡散させるような波形出力です。
ファンの制御ではそんな高精度の制御は必要ありません。単純なデューティー比が変化するだけの出力が欲しいです。RaspberryPiのCPU、BC2835はこのモードも持ってます。詳細はデータシートへ。
bc2835ds_pwm0.pngPWM制御(抜粋)
MSENビットを'1'にして、24KHzぐらいにS(Rangeレジスタ)を設定して、Dataレジスタに比率(0~Range)を書き込めば良さそうです。

これまた手抜きで、初期化ルーチンに値を埋め込んでしまいます。wiringPi.cを変更。
$ diff wiringPi.c.org wiringPi.c

368,369c368,371
<       *(pwm + PWM0_DATA) = 512 ;
<       *(pwm + PWM1_DATA) = 512 ;
---
>       *(pwm + PWM0_RANGE) = 25 ;
>       *(pwm + PWM1_RANGE) = 25 ;
>       *(pwm + PWM0_DATA) = 4 ;
>       *(pwm + PWM1_DATA) = 4 ;
371c373
<       *(pwm + PWM_CONTROL) = PWM0_ENABLE | PWM1_ENABLE ;
---
>       *(pwm + PWM_CONTROL) = PWM0_ENABLE | PWM1_ENABLE | PWM0_MS_MODE | PWM1_MS_MODE;

Range(周期)を設定したのと、MSENビットをセットしただけです。PWM回路の周波数は600KHzにセットされてるので、600/25で24KHzぐらいです。
もう一度、ライブラリとgpio両方のmake clean, make installをします。Linux側の作業は以上。

配線を作ります。まずは電源まわり。12Vを電源から直接黄線へ、同じく電源からGNDをファンの黒線へつなぎます。これには多少電流が流れます。全開だと3台で2Aぐらいです。
制御系。ピンヘッダの6ピン(外側3列目)がGND、12ピン(外側6列目)がPWM出力です。RaspberryPiのPWM信号をファンの青線に、GNDを黒線とつなぎます。ほとんど電流は流れないはずですが、一応保護抵抗付けておきます(数10~100Ω程度で適当に。直結でも問題ないはず)。
raspi_haisenn.png結線図

テスタで配線チェックしたら、電源とコネクタを接続します。
raspi_jikkenfuukei.JPG実験風景
raspi_pwmsetuzoku.JPGヘッダ部分
3ピン目の黒がGND、6ピン目の青がPWM信号です。

電源を入れるとファンが100%フル稼働するはずです。やかましいです(笑)。固定しないとファンが自走します。少し我慢します。SSHでRaspberryPiにログイン、コマンドを打ちます。
$ sudo gpio mode 1 pwm  ピン1をPWMモードに設定
$ sudo gpio pwm 1 3     ぎりぎり最低。12%ぐらい。これ以下だと止まる
$ sudo gpio pwm 1 25    100%フル稼働
$ sudo gpio pwm 1 7     なんとか静音って言える?30%ぐらい
$ sudo gpio pwm 1 0     停止

こんな感じで速度調整します。

ファン3台、ひとまとめの制御ですが、私としてはこれで十分かなと。
2系統までならハードのPWM回路が使えます。3系統個別制御となるとソフトウェアでPWM信号を作成する事になると思います。

ということで、ESXi用nfsサーバー兼ファンコントローラーという妙な物が出来ました。後はネットリモコンと自動Tweet機能とネットラジオ辺りを兼用させて・・・いや、兼用せずに買えば良いんですが。台数制限なくなったし(ただしリードタイムは8/6現在16週間!)。

最初はブラウザから制御~なんて思い描いてましたが、「一度セットしたらほとんど変えないんだし、SSHからコマンドでいいんじゃね?」って一瞬でも思った時点で負けました。
タグ:Raspberry Pi
nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

shoe lifts men

It’s extremely helpful for me. Big thumbs up for this weblog post!
by shoe lifts men (2013-04-30 00:02) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL: