Arduino:外部電圧を測定


10

コインセルからの外部電圧を測定しようとしているときに「問題」があります。回路を簡略化しましたが、基本的には、Arduino 5v出力から電力供給されるDS1307リアルタイムクロックと、Arduinoがシャットダウンしている間もクロックを維持するためにvBatに接続されたコインセルがあります。私の考えは、Arduinoを使用してバッテリーのレベルを測定し、正極をアナログ入力に接続して電圧レベルを読み取ることでした。したがって、私は、最大電圧が3vなので、3v3をAREFとして使用し、アナログ基準を外部に設定して、正確な結果を読み取ることができると考えました。結果はかなりクールで、Arduinoからの読み取り値は、マルチメーターからのバッテリー電圧の読み取り値と同じです。Arduinoから電源を切断すると問題が発生します(USB接続)。驚いたことに、Arduinoはシャットダウンしません(一部のLEDはオンのままです)。

なんでこんなことが起こっているの?Arduinoはどのようにアナログピンから電流を取得していますか?この小さな回路は電子異常ですか?

ここに画像の説明を入力してください

回答:


10

すべてではありませんが、ほとんどのAVRコントローラーの入力ピンは、クランプダイオードによって内部的に保護されています。これらのダイオードは、入力電圧が電源電圧より高くなることを防ぎます。

これらの内部ダイオードが存在する理由:

入力ピン電源電圧上回り、これらのダイオードが存在しない場合、チップはSCRとして機能し、ラッチし、バッテリーを短絡させ、チップ​​自体が過電流/過熱によって損傷する可能性があることを認識することが重要です。。

Arduinoがバッテリーで動作する理由 下の回路図を見てください。Vccが通常の電源から切り離されている場合、バッテリーからD1を介してVccへのパスがあります。バッテリ電圧は、コントローラが動作するのに十分な高さです。

概略図

この回路のシミュレーションCircuitLabを使用して作成された回路

それを解決する方法

解決策は簡単で、バッテリーとコントローラーの入力の間に直列に大きな値の抵抗を追加します。ほとんどのAVR は1μAの指定された最大入力リーク電流(I IL)を持っているので、電圧降下がその電流、たとえば100kΩで許容範囲内であることを確認する必要があります。

しかし注意してください!

入力がこの電流をボタンセルから引き出し、その寿命を短くする可能性があることを理解する必要があります。


私は10Mohmを試して、ADCが何を読み取っているかを確認し、それを充電済みバッテリーのリファレンスとして使用します。不要な排水を避けたい場合は、注意が必要です。
アンディ、別名

これは機能しますが、入力インピーダンスではなく入力電流として仕様化されています。応答は線形ではないかもしれませんが、必ずしも役に立たないわけではありません。測定された電圧が1.1Vを下回った場合、何らかのキャリブレーションが必要になる可能性があり、(3V3外部リファレンスの代わりに)1V1バンドギャップリファレンスを使用できる可能性があります。
ジッピー2013年

素敵な答え!!100kΩと50kΩの抵抗分割器が機能するかどうか考えていました。この場合、私は3.2ボルトの最大バッテリー電圧を想定しています。これにより、1.067vの降下電圧が得られ、1v1の内部アナログリファレンスと互換性があります。これは機能しますか?または、バッテリーの消耗が早すぎますか?
alvarolb 2013年

2
T=mAhV×1000100kΩ+50kΩ=mAh×(100kΩ+50kΩ)V×1000

1
これらのダイオードは、AVRだけでなく、ほとんどのマイクロコントローラーに一般的に存在します。他のタイプのICでも前例のないものではありません。
Adam Lawrence
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.