MOSFETによるI2Cスレーブ機器への電流供給制御 (1) 試作編

投稿者: | 2020年6月2日

Raspberry PiやESP8266系列で環境センサをI2C接続して長期運用していると、ごくたまーに計測不良に陥ることが有ります。中には機器を再起動しても復旧しないことから、機器を10分以上電源OFFにし、その後起動させてようやく復活する事例に何度か遭遇しました。

計測不良の度に機器ごと再起動するのではなく、I2Cバスへの電力供給を絶つことでセンサを復帰させることが出来ないか、MOSFETを使った制御方法を考察します。

まず、今回制御する電流の大きさを推算します。BME280はBosch社のデータシートによると、温度→気圧→湿度をシーケンシャルに計測し、各計測時の消費電流はそれぞれ、350、714、340μAであることから、最大でも1mA見込んでおけば良さそうです。

図1.BME280計測フロー

図1.BME280計測フロー

対してRohm社のBH1750は、単純にデータシートに記載されている最大消費電流190μAを鑑みればよいので、これら2つのセンサ合わせて1mAと言うことにしましょう。そして定番の冗長性運用でセンサ数が倍増したとしても、〜10mA程度を見込んでおけば十分と言えるでしょう。

 

次に電流を制御するMOSFETをGPIOと繋ぐ回路構成について、以前より漠然とした理解しか持っていなかったので、この機会に確認しておこうと思います。こちらの記事はゲートに入れる2つの抵抗の目的とおおよその目安など、シンプルにしてとてもわかりやすいものでした。

そして、ゲートキャパシタについては東芝のMOSFETゲート駆動回路に関するPDF資料が教科書になりました。下図はその抜粋。

図2.MOSFETゲート駆動回路

図2.MOSFETゲート駆動回路

以上より、今回ESP Easyで稼働している計測器に追加する回路はこのようにしてみました。
(回路図作成には、Digi-Key社のブラウザベース回路図エディタ「Scheme-it」を使用)

図3.回路図

図3.回路図

実際にブレッドボード上に製作してみます。下図、緑の小さな小島が今回追加した回路です。MOSFETは取り敢えず手元に有った2SK3992を使用しています。デバッグ用にLEDを追加設置しました。

図4.実作例

図4.実作例

ESP Easyをあれこれ調べたり試したりしましたが、GPIOのHIGH/LOW切替はコマンドを送り込むのが一番近道でした。

図5.コマンドGPIO

図5.コマンドGPIO



そして現在のGPIOの状態は、こちらのPin state bufferで確認することも出来ます。

図6.Pin state buffer

図6.Pin state buffer

そして1つ気をつけなければいけないのが、起動時のGPIO設定値。HardwareタブのGPIO boot statesで起動時のピン状態を設定します。デフォルトの振る舞いは機器のGPIOピンによって異なり、GPIO14は高インピーダンスなのでInputでしょう。このままでは起動時にI2Cバスへ通電されないので、ここをOutput Highへ変更しておきます。

図7.GPIO boot states

図7.GPIO boot states

ESP EasyではさらにDeviceタブにも、GPIOをスイッチとして追加出来るのですが、別にそれでGUI上にスイッチボタンが出現するわけでもなく、それでいてここに記憶されている状態が、上図でせっかく設定した初期値を上書きしてしまうような挙動を採るので、ここ使うのは止めました(よく見たらInput用だし)。

図8.Device Switch Input

図8.Device Switch Input

 

それでは実際に操作してみましょう。ESP Easyは、Tools –> Log で動作をリアルタイムで見ることが出来、普段はこのような感じです。

また、I2C Scanをすると次のような結果を得ます。

ではここでGPIOをLowにするコマンドを送ると、ログは異常を発出するようになります。

このときI2C Scanでは、すでにBH1750は消え、BME280のゴーストのみとなります(センサ異常時によくあるパターンと同じ)。

ちょっと気持ち悪いので、上述のGPIO boot statesでOutput Lowにセットして再起動してみます。起動後、I2C Scanしてみましたが、No I2C devices foundとの結果で成功です。次に、ここからコマンドでONにしてみましょう。

正常にセンサを認識、計測開始しました。

 

今回、MOSFETによるI2Cバスへの電力供給制御が有効であることが分かりました。今後は既存システムへのMOSFET組み込みの最適化や、Raspberry Piで使っている冗長化システムでのMOSFET活用に取り組みたいと思います。

 

参考と鳴謝)

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA