ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

arduinoコミュのarduino mega 2560 での省電力動作

  • mixiチェック
  • このエントリーをはてなブックマークに追加
現在、arduino mega 2560 (の互換品と思われる SeinSmart 2560) を
使って消費電力の確認をしていますが、スリープモード(PWR_DOWN)
にしても 結構電流を食っている状態です。

省電力モードについてはあまり詳しくないのですが、 以下のような状況
になっています。

Uno(秋月の互換品)
・通常 22mA / パワーダウン 7mA

mega 2560 (SeinSmart)
・通常88mA / パワーダウン 33mA

※1 電流計は 12V のDCプラグ側で計測
※2 いずれも 5V 16MHz外部クロック
※3 Uno はシリアル変換器を外して計測(外さなくても同じ結果)
※4 パワーダウンモード中でも、1秒毎jjに WDT 割り込みで処理実施

電源のLEDで食ってるのは仕方ないとはいえ、
mega を車載常設にしたいので 33mA はいささか
電流を食いすぎな気がします。20mA 以下におさえたい
ところなのですが・・・

aruduino mega 2560 には USB シリアル変換器が最初から
オンボードで搭載されており、これが多少なりとも電気を食って
いるという話を聞いた事あるのですが、これを無効にする事って
可能でしょうか。

ご存じの方いらっしゃいましたらお教えいただけると幸いです。

コメント(20)

Arduinoの省エネは昔試したことがありましたが、同じように実験の過程でUSBシリアルが載ってることに途中で気づいて、結局PCのUARTを直接接続(HC00と直列抵抗で作ったインチキですが)できるようなUSBシリアルの載ってない物を自作して対応しました。

USB変換チップ自体はmega16u2とか8u2が使われているので、ISPプログラマで元のコードを吸い上げて保存した上でUSBチップをパワーダウンモードに入れるような短いコードをAtmel StuioなりWinAVRなりでつくって書きこめばUSBチップの消費電力もuAオーダーにまで落ちると思います。スケッチをUploadするときはまた元のコードに書き戻さないといけないので激しく面倒だとは思いますが、たしかクロックを切断したりリセットを入れたりでは消費電力はまったく下がらなかった記憶があります。

あとご指摘のとおりpower LEDもたぶん3mAぐらいは食うでしょうから気になるならチップ抵抗をはずしてしまうしかないでしょうかね。

あと書くの忘れてましたが、オンボードのリニアレギュレータの漏れ電流?も5mAぐらいあると思います。
ここを削りたい場合は改造してultra-low quiescent currentタイプの物に交換するしかないでしょうね。TI
などからIq=20uAぐらいの物が出てると思います。
情報ありがとうございます。うーん、機材の揃っていない環境において
改造するのは厳しそうですねぇ・・・となったら考え方を変えて、消費電力
を抑えるよりも、昼間はメインバッテリー側にソーラーパネル充電する
ようにして、一晩バッテリーが持つようにするとか・・・
AVR自体のプログラム環境が無いのですね。
だとすると後は、12V→5Vをオンボードレギュレータを使わずにスイッチングタイプにすれば電流は半分ぐらいに減らせるとおもいます。(中国製の安いスマフォ用のシガレット→USB変換見たいな物を用意してシガレット側を常時ONに、USBをそのままArduino
に挿して電源をとるとか)それでも15mAは食うとおもうのでつなぎっぱなしにするのは厳しそうですが。

もし車に乗ってない時に何の処理をしないのであれば、保持したいデータをEEPROMに書き込んで電源を落としてしまうかですね。ACCが落ちるときの電圧の下がりをADCなりコンパレーターで監視して即EEPROMに書き込むようにすれば特に意識しなくても電源が落ちれば勝手にバックアップすることができるのでデータの保持はできます。
設定などは、変更した時に即時変更してるので突然電源を落としてもいいのですが、
ACCが落ちている時も arduino はスリープ状態になりつつも、別の処理を行う
予定です。(ミラーの自動収納、バッテリー電圧をLEDの点滅でモールス表示、
赤外線による室内監視など) それらのセンサー類、およびLEDで電気はどうしても
食うのでしんどい状態、いろいろ悩んでます。
横から失礼します。

>aruduino mega 2560 には USB シリアル変換器が最初から
オンボードで搭載されており、これが多少なりとも電気を食って
いるという話を聞いた事あるのですが、これを無効にする事って
可能でしょうか。

たぶんできないと思います。物理的に外せばできますが...。
標準のラインアップでは、Arduino Pro (miniを含めて)は変換が載っていないのですが、2560の搭載機種はないと思われるので、駄目ですね。

ちなみに、こんなのはありますが。
https://www.sparkfun.com/products/11007
https://www.sparkfun.com/products/10744
https://www.sparkfun.com/products/10743
以前はMultuWii用にいろいろあったのですが...私もFTDIを外付けするヤツを3枚程使っています。
UNOやMega2650のUSB-Serial変換部(16u2とか)はDFUモードがあるので特にISPプログラマとか無くても書き換えはできるようですね。
でも、ブートローダー破損時(たまにある)の復旧とかにも使えるので、AVRISP-Mk2とか1台持っていても損は無いと思いますよ。

アイデアとしては、16u8の起動後、一定時間が経過したらパワーダウンさせるとか(スケッチの書き換えは16u8をリセットさせて一定時間以内に行う)、起動時にICSP端子のどれかをチェックしてパワーダウンさせるとか(スケッチを書き換えるかパワーダウンさせるかはICSP端子のどれかをジャンパするかしないかで選択)、スケッチ書き換えとパワーダウンを両立させることもできるかと思います。
ちなみに私は、UNOの8u2を書き換えて使っているものがありますが(パワーダウンではないですが)、スケッチを書き換える時には別に用意したUSB-Serial変換を328Pのシリアル入力に接続して書き換えてます。
>>[5]
運転のサイクルにもよるのですが、いっそ、大容量のUSBバッテリーとか、それに準ずる構成のバッテリーから電源供給ってのは?
運転時にバッテリーに充電して、監視時はバッテリーから給電。バッテリーが上がると監視はできなくなりますが、車のバッテリーには影響しません。
>起動時にICSP端子のどれかをチェックしてパワーダウンさせるとか

似たような事を考えてました。ソースが公開されてるので一番頭に数行そういうルーチンを記述すれば簡単にいけそうですね。回路図見たらISPの4,6がそれぞれPB2,GNDになってるのでジャンパー挿すのに都合よさそうです。先頭で内部プルアップしてからPB2を読んで切り分けでいけそうですね。

今ちょっと仕事が立て込んでるんですが、いずれ必要になるケースが出てきそうなのでそのうちやってみようと思っています。DFU用のHEXにできればベターですが、DFUは使ったことないのでちょっとお勉強しないとです。
>Y.Mitaさん
 やっぱ無理っぽいですね、ちょっと別の方法考えてみます。
 すでに手元に MEGA 2560 ボードは2枚あるので新しいの
 買うのは・・・お財布的にもキツイ・・・

>jtakaoさん
 お恥ずかしい話、AVR レベルでの話はまるっきりわかりません・・・
 もちろん AVR ライターも持っていません。だから、内蔵クロックの
 8MHz の arduino UNO (328) 作ろうにも作れず困ってます。

>さかきさん
 実は車には、ソーラーパネル充電に対応したサブバッテリーを
 搭載しており、80A/hの大容量があります。ここから電源を
 持ち出せば、メインのバッテリーが消耗する事もないんですが
 理由あってそれは避けたいな、と。ダイオード噛ませれば大丈夫
 かな?

>ねこ蔵さん
 申し訳ない、何のことだかさっぱり・・・(^^;)
 arduino に乗ってる6ピンのコネクタが、何をするためのものかも
 実は十分理解していません。
>申し訳ない、何のことだかさっぱり・・・(^^;)

6ピンのコネクタは、AVRマイコンのプログラム書き込み用のポートです。本体のマイコン用とUSBシリアル用の2つあるはずです(パタンだけで未実装の製品もあります) Arduinoではブートローダーで立ち上がってシリアル(USB)からスケッチをロードできるようになってるので通常は使いません。

このプログラムポートは汎用I/Oと共用ピンになっているので、ここにジャンパーがささってるかどうかをソフト側から見ることが出来ます。なのでこのUSBシリアルに使われてるAtmega8U2というマイコンのプログラム(公開されてます)を改造して、ジャンパーが無ければ通常のUSBシリアルとして動作、ジャンパーがささってたら即パワーダウンに落とすという物を作って書き込めば、ジャンパーの有無でUSBシリアルを無効にすることが出来ます。

で、たった今プログラムが出来てUNOの類似品で試してみたら4-6にジャンパーを挿したてUSBを無効にすれば20mAほど消費電流が下がりました。ボードごとにUSBのデバイスIDやデバイス名などを変更したりしないといけないのと、DFUでの書き込み評価が出来てないのでまだ公開は出来ませんが、そのうちやりたいなと思っています。



以下AVRのプログラム環境のある人向けですが、こんな感じで出来ると思います。

こんな関数を作っておいて

#include <avr/sleep.h>
#include <util/delay.h>
void pdcheck(void)
{
DDRB &= ~0x04; //PB2 input
PORTB |= 0x04; //PB2 internal pull up
_delay_us(10);
if (PINB & 0x04){
return;
}else{
SMCR = 0x5; //power down mode
sleep_cpu();
}
}

USB serialの main関数内の先頭行に pdcheck(); を付け加えればOKです。


USB serialのBuild環境を作るのがめんどいですが、こちらで解説されてるのでそのとおりにやればmakeできると思います。

http://forum.arduino.cc/index.php/topic,111.0.html

USBのディスクリプタの中にある Vendor IDとProduct IDはそれぞれ対象のボードに合わせて書き換えてください。
>>[11]
仕事早い! 

パワーダウン前にプルアップをオフにしておけば、あと0.5mAくらい消費電流を下げられるかもしれないですね。
「たく」さん、
>もちろん AVR ライターも持っていません。だから、内蔵クロックの
 8MHz の arduino UNO (328) 作ろうにも作れず困ってます。
このあたりを参考にすれば、AVRライターの代わりはできますよ。
http://make.kosakalab.com/arduino/bootloader/

内部発振のArduinoもこれで作って遊んでいます。
「たく」さん、 省電力の面では12V入力を5Vに下げる段階で多くの電流が損失しています。12Vで33mA流れますが、arduinoでは三端子レギュレータという部品で電圧を下げているので、電圧差x電流分が発熱として失われています。消費電力の12分の7が無駄と言うことですし、12Vでつかうと部品が熱く感じませんか。
http://ja.wikipedia.org/wiki/三端子レギュレータ

スイッチング電源を用いると消費電力が減ると思います。
秋月のこれでもいいでしょうし、私は100円ショップの車載用USB電源を分解して波形を確認してから使いました。
http://akizukidenshi.com/catalog/g/gM-06187/

この100円ショップUSB電源でUSB入力から5Vを入れてやれば良いでしょう。消費電力が下がると思いますが、さらにmegaのピン数がどうしても必要でなければ、UNO互換機、互換基板からの自作にしておけば壊しても惜しくないかと思います。
ねこ蔵さん
 あれから少し勉強して、概念的ながらも多少はわかるようになりました。(多分)
 提示された方法だと、arduino の上の段階の AVR レベルのソース修正になる
 訳ですね。それって標準の arduino IDE だけで実現できるものなのでしょうか。
 そのへんがまだちょっとわかりません・・・(^^;) 昨日、AVR のライター作ってみた
 ので、DIP 40 ピンの arduino 作ってそっち使おうかしらんなどとも考えてみたり。

Y.Mitaさん
 教えていただいたページなどを参考にしてちょっと勉強し、ライター作ってみま
 した。8ピン、20ピン、40ピンの DIP AVR のヒューズビットなどを読み出せる
 レベルの動きと、一部機種でLチカの書き込みができるようになりました。
 1x4ピンと2x3ピンの端子の意味がなんとなくわかりました。

nnishさん
 7805による降圧のロスは存じてますが、手元にある降圧電源が無いので
 それにしてました。そういえば、100円ショップなどで売ってるシガーUSB
 なんかは100円で数百mA取れるので、そっち使った方が効率よさそう
 ですね。mega を使う理由は、ピン数の不足です。現在、UNO にHC595や
 HC165 などのシリアル入出力を大量に使ってまかなっているもので、
 UNO では I/O が圧倒的に不足しているための mega 採用です。
>それって標準の arduino IDE だけで実現できるものなのでしょうか。

CのソースコードをビルドしないといけないのでCコンパイラが必要になります。以前の物だとGCCベースのWinAVRというフリーの物がデファクトスタンダードでした。今はAVR StudioというATMELの純正ツールに統合されましたので少し重いですがそれをダウンロードすればCのコンパイルから純正もしくはそれ互換のプログラマがあれば一通りなんでも全部出来ます。

>DIP 40 ピンの arduino 作ってそっち使おうかしらんなどとも考えてみたり。

省電力追求するなら余分な物が載ってないのでそっちがいいかもですね。
Arduinoについては基本的にハード側の必要な仕様は、ブートローダーが焼かれてるCPU、PCとのシリアル通信(TXD,RXD) あとシリアルポートを開いたときに出力されるDTR信号でリセットを掛けるための回路ぐらいです。

シリアルインターフェースはArduino Pro とかの回路が参考になると思います。
ただし回路図はRS232C直接ではなく、FTDIなどの5V/3V変換&反転されたTTLシリアル用です。RS232Cをつなぐ場合はレベル変換と反転を入れなければいけないので気をつけてください。(自分はMAX232とか使うの面倒なので、HC00に100Kとか入れて無理やりつないでます。参考:http://elm-chan.org/docs/rs232c.html)
>>[15]
今回の省電力の目的って、車のバッテリー消費の削減、つまり動作時の省電力よりも使っていない時の省電力を重視していると思うのですが…
もしそうだとすればスイッチング電源(DC-DCコンバーター)の使用は充分注意する必用があると思います。

スイッチングレギュレーターによる降圧は確かにシリーズレギュレーターより効率が良いですが、それはある程度の負荷がある時の数字であって、使用していない時の場合はレギュレーター回路自身の消費電力が無視できなくなります。特に100円ショップで売ってるようなものは要注意でしょう。

例えば秋月で売ってる、この「超高効率DC-DCコンバーター」を持ってたので確認してみましたが
http://akizukidenshi.com/catalog/g/gM-06673/
スペック上では97〜94%という数字ですが、入力12V、無負荷時で6.5mA流れます。
別に手持ちの100円ショップで売ってるようなシガーソケットに入れるタイプのものでは無負荷で11mA流れました。これでは逆効果です。

#2でねこ蔵さんが書かれているように、quiescent currentが低いシリーズレギュレーターのほうがいいんじゃないか…と思います。秋月で売られてる三端子レギュレーターをざっと見てみましたが、ultra-lowまではいかなくても1mA以下のものはあるようです。
>>[17]

その視点は大切だと思うんですが、今回はarduinoを電源オフで無負荷にするわけでなく、スリープから定期的に起こして動作させると共に、センサー類やLEDを動かしたいので、常時負荷がかかっていると思うのです。その時の電流消費が重要になるのではないでしょうか。

それと、個人的には車の常時電源に接続する機器の電源は熱が一番心配です。改造による発火では車両保険も下りないと思います。100円ショップのものを勧めたのは悪かったです。たまたまノイズの少ないものを使ったことがあるもので。私は常時電源でありませんがACC(乗車中だけオンになる電源)からドライブレコーダーの電源を取るのに、aitendoのこれに放熱板をつけコンデンサーを信頼の置けるものに変えて、トロイダルコイルを加えて、通電時の温度とリップルを測定してから使いました。これも半導体が互換品だという点で信頼性について批判されるかもしれません。12V車の電圧は走行中は14Vを超え(うちでは14.3Vくらい)、車載リレーのオンオフ時にスパイクも乗るので、直にarduinoに入れるのには抵抗があります。

その辺のトレードオフはスレ主さんのご判断にお任せします。
>>[18]
? 私は単に、使用形態によってはDC-DCコンバーター自体の消費電力に注意したほうがいいですよ…と言ってるだけで、100円ショップのものを批判しているわけではないですよ。ただ、100円ショップで発売されているものは、その使われ方から低消費電力の工夫をしているとは思えないので「要注意」と書いただけです。もし気にさわったようでしたらすみません。
互換品については私は何も言ってないです。私も様々な互換品を使ってますが…。


>>[19]
こちらこそすみません。私も常時電源につなぐには発火やコンデンサーのショートが心配で100円ショップのものは避けるのに、スレ主さんに安易に勧めるように書いてしまって、申し訳なかったなと思いまして。これからもよろしくお願いします。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

arduino 更新情報

arduinoのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング