SSブログ

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

Raspberry Pi : nfsサーバー [基板]

前回の結果。何とか実用になる事がわかりました。

RaspberryPiのUSBに接続したメモリをNFSでexportして、ESXiのデータストアに設定、OpenIndianaをコピーして、HDDコントローラーをPCIパススルーさせてブート、zfsをマウントさせてNAS他の動作が出来ました。HDDのスピンダウンも効いて約15Wの節約です(手間かかる節約だ~w)。途中から節約以外のことが目的になってきてますが、目的を見失うのはいつものことかと…

ローカルのSSDからだと30秒足らずで立ち上がりますが、RaspberryPiのnfsからだと2分弱かかります。これがデメリット。逆に言うとそのくらいの差です。一度立ち上がってしまえばデータのやりとりにnfsは使わないので、さほどデメリットとは感じません。

OpenIndiana以外の仮想マシンは、仮想マシンのOpenIndianaのファイルシステムをnfsやiscsiで公開して、ESXiのデータストアにしてます。うっかり先にOpenIndianaを落としちゃうとパニックです(笑)

ATX電源の5VSB(バックアップ出力)をRaspberryPiの電源にしてます。
Ethernetはマネージメント用のポートの穴(オプションでiLOのポートを分けるところ)に通しています。Ethernetのオスメス延長ケーブルって見かけないので、そのうち作りますかね~

nfsだけやらせておくのもつまらないので、なにか他のこともやらせてみたいな、ということで、次はG7の標準ファンのPWM制御を任せてみます。いわゆるファンコントローラーです。
タグ:Raspberry Pi

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。