google-site-verification: google3bd66dd162ef54c7.html

Arduinoをスタンバイ状態からウォッチドッグタイマー割り込みで復帰させる

 Arduinoのスリープ機能のテストを行いました。狙いは現在取り組み中のアナログ気圧計の電池駆動です。

 ArduinoというかATmega328Pにはいろんなスリープモードがありますが、やりたいのは一番消費電流が少なくなる、拡張スタンバイ(SLEEP_MODE_PWR_DOWN)。この状態から抜けるのには外部トリガしか使えないと思っていたら、ウォッチドッグタイマー(以下WDT)割り込みでも復帰できるようです。これって、CPUが自分で目覚し時計を掛けて寝ちゃうようなもので、何だか面白い動作です。

 ネットで情報を集めるとWDTの使い方はいろいろヒットしますが、ほとんどは割り込みではなくリセットをかける方法。まあこれがWDTの本来の使い方なので当たり前ではあります。でも作ろうとしている気圧計では変数の値を保持している必要があるのでリセットするわけにはいきません。

 とは言ってもWDTで割り込みを使った先人の方たちの情報をいくつか発見できました。その中で一番しっくりきたのが、LabIIIさんの、Arduino Sleep_Watchdog_Batteryという記事。記事中にあるnightingale.zipの中に、nightingale_1.pdeというスケッチを公開されています。

LABIIIさんの記事

 このスケッチは光センサで鳥(ナイチンゲール)の鳴声を出すものですが、WDTやスリープの使い方がおおいに参考になります。

 もちろんそのままでは使えないので改造し、まずはLチカを作ってみました。動作としてはパワーダウンモードでスリープさせ、この状態からWDT割り込みで周期的にLEDを点滅させるスケッチです。
 スケッチファイルはこちら、 拡張子は.txtになっています。

 一部納得出来ない部分は独自解釈で修正を行っていますが、基本的な操作はオリジナル通りです。

 Arduino UNOの状態ではUSBインターフェイスのLSIが同居していて正確な消費電流が測定できないため、CPUをブレッドボードに移して消費電流を測ってみました。こんなことしなくてもいいように、90年代に流行った486のCPUのゲタみたいな物を作って、消費電流を測れるようにするといいかもです。

▼ブレッドボードでCPUの消費電流測定
チップの単独動作で確認

▼スリープ中の消費電流は
消費電流は27μA程度
 27.5μAでした。これなら2000mAhの単三電池で4年以上気圧計を動かせそうです。なお、電池3本使って4.5Vで動かすつもりです。

 興味深いのはスリープに入れる system_sleep関数。(下記)

void system_sleep() { // システム停止
cbi(ADCSRA,ADEN); // ADC 回路電源をOFF (ADC使って無くても120μA消費するため)
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // パワーダウンモード
sleep_enable();
sleep_mode(); // ここでスリープに入る
sleep_disable(); // WDTがタイムアップしたらここから動作再開
sbi(ADCSRA,ADEN); // ADC ON
} //system_sleep

 赤字部でADコンバーターの電源のOFF/ONを行っています。

 動かしたスケッチの中ではADCは使っていないのでこの行はいらないだろう、と思って最初は外していたのですが、消費電流が120μAとやけに大きい。うーん困った、もしやと思って赤字部を復活させると消費電流は27.5μAに激減したという次第です。

 これならコンパレータやシリアル通信回路などの電源も切ればもっと消費電流を減らせそうなのですが、今のところその方法が判らないです。もっと勉強が必要ですね。

 ともかくArduinoのCPUを極小の消費電流にスタンバイさせる方法が判ったので、時計を改造したアナログ気圧計の電池駆動は何だか出来そうな気がしてきました。

【追記】
 使い易くするために関数(delayWDT)にまとめてみました。引数を指定するだけで省エネでスタンバイします。
関連記事

tag : Arduino スリープ 電池駆動 消費電流

コメントの投稿

管理者にだけ表示を許可する

ADCって意外に電流流れるんですね

参考にさせて頂きました。

re:ADCって意外に電流流れるんですね

ikkeiさん、今日は。

ADCはいろいろなアナログ回路があるので、消費電流が大きいんでしょうか。

No title

ラジオペンチさま、はじめまして。try2break on FC2 と申します.
すいません、
勝手に以下のページからこのページへのリンクをしてしまいました.
http://try2break.blog.fc2.com/blog-entry-83.html
お手数で申し訳ございません,もし問題等ございましたら
お知らせお願い致します.よろしくお願いします.

re:try2breakさん

連絡ありがとうございます。

リンク貼っていただいてぜんぜんかまいません。何かヒントにでもなっているなら嬉しいです。
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード