PICマイコンを低消費電力で動かす

デジタル屏風では、屋外の騒音の大きさに応じてLEDが光る騒音警報看板を試作しています。センサとアクチュエーターをPICマイコンPIC16F1778がコントロールする仕組みです。PIC16F1778には検知したマイクの出力電圧を増幅するオペアンプ機能、増幅されたマイクの電圧に応じてLEDを光らせるアナログコンパレータの機能が搭載されています。

●低消費電力の工夫あれこれ

屋外で電池駆動を想定しているため、できるだけ電力を消費しないものをつくる必要があります。「逆引きPIC電子工作やりたいこと事典」(後閑哲也著)の「できるだけ低消費電力で動かしたい」という節では、PICマイコンを低消費電力で動かすためのノウハウが記されています。

◆低電圧版のPIC16LFタイプを選択する

特にスリープ時の消費電力がPIC16Fに比べて低くなることが記されています。

◆クロック周波数を低くする

当該書籍には、PIC16Fをクロック数16MHzと32MHzで比較していますが、内臓クロックでの通常操作の場合、約2倍の消費電流が流れることが記されています。

◆電源電圧を低くする

◆入力ピンはLOWかHighに固定する

◆スリープを使い間欠動作とする

スリープモードにすることにより消費電流を効果的に減らすことができます。C言語プログラム中でSLEEP()関数(※大文字)を呼び出すことでスリープモードに設定できます。スリープモードでもWDT(ウォッチドッグタイマ)などは動作を継続するので、一定時間経過したときにスリープモードからウェイクアップすることで消費電流を低く抑えることができるのです。

●スリープモードを使った低消費電力の実現

今回開発している騒音警報看板では、明るい時にはLEDを光らせないという制御が必要なため、明るい間はスリープモードにすることにより消費電流を効果的に低減できると考えました。

◆MCCを使ったWDTの設定

まずはMCC(MPLAB Code Configurator)のSystem  ModuleでWatchdog Timer Enableの項目でWDT enabledを選定します。

次にMCCのWatchdog Timer Postscalerで、どのくらいの間隔でウェイクアップするのかを指定します。ここで指定した比率値に応じて、Watchdog Timer Periodにウェイクアップする秒数が表示されます。

PIC16F1778で設定したところ、ウェイクアップ時間は270sが最大でした。

◆Cプログラムでのスリープモードの制御

C言語でSLEEPし、WDTでウェイクアップする動作が外部から見えるように、一つのピン(RB7)をアウトプットモードで定義し、プログラムの先頭で点灯させ、10秒後に消灯しSLEEP()を呼び出すことで、SLEEPに入ったこと、ウェイクアップで再びプログラムの先頭にもどってきたことがわかるようにしました。SLEEP()実行時に入出力ピンの状態は維持されるので、消灯するという操作がないと、LEDはSLEEP()処理中も点灯しっぱなしで、ウェイクアップしたことがわかりませんでした。

◆ブレッドボード上での動作確認

ブレッドボード上で上記設定およびプログラムを書き込んだPIC16F1778を実行させたところ、WDTによるウェイクアップの動作がLEDの点灯、消灯、再点灯により確認できました。これで消費電流を大幅に削減できるはずです。

 

 

Follow me!