google-site-verification: google3bd66dd162ef54c7.html
FC2ブログ

Arduino よもやま話-16 (未使用ピンの電圧と電源の消費電流の関係)

◆ふたたび未使用ピンの話
未使用ピンをオープンのままにした場合の電圧の変化について、一つ前の記事で測定結果を示しています。簡単にまとめると、電源電圧の中央付近にゆっくりと電位が変化していく傾向があります。ただ、インピーダンスがものすごく高いので普通に使っている分にはあまり気にしなくても良いでしょう、というのがその時点での私の結論でした。

◆居酒屋ガレージ日記さんの追加調査
そうこやっているうちに、こういう調査をやることになった居酒屋ガレージ日記さんの記事に追加情報が出て、5月2日の記事ではArduino 放置したポートが及ぼす電源電流変化という記事で、入力ピンの電圧とチップの電源電流波形の関係を示されています。

これが以前から危惧されている、「空きピン処理が不適切な場合に消費電流に影響を与える現象」のようです。これを読むと結構影響がありそうで、あまり気にしなくても良いでしょう、なんてのんきなことを言っていられなくなりました。

ということで心配になってきたので私も測定してみました。

◆電源電流測定用のゲタ
電流波形の測定
CPUの電源電流測定はハイサイドで測定するのが楽なので、昔作ったATmega328の電源電流測定用のゲタを引っ張り出してきて、居酒屋ガレージさんと同じ測定を試みました。

この測定で同じような傾向の結果は得られたのですが、手持ちの測定器の組み合わせでは残念ながら精度の良い測定は出来ませんでした。(ハイサイドのシャント抵抗の電圧波形を見ながら同時に信号ピンの波形を観察するのはひと工夫必要です)

そこで、オシロによる測定は諦め、直流測定でやることにしました。

◆測定方法
測定のためには全ピンを入力に設定する必要があり、そのためのテストプログラムを作りました。と書くと大変そうですが、Arduinoのプログラムに中身が何もない setup と loop を書くだけです。つまり、

  void setup() {
  }
  void loop() {
  }

こんなふうに中に何も書かなければ全ピンが入力にアサインされます。Arduinoでこれ以上簡単なプログラムは無いでしょう。

・測定回路例
入力ピン電圧vs電源電流測定の回路
予備実験の結果から1ピン単位で測定すると誤差が大きくなりそうだったので、この回路図のように、ポートのグループ単位でまとめて測定することにしました。

つまり、パラに接続したグループ単位で電圧を加え、その時の電源電流の測定を行うという方法でやってみました。上の回路図は全部のピンを一つにまとめていますが、これ以外にPB0-4(D8-12), PD2-7(D2-7), PC0-5(A0-5)のグループ単位でも測定を行っています。なお、グループ単位の測定では測定対象以外のピンはオープンにしておきました。

・測定の様子
入力ピンにまとめて電圧印加
ブレッドボードの電源の列を使ってピンを並列に接続しました。

◆測定結果
測定の生データーは下記の通りです。
測定結果
グループでまとめて(ショートさせて)電圧を加えた時の電源電流の値 (mA) です。右端は全ピンに電圧を加えています。
(TX、RXとD13ピンは電圧印加の対象から外しています)

・グラフ
入力電圧vs電源電流特性
横軸が入力電圧で、縦軸が電源電流です。
両端は電流が少なく、中央付近で電流が大きくなる特性になっていました。(普通のCMOSロジックでこういうことをやると、貫通電流で素子を痛めるのでやってはいけません)
D8-12の振れ幅が小さいのはピン数が5ピンと少ないためだと思います(ほかのグループは6ピンです)
全17ピンをまとめた測定では、電圧が中央付近では消費電流が20mAにもなっていて、これはちょっとまずい感じです。一方で、電圧が0Vあるいは5Vなら消費電流は12mAまで減っています。本来はこういう状態で使うべきなんでしょう。

17ピンまとめて駆動した場合の電源電流の差は8mAあるので、平均すると1ピン当たり0.47mA消費電流が無駄に増えることになります。これはもったいないです。

ともかく、このグラフが居酒屋ガレージ日記さんが問題提起されていた現象を判り易く示していると思います。

◆まとめ
これまでも Arduino の CPU のATmega328P の消費電流を測っていますが、その値が数mAくらい違うことがありました。これって、チップの当り外れなのかと思っていたのですが、そうでは無くて空き端子処理の影響もあったのかも知れません。

入力ピンの空き端子処理をしていない場合、その電位は2.5V付近に集まるようになっていますが、こうなると電源に流れる無駄な電流も大きくなってしまうので好ましくありません。

入力ピンの空き端子処理をやらないと消費電流が8mAも増える可能性がある訳で、電池で動かす回路などでは、真面目に空き端子処理をやっておかないといけないです。
関連記事

コメントの投稿

管理者にだけ表示を許可する

DIDR0レジスタ

アナログ入力ポートに対するデジタル入力禁止レジスタDIDR0、Arduinoのソースファイルを探しても操作している箇所が見つかりません。
analogReadの処理でデジタル禁止にし、シュミット入力回路での電流増を避けているのかと思ってたんですが・・・

DIDR0をセットしてから、アナログ入力ポート(PC0~PC5)に対してテストをするとどうなるか、電流増加が無くなるのじゃないかと・・・

re:DIDR0レジスタ

アドバイスありがとうございます。

アナログポートは、DIDR0 = 0b00111111; とやるだけで、1/2Vcc付近で発生していた電源電流の増加は無くなりました。

次の記事で紹介予定ですが、今日はちょっと時間が取れないので明日中にデーターなどを公開できると思います。
カレンダー
06 | 2020/07 | 08
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード