アナログ気圧計2号機、電源供給方式の検討
少し間が空いてしまいましたが、気圧センサーのLPS25Hを使ったアナログ気圧計作りの話の続きです。今回は電源の供給方法について検討します。電池で3年以上動かすのが目標なのでこの話は重要です。
▼ブレッドボードでj実験中

ブレッドボードにArduino IDEからシリアル書き込み出来る環境を作り、いろいろと実験しているところです。
アナログ気圧計の1号機の電源系は次のようになっています。
▼1号機の電源系

電源は単三電池3本で、CPUとセンサーは電池直結で動かしています。センサーのMPL1152A2は電源電圧5Vでも動くのでこんなシンプルな構成で済みました。消費電流は動作時 10mA、待機時は28μAで、大半の時間は待機状態なので、電池の消費は極めて少なくなっています。ちなみに待機時にはCPUを深いスリープに入れて消費電流を減らすdelayWDTという自作の関数を使っています。2号機でもこの関数を使って待機時の消費電流を減らす予定です。
▼2号機の電源系統、案-1

2号機も電池3本で動かすつもりですが、気圧センサーのMPL25Hの電源電圧は3.3Vなのでそのままでは使えず降圧する必要があります。CPUは電池に直結して使った方がロスが減る、と考えて電池電圧のままで動かしてみます。但し、CPUのクロックを16MHzから8MHzに下げて消費電流を減らすことにします。
この回路では電池電圧が下がると時計のパルスモーターの電流が減ります。その影響で、電池はまだ残っているにもかかわらず時計のパルスモーターが脱調してしまうという残念な現象が1号機で発生しています。この回路を使う場合は、電池電圧の低下に応じて時計の駆動パルスを補正する機能を入れると、電池の能力を使い切ることが出来るはずです。
たぶんこれが一番優れた方式のような気がしていたのですが、I2Cのレベルコンバーターが必要になるので、部品が増えて実装が苦しくなります。
ならばいっそのことCPUも3.3Vで動かしてみます。
▼案-2 (最終案)

これならI2Cのレベルコンバーターは不要です。また、CPUを一定の電圧で動かすので、時計のパルスモーターの駆動条件をプログラムで補正するようなことはしなくても済みます。
この回路で気になるのはシリーズレギュレーターが消費する電流です。幸いなことにCMOSタイプのシリーズレギュレーターは自分が消費する電流がすごく小さく、10μAも消費しないようなので、そういう素子を使えば大丈夫そうです。
ということで、この回路を作って消費電流を測定してみると、動作時は4.2mA、待機時は33μAでした。(delayWDTのデモプログラムで測定しています)
動作時の消費電流が1号機より減っているのは、クロックを8MHzに下げたことと、電源電圧を3.3Vに下げたことによる効果です。シリーズレギュレーターが入っているので待機時の消費電流が1号機より少し大きくなっています。でも電池電圧が3.5Vくらいまで下がっても影響が出ないので、たぶん1号機より長い時間動き続けると思います。ということで、この案で行くことにしました。ちなみに、1号機では電池の電圧が4.1Vくらいまで下がると動作がおかしくなります。
◆まとめ
ということで、やっと電源系統を決めることが出来ました。簡単な話なのにこの結論にたどり着くまでにずいぶんと時間がかかってしまいました。
この実験はクロック8MHz、電源電圧が3.3Vで動くArduinoが必要になりますが、そのためにブレッドボードでArduinoを動かす環境を作りました。またプログラムは Arduino Pro 8MHz/3.3V としてコンパイルすれば実際の環境と同じになって何かと好都合です。ということで実験を進めたのですが、途中で原因不明のトラブルが発生して解決にかなり時間がかかってしまいました。CPUのヒューズがおかしいのではないかなど調べたりいろいろ悩んだのですが、結局原因はブレッドボードの接触不良というつまらない現象が原因でした。
具体的には、アナログVccのピンを受けるブレッドボードのメスコンタクトの片方が座屈し、正常に接触しない状態になっていました。AVccが正常に供給されなかったのでブラウンアウトが検出され、CPUが止まっていたようです。
ブレッドボードは時々点検し、コンタクトに異常があったり、バネがへたったりしている物は思い切って捨ててしまう方が幸せになれます。
▼ブレッドボードでj実験中

ブレッドボードにArduino IDEからシリアル書き込み出来る環境を作り、いろいろと実験しているところです。
アナログ気圧計の1号機の電源系は次のようになっています。
▼1号機の電源系

電源は単三電池3本で、CPUとセンサーは電池直結で動かしています。センサーのMPL1152A2は電源電圧5Vでも動くのでこんなシンプルな構成で済みました。消費電流は動作時 10mA、待機時は28μAで、大半の時間は待機状態なので、電池の消費は極めて少なくなっています。ちなみに待機時にはCPUを深いスリープに入れて消費電流を減らすdelayWDTという自作の関数を使っています。2号機でもこの関数を使って待機時の消費電流を減らす予定です。
▼2号機の電源系統、案-1

2号機も電池3本で動かすつもりですが、気圧センサーのMPL25Hの電源電圧は3.3Vなのでそのままでは使えず降圧する必要があります。CPUは電池に直結して使った方がロスが減る、と考えて電池電圧のままで動かしてみます。但し、CPUのクロックを16MHzから8MHzに下げて消費電流を減らすことにします。
この回路では電池電圧が下がると時計のパルスモーターの電流が減ります。その影響で、電池はまだ残っているにもかかわらず時計のパルスモーターが脱調してしまうという残念な現象が1号機で発生しています。この回路を使う場合は、電池電圧の低下に応じて時計の駆動パルスを補正する機能を入れると、電池の能力を使い切ることが出来るはずです。
たぶんこれが一番優れた方式のような気がしていたのですが、I2Cのレベルコンバーターが必要になるので、部品が増えて実装が苦しくなります。
ならばいっそのことCPUも3.3Vで動かしてみます。
▼案-2 (最終案)

これならI2Cのレベルコンバーターは不要です。また、CPUを一定の電圧で動かすので、時計のパルスモーターの駆動条件をプログラムで補正するようなことはしなくても済みます。
この回路で気になるのはシリーズレギュレーターが消費する電流です。幸いなことにCMOSタイプのシリーズレギュレーターは自分が消費する電流がすごく小さく、10μAも消費しないようなので、そういう素子を使えば大丈夫そうです。
ということで、この回路を作って消費電流を測定してみると、動作時は4.2mA、待機時は33μAでした。(delayWDTのデモプログラムで測定しています)
動作時の消費電流が1号機より減っているのは、クロックを8MHzに下げたことと、電源電圧を3.3Vに下げたことによる効果です。シリーズレギュレーターが入っているので待機時の消費電流が1号機より少し大きくなっています。でも電池電圧が3.5Vくらいまで下がっても影響が出ないので、たぶん1号機より長い時間動き続けると思います。ということで、この案で行くことにしました。ちなみに、1号機では電池の電圧が4.1Vくらいまで下がると動作がおかしくなります。
◆まとめ
ということで、やっと電源系統を決めることが出来ました。簡単な話なのにこの結論にたどり着くまでにずいぶんと時間がかかってしまいました。
この実験はクロック8MHz、電源電圧が3.3Vで動くArduinoが必要になりますが、そのためにブレッドボードでArduinoを動かす環境を作りました。またプログラムは Arduino Pro 8MHz/3.3V としてコンパイルすれば実際の環境と同じになって何かと好都合です。ということで実験を進めたのですが、途中で原因不明のトラブルが発生して解決にかなり時間がかかってしまいました。CPUのヒューズがおかしいのではないかなど調べたりいろいろ悩んだのですが、結局原因はブレッドボードの接触不良というつまらない現象が原因でした。
具体的には、アナログVccのピンを受けるブレッドボードのメスコンタクトの片方が座屈し、正常に接触しない状態になっていました。AVccが正常に供給されなかったのでブラウンアウトが検出され、CPUが止まっていたようです。
ブレッドボードは時々点検し、コンタクトに異常があったり、バネがへたったりしている物は思い切って捨ててしまう方が幸せになれます。