Arduino クロック周波数と消費電力

I2Cの通信でリモートのArduinoにつけたLEDを点滅させることができましたので、この状態で、フューズビットを書き換えて、いろいろなクロック源での動作と消費電力を調べます。

書き換えるフューズビットは、SUT_CKSELとCKDIV8です。Atmel studioの書き込みGUIで操作します。ちょっとだけ注意すべきは、遅いクロックにした場合、通信速度を下げないと書き換えができません。まあ、エラーが出るので一目瞭然ですが。

I2C通信は、16MHz外部水晶、16MHz 外部水晶内部で8分周、内部8MHz発振器、内部8MHz発振器を8分周の設定のいずれも同じように動作することを確認しました。電源は3.3Vなので、16MHz 外部水晶の設定は実はオーバークロック。でも動いている。

次に、消費電力をはかりました。LEDをblinkするスケッチを書いてやり、設定を変えた時にblinkの周期が変わりますので、実際にクロック源が変わったことを確かめました。消費電力は、電源をDCDCで供給しているので、その効率を含めた値になりますが、参考にはなるでしょう。また、消費電力はLEDの点灯状態ではかっていますのでその分を含んでいますが、おおむねLEDの消費電力は2.6mW程度です。

32.5 mW 16MHz 外部水晶
23.4 mW 8MHz 内部発振器
15.6 mW  16MHz 外部水晶 8分周
13.0 mW 8MHz 内部発振器 8分周
9.1 mW   128kHz 内部発振器

まあ、どれも小さな消費電力ではあると思いますが。。。
消費電力は周波数に比例するのかと思っていましたが、そうでもないです。うーむ。計測がいい加減なのかな?

仕事をしていない時にパワーダウンさせるなどされればもっと下がるわけですが、何もせずにプログラムを書いてもこの程度ということで。

11/21に、I2C通信をすることによってLEDを点滅させるプログラム動作状態での消費電力をはかりなおしました。
どうも、DCDCの上流で電力を測ると、DCDCの効率にも影響されて素のCPUの動作がよくわかりませんので、今日のところは、3.3Vの電源ラインでの消費電流を測ってみました。
21.0 mW 16MHz 外部水晶
12.2 mW 8MHz 内部発振器
4.4 mW 8MHz 内部発振器 sleep mode idle に入れる
5.5 mW  16MHz 外部水晶 8分周
3.1 mW 8MHz 内部発振器 8分周
1.7 mW 8MHz 内部発振器 8分周 sleep mode idle に入れる
1.7 mW 8MHz 内部発振器 8分周 sleep mode adc I2C通信が動作しない
1.42 mW 8MHz 内部発振器 8分周 sleep mode pwrsave I2C通信が動作しない
1.25 mW 8MHz 内部発振器 8分周 sleep mode standby I2C通信が動作しない
1.02 mW 8MHz 内部発振器 8分周 sleep mode pwrdown I2C通信が動作しない
1.32 mW   128kHz 内部発振器 I2C通信が動作しない
1.09 128kHz 内部発振器 8分周  I2C通信が動作しない
と、こんな感じになりました。sleep mode idleに入れた時の電力の削減は結構ありますねえ。

ATmega328power
消費電力をグラフにするとこんな感じで、クロックにだいたい比例しているからいいかな。

カテゴリーDIY

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)