Arduino: Externe Spannung messen

10

Ich habe ein "Problem" beim Versuch, die externe Spannung von einer Knopfzelle zu messen. Ich habe meine Schaltung vereinfacht, aber im Grunde habe ich eine DS1307-Echtzeituhr, die vom Arduino 5V-Ausgang gespeist wird, und eine mit vBat verbundene Knopfzelle, um die Uhr am Leben zu halten, während der Arduino heruntergefahren wird. Meine Idee war es, den Batteriestand mit Arduino zu messen, indem das Plus an einen Analogeingang angeschlossen und der Spannungspegel abgelesen wird. Da die maximale Spannung 3 V beträgt, kann ich 3 V3 als AREF verwenden und die analoge Referenz auf extern einstellen und dann genaue Ergebnisse lesen. Das Ergebnis ist ziemlich cool und die Messwerte von Arduino entsprechen denen der Batteriespannung von meinem Multimeter. Das Problem tritt auf, wenn ich die Stromquelle von Arduino (einer USB-Verbindung) trenne. Zu meiner Überraschung fährt der Arduino nicht herunter (einige LEDs bleiben eingeschaltet),

Warum passiert dies? Wie nimmt der Arduino Strom vom analogen Pin? Ist diese kleine Schaltung eine elektronische Aberration?

Geben Sie hier die Bildbeschreibung ein

Alvarolb
quelle

Antworten:

10

Die meisten, wenn nicht alle Eingangspins von AVR-Controllern sind intern durch Klemmdioden geschützt. Diese Dioden verhindern, dass eine Eingangsspannung höher als die Versorgungsspannung sein kann.

Warum diese internen Dioden da sind:

Es ist wichtig zu erkennen , dass , wenn ein Eingabestift tut Anstieg über die Versorgungsspannung und diese Dioden gab es nicht, könnte der Chip wirken als SCR, Riegel, kurz die Batterie, und der Chip selbst wahrscheinlich durch Überstrom / Überhitzung beschädigt werden würde .

Warum Ihr Arduino mit der Batterie betrieben wird Schauen Sie sich den folgenden Schaltplan an. Wenn Vcc von der normalen Stromquelle getrennt ist, gibt es einen Pfad von der Batterie über D1 zu Vcc. Die Batteriespannung ist gerade hoch genug, damit der Controller arbeiten kann.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

Wie man es löst

Die Lösung ist einfach: Fügen Sie einen hochwertigen Widerstand in Reihe zwischen der Batterie und dem Eingang des Controllers hinzu. Die meisten AVRs haben einen maximal angegebenen Eingangsleckstrom (I IL ) von 1 μA. Sie möchten also sicherstellen, dass der Spannungsabfall mit diesem Strom akzeptabel ist, z. B. 100 kΩ.

Aber Vorsicht!

Sie müssen sich darüber im Klaren sein, dass der Eingang diesen Strom möglicherweise aus Ihrer Knopfzelle zieht und dessen Lebensdauer verkürzt.

Jippie
quelle
Ich würde 10Mohm versuchen und sehen, was der ADC liest und dies als Referenz für einen geladenen Akku verwenden. Dies ist eine schwierige Messung, wenn Sie unerwünschte Entwässerung vermeiden möchten.
Andy aka
Das könnte funktionieren, obwohl es als Eingangsstrom und nicht als Eingangsimpedanz angegeben ist. Die Antwort kann nicht linear sein, ist aber nicht unbedingt nutzlos. Möglicherweise ist eine Kalibrierung erforderlich, und möglicherweise kann die 1V1-Bandlückenreferenz (anstelle der externen 3V3-Referenz) verwendet werden, wenn die gemessene Spannung unter 1,1 V abfällt.
Jippie
Gute Antwort!! Ich dachte, ob ein Widerstandsteiler mit 100 kΩ und 50 kΩ funktionieren würde. In diesem Fall gehe ich von einer maximalen Batteriespannung von 3,2 Volt aus. Dies ergibt eine Abfallspannung von 1,067 V, die mit der internen analogen Referenz von 1 V1 kompatibel sein kann. Das kann funktionieren? oder wird der Akku zu früh entladen?
Alvarolb
2
Ich kenne die Kapazität Ihres Akkus nicht. Es sollte in mAh angegeben werden. Ein grober Hinweis auf seine Lebensdauer wäre . Eine Knopfzelle hält möglicherweise nicht lange, aber Sie sollten das Datenblatt überprüfen, um sicherzugehen. T=mAh3V×1000100kΩ+50kΩ=mAh × (100kΩ+50kΩ)3V×1000
Jippie
1
Diese Dioden sind auf den meisten Mikrocontrollern im Allgemeinen vorhanden - nicht nur auf AVR. Sie sind auch bei anderen IC-Typen nicht ungewöhnlich.
Adam Lawrence