Raspberry Pi4 のCPUファンを制御

標準で備わっているデバイスツリーオーバーレイで、CPU温度によるファンのOn/Off機能。設定もGUIで出来てプログラムも書かずに済む、その機能を使えるようにGPIO経由でCPUファン制御をしてみた。

使っているラズパイ4のCPUに付けたFANの消費電流は5Vで50mA弱、GPIOで流せる電流は16mAほどなので間にトランジスタを入れてドライブすることにし、トランジスタは手持ちに有る汎用の2SC1815、これは最大150mAまで流せるので今回のFANには十分。

つくるにあたって、ベース抵抗とベース・エミッタ抵抗を求めて、iPadのアプリ「iCircuit」を使いシミュレートして確認をしました。

回路

ベース電流(Ib)は1mAとし、2SC1815のhfeを200とすると、
Ic = Ib * hfe = 1mA * 200 = 200mA
200mA流せそうだが、2SC1815は150mAまで。

Rb = (Vb – 0.7v) / Ib = (3.3v – 0.7v) / 1mA = 2.6kΩ

手持ちの抵抗で近いのは2.7kΩ、
Ib = (3.3v – 0.7v) / 2.7kΩ = 0.96mA

iCircuitでシミュレートするとIcに49mAほど流れているから大丈夫そう。

Rbeを入れるとと対ノイズに強くなるそうで、値は1kΩから10kΩとか、こちらも手持ちの中から4.7kΩを使用。

iCurcitで確認

使用するGPIOは5番(ピン番号29)が配線し易そうだったので、この番号に決めました。(実装写真を参照)

部品

組んだ後に気づいたのですが抵抗は4.7kに揃えて、ベース抵抗も4.7kにしてもよかったかと。
その場合はIbが0.6mAくらいでちょっと省エネ、秋月だと100本単位なので4.7kの一袋のみの買い物でお財布にもちょっと優しい。

実装

RTCを乗せたユニバーサル基板の空いているところに組みました。
FANとの接続はピンコネクタを介し、基板の取り外しをしやすくし、後々の改造へ。

動作確認

メニューから「Raspberry Piの設定」を選んで、「パフォーマンス」タブ。

[ファン]項をオンにして、トランジスタのベースに繋いだGPIOの番号を入れ、ファン動作温度を指定。

CPUの稼働率を上げるには、コマンドラインで。

$ yes > /dev/null &


おおよそ25%ずつ上がり、4回うてば100%になる。

最初の動作確認で、CPUの稼働率を上げてもCPU温度が熱くなってもファンは回らずで、PINの番号など確認したが判らず。

試しにPythonでGPIOピンへHigh/Low出力のプログラムを書いて、FANが回転するか確認したところ正常に動作。その後は設定温度でFANが回り始めたので、GPIOのモードが出力モードになっていなかったのか?なと。

今は設定温度で回り、設定温度から-10℃くらいになると自動でFANが止まります。

実測値

ベース電流値(Ib)は0.9mA。

コレクタ電流値(Ic)は、39.2mA。

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