« Arduino ポートの初期化と通信設定 | トップページ | 修理:文化シャッターのリモコンSTX8901G »

2020年5月 2日 (土)

Arduino 放置したポートが及ぼす電源電流変化

2020年4月25日:Arduino やっぱり気になる放置ポートで、未処理のI/Oポートに関して「やっぱりあかんやろ」っと意見しました。
入力回路のシュミットゲート、入力電圧がスレッショルドに近づいた時、具体的にどのくらいの電流が流れるのか電源電流の変化として計ってみました。

そのためのツールがこれ。

Ina1

11_20200502175601

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弱の電源電流変化が観察できました。

Cur000

Cur001

Cur002

Cur003

Cur004


※追加実験  入力ポートを増やす
↑のはPB0だけが入力ポート。

スケッチをこのようにしてPC0とPC1(A/D入力ポート)を入力に変更。
  PORTC = 0b00000000;   // data off
  DDRC = 0b00111100;   // PC5~PC2出力、 PC1,0入力

まず、PC0、PC1をGNDにつないだ状態でPB0に三角波(↑と同じ)。
Cur03
   オシロ、電流波形はACで観察

次に、PB0=PC0=PC1と3つをパラって三角波。
3ポートとも同じ信号を入れます。
すると・・・
Cur04
電流が増加。
それぞれのポートでシュミット回路が働いていると想像できます。

さらに、スケッチを変更。
DIDR0レジスタを操作して、PC0とPC1のデジタル入力を禁止します。
  PORTC = 0b00000000;   // data off
  DDRC = 0b00111100;   // PC5~PC2出力 PC1,0入力
  DIDR0 = 0b00000011;   // ★デジタル入力禁止
A/D変換する時、これは必須。
  これ、analogRead()が自動的にやってくれてるのか?

すると・・・
Cur05
ということに。


|

« Arduino ポートの初期化と通信設定 | トップページ | 修理:文化シャッターのリモコンSTX8901G »

Arduino」カテゴリの記事

コメント

こりゃ面白い、というか知りませんでした。こんなに電源電流に影響するとはえらいことですね。うちでも測定してみます。

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分

コメントを書く



(ウェブ上には掲載しません)




« Arduino ポートの初期化と通信設定 | トップページ | 修理:文化シャッターのリモコンSTX8901G »