B02 回路修正
以前の記事で紹介したオリジナル基板 B02 ですが、タイトル図の破線で囲った部分のように、プルアップ抵抗を追加することにしました。
図の右側にあるコネクタの1,2番ピンからは5Vまたは6〜12Vの電源が供給されます。この電圧で小さなヒーター(2A程度)を駆動するFET出力があります。
Raspberr Pi の 3.3V信号で駆動できないFET(4V駆動)の為、前段にトランジスタを入れてRaspberr Pi のGPIO12につないでいます。
GPIO12 はActive Low になり、PWMに使う場合は以下のようにデューティー比が反転します。
GPIO12 FET(負荷電流)
ポート出力 Low ON
High OFF
PWMデューティー 0% 100%
50% 50%
100% 0%
ここまでは、予定通りでした。
GPIOデフォルト時に難
アプリが動作している間は問題ないのですが、起動前などGPIOが初期状態の時に問題がありました。(配慮不足。設計ミスです。)
破線内のプルアップがない場合、初期状態のGPIO12は入力になっているのでトランジスタのベース端子に電流が流れず、FETがONになってしまいます。
RasPi の電源ONでアプリが自動起動するようにしても、起動までの間は制御出来ません。小型のヒーターとは言え、デバッグ作業などで止まっている間に予想外の温度になってしまう可能性もあります。
タイトル図のように10kΩの抵抗でプルアプすれば問題がなくなると思います。
プルアップ付きで、GPIO12が入力の時のベース電流は(3.3-0.7)/20k = 130uA、
ヒーターの電源が12Vとして、コレクタには12/10k = 1.2mA 以上流す必要がありますが、hfe = 50 として余裕でOKそうです。
対策
既に出来上がっているPWBについては、既存のチップ抵抗端子と近くのビアに、追加の抵抗を半田付けしてプルアップすることにしました。
今後のことも考えれば、プルアップ抵抗を追加した基板を準備した方が良さそうです。
他に改善すべきところがないか確かめながら準備します。
Raspberry Pi 内でプルダウン?
Webを見ていると、GPIOは初期状態で入力になるだけでなく、約50kΩでプルダウンされていると言う記述が見られます。
タイトル画像の破線部のようにプルアップし、図示しない50kオームのプルダウン抵抗があった場合、のベース電流を計算すると 78uA で、コレクタに1.2mA を流すためには hfe > 15.4 となり、hfe > 50 で大丈夫そうです。
(参考までに、この時のGPIO12端子電圧計算値は 1.48V です。)
私は、飽和状態で使うトランジスタのhfeはMIN.50 として計算します。
78uA の根拠
GPIO12 のノード電圧をV1、破線枠内のプルアップ抵抗を流れる電流をI0 、トランジスタのベース端子に流入する電流をIb、ベース電圧を0.7V、RasPi 内のプルダウン抵抗(50kΩ)に流れる電流をI1とすると、
I0 = I1 + Ib
V1 = I1 * 50k
V1 = 3.3 - ( I0 * 10k )
V1 = Ib * 10k + 0.7
以上を満たす Ib を求めました。
機会があったら初期状態でGPIO12 の電圧を測定して、この記事に追記しようと思います。
折角なのでRasPi 起動時からのオシロ観察が出来ればなお良いと思います。
追伸:
タイトル画像破線内のプルアップ抵抗を取り付けてから、再起動して安定するまでGPIO12端子をオシロで観察しましたが、連続して約2.0V でした。
入出力が切り替わったり、プルアップ抵抗が追加/開放されたりすれば、電圧が変化するはずですが、安定していました。
タイトル画像の破線内にあるプルアップ抵抗がある状態で、GPIO12の電圧は、3.3 - ( 3.3 - 0.7 ) / 2 = 2.0V ですから、私の Raspberry Pi Zero WH (+Buster)の GPIO12 では、RasPi 内部でプルダウンされているようには見えませんでした。
基板のバージョンやOSにより異なるのかも知れません。
( 500kΩ以上のプルダウンなら測定出来ていないだけかも知れません。)
何らかお役になてれば幸いです。