STM32 Primer2の電源回路とバッテリー駆動時間
STM32 Primer2の電源ONは、ジョイスティックの中央ボタン押下で行います。一方、電源OFFはCirculeOSのメニューからshutdonwを選択することによって行います。いわゆるソフト制御ですが、具体的にどのような動作になっているのか興味があったため調べてみました。ついでにバッテリー駆動時間の測定を行いました。
電源回路
回路図の抜粋を以下に示します。回路図全体は、ここにあります。
回路図から分かる動作イメージは以下の通りです:
- VCC5_USB(USBバスパワー)とVBAT(バッテリー出力)がダイオードオアされ、MOS-FET(U6)のSourceにつながっている
- MOS-FETのDrainがステップダウンレギュレーターに接続されており、ここでシステムに供給する2.8Vを生成する
→ NOR回路のみは常時給電されるが、その他はMOS-FETのON/OFFによって給電が制御される - 初期状態ではU12(NOR)の入力は両方ともプルダウンされているためHighを出力
→ そのためVEもHighとなりMOS-FET OFF(P-CH)→給電停止状態 - Joystickの中央ボタンを押すとPBUTTON信号がHighになる
→ VEがLowになりMOS-FET ON →給電開始 - 同時にU15の出力がHighになるため、スイッチを離した後もVEがHighに保持され、MOS-FETはON状態を継続
→ スイッチを離すとPBUTTONはOpen状態になります(Pull downなし)。そのため、GPIOをInput floatingに設定してあります - SHUTDOWN信号はMCUのGPIOにてソフト制御
→ Shutdown時このPinをLowに落とすことによってVEをHighに遷移させ、MOS-FETをOFF状態、即ち電源OFF状態にします
上記のように電源ONはメカ的に行えますが、電源OFFはソフト処理になります。アプリケーションをCircleOS配下で動かす場合、Shutdown処理はCircleOSが行いますが、CircleOSなしで直接アプリを動かす場合は、電源OFF処理の作り込みが必要です。
MCUの電源はON/OFF対象と書きましたが、RTCとバックアップレジスタに給電するためのVBATピンにはバッテリーの出力が直接つながっています。CircleOSではshutdown時にクロック設定・スピーカーボリュームなどをバックアップレジスタに退避して、次の起動時に以前の状態を復元しています。
バッテリ駆動時間の測定
STM32 Primer2のバッテリーは1セル, 400mAhのLi-Ion電池です。Webの製品紹介では、バッテリ駆動6時間以上とありますが、実際にどの程度かをテストプログラムを使って計ってみました。テストプロラム(CireleOSアプリ)の概要は以下です:
- CircleOSからApplication_Handlerが呼び出される毎にLEDを点滅
- バッテリー電圧と起動時間をLCDに表示(1s毎に表示を更新)
LCD表示、LED点滅、バッテリー電圧の読み取りはCircleOSのAPIを使用することで簡単に記述ができます。Arduinoもそうでしたが、基本的なI/O処理を行ってくれるOS・ライブラリがあるとやはり便利です。テストプログラムのソースをアップしておきます。
「Toggle.zip」をダウンロード
起動時間は、Application_Handlerの呼び出し周期から積算しています。呼び出し周期15Hzの場合積算値を66msとしており、端数を切り捨てているため精度が悪いです。そのため、実際の動作時間はストップウォッチで計っています。
CircleOSでは、アプリケーションが動作中も周期的にバッテリー電圧の監視を行っています。バッテリー電圧の監視閾値は以下の通りです(マニュアルより):
- FULL = 4200mV
- LOW = 3750mV(Warningレベル)
- EMPTY = 3500mV(Shutdownレベル)
試験プログラムを、クロック36Mhz、LCDバックライト輝度2(5段階の真ん中)で連続動作させました。動作中の写真を以下に示します。
バッテリ電圧が3500mVを下回ったところできっちりshutdownが動きました。動作時間は200分です。バックライトをこまめにOFFしたり、MCUのスリープモードを使うなどすればもっと駆動時間を延ばせるはずです。
STM32 Primer2が使用しているLi-Ionバッテリーは、定格電圧3.7V, 放電終止電圧2.75Vです(データーシートより)。せめて3.0Vあたりまでバッテリーを使えないものかと思うのですが。大きな電流は流れていないと思うので、スイッチ用のMOS-FETやレギュレーター内で発生する電圧降下は僅かだと思うのですが。(ダイオードみたいな順方向電圧は、MOS-FETのソース・ドレイン間にはないですよね)
2009/10/25追記:
3.5Vでshutdownする理由がなんとなく分かりました。こちらをご覧ください。
バッテリーを860mAhのものに交換して、上記の連続ランを行ったところ、12時間動作後でもバッテリー電圧は3.77V残っていました。そのため、製品添付のバッテリーでも、カタログ値通りの6時間程度は動作しそうです。当初の試験で動作時間が短かった理由はバッテリーの使い方に問題があったためと思われます。
基板の写真
基板両面の写真を撮ってみました。結構部品点数があります。デバックやプログラム書き込み用USBポート制御のために8bitマイコン(ST72651)が乗っています(Joystickボタンの下)。
今後の予定
GPSレシーバーをつなぐために、シリアルポートの動作実験をしたいと思っています。シリアルポートは拡張コネクタに信号が出ています。CircleOSのAPIはありませんが、開発環境(Ride7)のライブラリフォルダーにUSARTドライバのファイルがあるためこいつを活用できそうです。
GPSレシーバーモジュールを拡張コネクタエリアに収めるのはスペース的には問題なさそうですが、以下の点が課題です:
1)電源
拡張コネクタに出ているのはレギュレーターを通した2.8Vのみです。スイッチサイエンス、秋月で売っているGPSレシーバーは5V動作のようで動作下限が3.3Vです。DC-DCコンバーターが必要ですが、一旦2.8Vに落とした電源を再度5Vにあげるのは効率が悪いです。とは言え、バッテリーから直接給電するとON/OFFが出来ないんですね。。。
2)2.8Vレギュレーターの容量、バッテリー容量
スイッチサイエンスさんのGPSレシーバーで50mA程度電気を喰います。DC-DCコンバーターの効率を考えると60~70mA程度の負荷増でしょうか。内蔵レギュレーターの容量は1.2Aなので大丈夫とは思いますが、forumの書き込みを見るとレギュレーターが破損したというケースが何件か報告されています。そのため、電源まわりはもう少しチェックが必要です。バッテリー駆動時間も減ってしまうため、バッテリーの容量アップ(換装)も行いたいところですが充電回路に影響がないかも確認する必要ありです。
« STM32 Primer2 | トップページ | Ride7開発環境のデバック制限解除ライセンス »
「STM32-ARM」カテゴリの記事
- NMEA-0183メッセージの解析(2010.02.27)
- STM32 Primer2 V1.2(2010.02.06)
- STM32 ADCの設定(2010.02.04)
- MOS FETを使用したハイサイドスイッチ(2010.01.11)
- GPSモジュールをテストする(2009.12.14)
この記事へのコメントは終了しました。
コメント