[Tutorial] Batteriespannung überwachen

Halli Hallo,
Aus aktuellem Anlass möchte ich dieses kleine Tutorial darlegen, da ich selber meine ganzen Infos im deutschsprachigen Raum und englischsprachigen Raum einzeln zusammen suchen musste.
Es geht darum, mit einem esp12e die Spannung einer 18650 lipo Batterie auszulesen und per MQTT an den Server zu leiten.

Ausgelesen wird per ADC am Analogpin. Dieser kann nur bis max 1v. Daher ist es wichtig die Spannung zu teilen.

Als erstes das ohmsche Gesetz zur Berechnung der Widerstände für den Spannungsregler:

Vout = (Vin * R2) / (R1 + R2)

Also wir nehmen zwei wiederstände und schließen diese aneinander. Die Enden dieser "Kette" verbinden wir je einmal mit + und einmal mit - der Batterie.
Die zu messende Spannung liegt nun ZWISCHEN diesen beiden Widerständen.

Eine Lipo Batterie hat max 4.2v also nehmen wir 4.2 als Vin:
Als R2 nehmen wir einen 100k Ohm Wiederstand, als R1 einen 320k Ohm Wiederstand. Wie sich nun berechnen lässt, ist Vout = (4.2 * 100k) / (100k + 320k) = 1V.

Da wir nun wissen wollen, welche minimal Spannung wir benötigen setzen wir als Eingangsspannung 3.2v ein (minimale Spannung für LiPos) und erhalten 0,762V

Aus Mangel an passenden Wiederständen habe ich bei mir 220k und 68k genommen und komme auf Vmax 0,992V und Vmin 0,765. Wenn man die Berechnung unten etwas anpasst liefert es gleichwertig genaue Werte.

Jetzt wollen wir natürlich wissen, was uns der serielle Monitor da ausspuckt, da er von 0 bis 1023 angibt.
In meinem Fall 1V/1024 ergibt die voltzahl je einen Schritt des ADC. Somit kann man schonmal errechnen wieviel Volt das sind.
Sagen wir er Zeit 843 an, dann sind das 8430,0009765625 V = ca. 0,823V.
Um das ganze nun anschaulicher darzustellen, lasse ich mir meine Akkukaoazität in Prozent darstellen. Dabei sind 1V = 100% und 0,762V = 0%. Um nun auszurechnen was welchem Wert hat, weiß man bei einer Ausgabe von 1023 im seriellen Monitor, dass dieser Wert 100% Akkuleistung also 4,2 V bedeutet.
Rechnen wir nun 1024
0,762V (also Vmin) ergibt sich daraus ca. 780. Dies ist der minimale Wert den der uC ausgeben darf, für den Akkustand. 1023-780=243. Diese 243 sind nun der Bereich in dem sich unser Akku im ADC bewegen darf. Können wir 243/100=2,43 rechnen und haben pro 2,43 Schritten im ADC ein Prozent unserer Akkuleistung. Wie lassen wir das ausgeben?

Hier erhalten wir die Ausgabe in 1024 Schritten:

float adc = analogRead(analogInPin);

Nun zum Umrechnen:
Maximal kann der ADC 1023 (also 0-1023 =1024) ausgeben also können wir den für uns relevanten Wert errechnen indem wir von der erhaltenen Zahl von adc einfach unser minimum abziehen und erhalten eine Zahl im Bereich von 0 bis 243:

float batt_level=adc-780;

Um nun die Umrechnung in Prozent durchzuführen ist ganz einfacher Dreisatz anzuwenden.

float batt_percent=100/243*batt_level;

Wo und wie man sich nun batt_percent ausgeben lässt, ist jedem selbst überlassen.

Ich hoffe ihr könnt mit diesem kleinem Tutorial etwas anfangen und es hilft vielen rauchenden Köpfen! Ich wäre froh gewesen darüber und mir nicht alles selber zusammen suchen zu müssen.

Liebe Grüße
Adrian

Da gibt es 2 große Probleme:

Ein Spannungsteiler entläd laufend die Batterie das kann bei unglücklichen Umständen zu einer Tiefentladung führen.

Das 2. Problem ist bei Li-Akkus ist die Klemmenspannung nicht proportional zur Ladung. http://gallery3.mikrokopter.de/uploads/Lipo-Entladekurve
Die Restladung wird zB in PC-Akkus durch Überwachung des hinein und herausfließenden Stromes errechnet. Es gibt spezielle ICs für diesen Zweck.
Grüße Uwe

Hallo uwefed,
Vielen Dank für deine Rückmeldung! Problem 1 ist definitiv gegeben, meiner Meinung nach aber für kleinere Anwendungen durchaus zu vernachlässigen.

Problem 2 ist mir bekannt, dass es einen nichtlinearen Spannungsabfall bei LiPos gibt. Allerdings kann man auch das hier vernachlässigen, da ja stets die aktuelle Spannung ausgegeben wird. Und bei einer Spannung von 3.2V sollte man dann doch den Akku nachladen. Das entspricht in meinem Beispiel 0% Akku.

Liebe Grüße

Du mißverstehst Problem 2

Wenn Du die Batteriespannung mißt dann ist fast sofort die Spannung abgefallen und wird lange so zwischen 60-40% bleiben bis kurz vor dem Ende wieder dann abzufallen. Eine richtige Abschätzung der verbleibenden Batterienkapazität ist nicht möglich. ZB könnte 40% der Spannung (zwischen Ladeschlußspannung und Entladeendspannung) nur noch 5% Restkapazität sein.

Grüße Uwe