SSブログ

AVR省電力化への挑戦 [Arduino]

AVRマイコンを省電力化することを調べてみました。

Arduino playground - ArduinoSleepCode
http://www.arduino.cc/playground/Learning/ArduinoSleepCode

SLEEP_MODE_PWR_DOWN で一番省電力になるようです。

Arduino playground - Enerlib
http://www.arduino.cc/playground/Code/Enerlib

こんなライブラリもあるようです。

でも、もっと根本的に省電力化をしたいと思いました。物理的に回路を切断できないかと。
リレーを使ってなんとかしたいと思ったのですが、マイコンから直接リレーを駆動するのはまずいらしい。
そこで、今回のキーデバイス、、

フォトモスリレー HSR312 (2個入)
http://akizukidenshi.com/catalog/g/gI-01098/

hsr312.png
これを使って、こんな感じにしてみました。
selfpoweoff_circ.png
selfpoweoff_bb.jpg
スケッチは、ICクリップを使ってArduinoISPで書き込みです。
ATtiny2313 のFUSEはたしか、Low 0xC4, High 0xDF, Ex 0xFF としたと思います。
// Self Power Off テストプログラム (ATtiny2313, 8MHz)
int pin, time = 10;
long previousMillis = 0;

void setup() {
  pinMode( 14,  INPUT );      // 電源ON延長スイッチ
  pinMode( 15, OUTPUT );      // 電源ON保持リレー出力ピン
  digitalWrite( 15, HIGH );     // リレーON
  for(pin = 0; pin < 10; pin++) pinMode( pin, OUTPUT );  // 残り時間表示LED
}

void loop() {
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > 200) {
    previousMillis = currentMillis;
    if(time == 0) digitalWrite( 15, LOW );  // 残り時間 0ならリレーOFF
    for(pin =  0; pin < time; pin++) digitalWrite( pin, HIGH );  // 残り時間表示
    for(pin = time; pin < 10; pin++) digitalWrite( pin, LOW  );
    time--;
  }
  
  if( digitalRead(14) == HIGH ) {     // スイッチが押されたら残り時間リセット
    time = 10;
    previousMillis = 0;
  }
}

赤のLED点灯が、実際にAVRマイコンに電流が流れていることの確認です。


ボタンを押すと、ATtiny2313の電源と、スイッチの入力ピンに電流が流れます。(ダイオードを1本かませているので電源電圧が、スイッチの入力ピンにかかる電圧より低くなってしまいますが、動いています。)
すると、ATtiny2313が起動し、電源ON保持の出力がHIGHになり、リレーをONにして、ATtiny2313に電源が供給される状態を維持します。
作動中、スイッチを押されることを関知するため、スイッチの信号入力ピンがありますが、リレーでONになった電流がスイッチの信号入力ピンに入り込まないように、ダイオードでせき止めてあります。
スケッチで、電源ON保持の出力をLOWにすると、リレーが切れて、電源OFFとなります。
(Off-State Leakage Currentが最大でも1μA、、ほぼ0ということだと思う、、)

とりあえず動いた、、けど、こんな使い方をしていいのかどうか、、定格範囲で使用できているのかどうか、調べてはいません、、あくまでホビーユースです。

そろそろ電流がちゃんと測れるテスターがほしいな。



この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。