Arduino 放置したポートが及ぼす電源電流変化
2020年4月25日:Arduino やっぱり気になる放置ポートで、未処理のI/Oポートに関して「やっぱりあかんやろ」っと意見しました。
入力回路のシュミットゲート、入力電圧がスレッショルドに近づいた時、具体的にどのくらいの電流が流れるのか電源電流の変化として計ってみました。
そのためのツールがこれ。
2019年3月29日:TIの電流検出アンプ
2019年5月14日:TIの電流検出アンプ 入荷 置き換えてみた
で紹介しました「INA199」。
このゲイン50倍のICを使って電流検出回路を作りました。
電源のハイサイド側に入れて電流を測定します。
電流検出抵抗を1Ωにすれば、出力電圧0.1Vで2mAの電流が測定できます。
Arduino-UNOのATmega328Pにこんなスケッチを書きます。
void setup() {
PORTB = 0b00000000; // data off
DDRB = 0b00111110; // PB5~PB1出力 PB0入力
PORTC = 0b00000000; // data off
DDRC = 0b00111111; // PC5~PC0
PORTD = 0b00000000; // data off
DDRD = 0b11111111; // port指定
}
void loop() {
cli(); // 割り込み禁止
while(1){ // PB0の状態をPB1に出力
if(PINB & (1 << PORTB0)) PORTB |= (1 << PB1);
else PORTB &= ~(1 << PB1);
}
}
PB0だけを入力にして他のポートは全部出力。
そして、PB0を入力してその状態をPB1にコピー。
PB1をオシロで見ると、PB0のH/L状態(スレッショルドを越えるか)がわかります。
CPUはUNO基板から取り外して単独で実行。
PB0に発振器から三角波を入力し、その振幅とDCバイアスを変えて様子を見ます。
その結果・・・ ざっと1mA弱の電源電流変化が観察できました。
※追加実験 入力ポートを増やす
↑のはPB0だけが入力ポート。
スケッチをこのようにしてPC0とPC1(A/D入力ポート)を入力に変更。
PORTC = 0b00000000; // data off
DDRC = 0b00111100; // PC5~PC2出力、 PC1,0入力
まず、PC0、PC1をGNDにつないだ状態でPB0に三角波(↑と同じ)。
オシロ、電流波形はACで観察
次に、PB0=PC0=PC1と3つをパラって三角波。
3ポートとも同じ信号を入れます。
すると・・・
電流が増加。
それぞれのポートでシュミット回路が働いていると想像できます。
さらに、スケッチを変更。
DIDR0レジスタを操作して、PC0とPC1のデジタル入力を禁止します。
PORTC = 0b00000000; // data off
DDRC = 0b00111100; // PC5~PC2出力 PC1,0入力
DIDR0 = 0b00000011; // ★デジタル入力禁止
A/D変換する時、これは必須。
これ、analogRead()が自動的にやってくれてるのか?
すると・・・
ということに。
| 固定リンク
「Arduino」カテゴリの記事
- Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMの例(2025.03.22)
- パルスジェネレータをI2C液晶で動かす(2025.01.28)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 1/nカウント方式とDDS方式の2相パルス発生回路(2024.10.13)
- おっと。map関数の計算桁に注意(2024.10.06)
コメント
こりゃ面白い、というか知りませんでした。こんなに電源電流に影響するとはえらいことですね。うちでも測定してみます。
UNOのCPUの消費電流は16mAくらいあるので、オシロのCH3はACカップル、あるいはオフセットをなんらかの方法で除去して測定されたんですよね。
投稿: ラジオペンチ | 2020年5月 3日 (日) 06時36分
CH3はACで見ています。
オシロのパネルに「AC」のランプは光ってますが、画面コピーにはその表示がありませんでしたね。
ハイサイド側で電流測定できるよう(GNDを共通にしてあれこれつなげられるよう)電流検出アンプを作った次第です。
これも、主電源とアンプ系の電源を分離して(アンプ系を電池駆動か)作り直したいところです。
INA199は手持ちの関係で50倍のを使いましたが100倍のもあります。
スケーリングの面で100倍のほうが使いやすいかと。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2020年5月 3日 (日) 09時27分
analogReadとDIDR0、どうやらanalogReadは何もしていないようですよ。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2020年5月 3日 (日) 14時18分
今しがた測定結果をまとめて記事をUPしました。
http://radiopench.blog96.fc2.com/blog-entry-1002.html
ハイサイドの電流波形の測定がすぐに出来なかったので、直流測定でやったのですが、無駄な電源電流が流れることがよく判りました。
こりゃ真面目に空き端子処理しておかないとまずいです。
投稿: ラジオペンチ | 2020年5月 3日 (日) 20時06分