マイコン工作実験日記

Microcontroller を用いての工作、実験記録

省電力化の試み -- その1

2010-10-25 22:55:59 | Weblog
WT32を使ってのリポ電池充電がちゃんとできるようになったのはいいのですが、現在の状況ではみるみるうちに電池電圧が減っていきます。USB経由で充電していても、消費される電流の方が充電される電流よりも大きいらしく、少しずつではありますが、電圧が下がり続けるようです。

来月のMTM06への参加申し込みをしたので、このBluetooth対応ジャケットもデモしたいと考えていますが、この調子だとあっという間に電池切れになってしまいそうです。そこで、できることから消費電流を下げる試みを施していきたいと思います。

まず現状ですが、消費電流を節約するような試みは何も施していません。MCUも72MHzで動かしていますし、使いたい放題しています。考えられる節約法としては、(実際に対応するかどうかは別として)次のような項目が挙げられそうです。
  • LCDバックライトの調整 バックライトの調光機能は全く使用されておらず、常に一定の明るさのままです。しばらく操作されない場合には、バックライトを消灯するべきでしょう。
  • MCUのIdleモードを利用する 実行するタスクが何もないアイドル状態になった時にはLPC2388をIdle状態に遷移させ、プロセッサクロックを停止させることで消費電流を節約可能です。
  • MCUのPower downモードを利用する アプリケーション上での動きが無い場合にはLPC2388をPower down状態に遷移させ、特定のイベントによりWakeupする。
  • こまめに電源を切る LPC2388の周辺I/O機能の電源をこまめにON/OFFする。必要になった時に、電源を入れて、使い終わったら電源を切る。
  • 必要に応じでクロック速度を調整する ほんとうに72MHzのクロックが必要なのは、MP3の再生時くらいだと思われるので、それ以外の時はクロック落としていいはず。
  • LCDのsleepモードを利用する LCDコントローラにもsleep機能があるようだ。
  • WT32のsleep機能を使う WT32にもsleepがある。

まずは手を着け易そうな、最初のふたつを実装してみることにしました。バックライトって、いかにも電流喰っている印象があるので、まずはこれから。タッチパネルが30秒間操作されなかったら、バックライトを落とすことにしました。タッチすると点灯させますが、その際のイベントは無視してアプリケーションには通知しないことに。ほんとは、スライドショー機能を使ってJPEG表示している時は消灯してはいけないのですが、この機能は一時的に取り除いてあるので、また後で機能を戻した時に対応することとします。

Idleモードは、なんらかの割り込みがかかるまでは、プロセッサクロックを止めるという機能です。止めるのはプロセッサのクロックだけで周辺機器機能へのクロックは動き続けます。周辺機器あるいは外部からの割り込みにより自動的にクロック供給が再開されるので、特別な復旧処理は何も必要ありません。こいつをTOPPERS/JSPの依存部で使用します。JSPは実行するタスクが無い場合には割り込み待ちの状態になります。この部分の処理はWAIT_INTERRUPTというマクロで定義できるようになっていますが、これまではnopでしたので、実際にはプロセッサは空回りを続けていただけでした。そこで、この部分をIdleモードに遷移するようにPCONレジスタを操作する命令列に置き換えました。

バックライトの消灯により、見た目にも節約している印象を受けます。それに対してIdleモードの方は目にみえる変化が何も無いわけですが、時計表示をしているだけの時なんかには、ほとんどの時間はプロセッサは止まっているので、かなりの節約になっているはずです。

続いて、Power downモードも使ってみようかと思います。