Die ESP32 Batteriespannung messen ist in batteriebetriebenen IoT-Projekten mehr als ein „Nice-to-have“: Sie entscheidet über zuverlässige Laufzeitprognosen, saubere Low-Battery-Warnungen und ein stabiles Energiemanagement (z. B. Deep Sleep, Sendeintervalle, Funkleistung). In der Praxis liefern viele Projekte jedoch ungenaue Werte, weil der ADC des ESP32 ohne passende Konfiguration und ohne Kalibrierung stark streuen kann. Ursachen sind unter anderem Bauteiltoleranzen, eine nicht passende ADC-Dämpfung (Attenuation), ein ungünstig dimensionierter Spannungsteiler, Rauschen durch WLAN-Sendepeaks sowie die Tatsache, dass ADC1 und ADC2 sich unterschiedlich verhalten und ADC2 in bestimmten WLAN-Szenarien eingeschränkt ist. Wer präzise Spannungswerte möchte, muss daher systematisch vorgehen: erst die Hardware sauber auslegen (Spannungsteiler, Referenz, Filterung, Messpunkt), dann den ADC korrekt konfigurieren, schließlich kalibrieren und die Messwerte softwareseitig glätten. Dieser Leitfaden zeigt Ihnen, wie Sie die Batteriespannung am ESP32 robust und reproduzierbar messen – inklusive konkreter Kalibrierlogik, typischer Fehlerbilder und Formeln zur korrekten Umrechnung vom ADC-Rohwert zur realen Zellspannung.
Warum ADC-Messungen beim ESP32 oft ungenau sind
Der ADC des ESP32 ist für viele Anwendungen ausreichend, aber ohne Kalibrierung nicht auf Laborpräzision ausgelegt. Häufige Gründe für Abweichungen sind Fertigungsstreuung (Offset und Gain), nichtlineares Verhalten in bestimmten Spannungsbereichen, Rauschen durch die Versorgung und die Funksubsysteme sowie das Zusammenspiel aus ADC-Eingangsimpedanz und Ihrem Spannungsteiler. Dazu kommt: Die nominelle Referenzspannung ist nicht bei jedem Chip identisch. Wer also einfach „analogRead“ nutzt und daraus eine Spannung berechnet, erhält oft Werte, die je nach Board, Temperatur und Funkaktivität deutlich schwanken können.
- Chip-zu-Chip-Streuung: Offset/Gain variieren, daher sind „Standardformeln“ oft daneben.
- Attenuation falsch gewählt: Der Messbereich passt nicht zur Eingangsspannung, Messung clippt oder wird unlinear.
- Spannungsteiler ungeeignet: Zu hoher Widerstand → ADC sieht eine zu hochohmige Quelle, Ergebnis driftet und rauscht.
- WLAN/BLE-Interferenzen: Sendepeaks und digitaler Lärm erhöhen den Messjitter.
- ADC2-Fallen: Auf manchen Konfigurationen kollidiert ADC2 mit WLAN; ADC1 ist meist die sichere Wahl.
Hardware-Basis: Batteriespannung sicher in den ADC-Bereich bringen
Da Li-Ion/LiPo bis 4,2 V erreichen kann und viele ESP32-ADC-Eingänge auf 3,3-V-Domäne ausgelegt sind, wird die Batteriespannung typischerweise über einen Spannungsteiler gemessen. Ziel ist, die maximale Batteriespannung so zu skalieren, dass sie im gewünschten ADC-Messbereich liegt. Zusätzlich sind Filterung und eine definierte Quellenimpedanz wichtig, damit der ADC stabil arbeitet.
Spannungsteiler richtig dimensionieren
Ein Spannungsteiler aus R1 (oben) und R2 (unten) skaliert die Batteriespannung V_bat auf die ADC-Eingangsspannung V_adc:
Für die Rückrechnung gilt entsprechend:
Wählen Sie die Widerstände nicht „so groß wie möglich“, nur um Strom zu sparen. Zu hohe Werte erhöhen die Quellenimpedanz, wodurch der ADC-Eingangskondensator nicht sauber geladen wird und Messfehler entstehen. Gleichzeitig sollen die Werte nicht unnötig klein sein, um den Teilerstrom gering zu halten. Ein praxistauglicher Kompromiss liegt häufig im Bereich von zig bis wenigen hundert Kilohm, abhängig von Board, Layout und Messstrategie.
Teilerstrom und Batterieverbrauch abschätzen
Ein Spannungsteiler zieht permanent Strom, wenn er dauerhaft an der Batterie hängt. Der Teilerstrom I_div ergibt sich aus:
Wenn Ihr Projekt auf lange Laufzeit optimiert ist, sollten Sie den Teiler entweder per MOSFET/Load-Switch nur während der Messung aktivieren oder den Strom so klein halten, dass er gegenüber dem Gesamtbudget vertretbar ist. Ein dauerhaft aktiver Teiler kann sonst den Deep-Sleep-Vorteil stark reduzieren.
Filterung gegen Rauschen: Kondensator am ADC-Pin
Ein kleiner Kondensator (z. B. im nF- bis µF-Bereich, abhängig vom Design) zwischen ADC-Pin und GND kann das Messrauschen deutlich reduzieren, weil er schnelle Störungen glättet. Gleichzeitig bildet er mit der Quellenimpedanz einen Tiefpass, der die Messung stabilisiert. Wichtig ist, die Messzeit so zu planen, dass der Kondensator nach dem Einschalten des Teilers genügend Zeit hat, sich zu laden.
ADC-Grundlagen: ADC1 vs. ADC2 und die Bedeutung von Attenuation
Für Batteriespannungsmessungen empfiehlt sich in vielen WLAN-Projekten ADC1, weil ADC2 in bestimmten Szenarien von WLAN belegt sein kann. Achten Sie außerdem auf die Attenuation (Dämpfung): Sie bestimmt den Spannungsbereich, in dem der ADC sinnvoll misst. Eine zu niedrige Attenuation führt dazu, dass höhere Spannungen am ADC-Eingang saturieren; eine zu hohe Attenuation kann Auflösung und Linearität in niedrigen Bereichen verschlechtern.
- ADC1 bevorzugen: Robustere Nutzung, besonders wenn WLAN aktiv ist.
- Attenuation passend wählen: Den Messbereich so wählen, dass V_adc bei maximaler Batterie nicht am oberen Anschlag liegt.
- Messfenster planen: Möglichst in Phasen messen, in denen Funk inaktiv ist (vor WLAN-Connect oder nach Disconnect).
Die offizielle Referenz zu ADC-Konzepten, Kanälen und Konfigurationen finden Sie in der ESP-IDF-Dokumentation: ESP-IDF: ADC (ESP32).
Kalibrierung verstehen: Was wird eigentlich korrigiert?
ADC-Kalibrierung bedeutet, Rohwerte so zu transformieren, dass sie möglichst gut die reale Eingangsspannung abbilden. Dabei spielen zwei Fehlerklassen eine große Rolle: ein Offsetfehler (Nullpunktverschiebung) und ein Gainfehler (Skalierungsfehler). Hinzu kommt mögliche Nichtlinearität, die sich insbesondere an den Rändern des Messbereichs zeigen kann. Die ESP-IDF bietet Kalibrier-APIs, die je nach Zielchip und Kalibrierdaten unterschiedliche Verfahren nutzen können, um aus ADC-Rohwerten Spannungswerte in Millivolt abzuleiten.
- Offset: ADC liefert bei 0 V nicht „0“, sondern einen verschobenen Wert.
- Gain: ADC skaliert nicht korrekt, z. B. 1,0 V wird als 1,08 V interpretiert.
- Nichtlinearität: Fehler ist nicht überall gleich, sondern variiert über den Bereich.
- Präzisionsziel definieren: Für Batterie-Status reichen oft wenige Prozent; für Kapazitätsmodelle kann mehr Genauigkeit nötig sein.
Für moderne ESP-IDF-Versionen ist die Kalibrierung über die ADC-Kalibrierkomponenten dokumentiert, z. B. hier: ESP-IDF: ADC Calibration.
Praktischer Kalibrier-Workflow: Von Rohwerten zu zuverlässigen Millivolt
Ein bewährter Ansatz besteht aus drei Schritten: (1) Hardware validieren, (2) ADC konfigurieren und Rohwerte stabilisieren, (3) Kalibrierung anwenden und die Rückrechnung über den Spannungsteiler durchführen. Entscheidend ist, dass Sie Ihre Messkette als Ganzes kalibrieren: Selbst wenn der ADC perfekt wäre, führen Widerstandstoleranzen und Leiterbahneffekte zu Abweichungen. Daher sind präzise Widerstände (z. B. 1 % oder besser) und eine Kalibrierung am fertigen Gerät sinnvoll.
Schritt 1: Referenzmessung mit Multimeter anlegen
Für eine robuste Kalibrierung brauchen Sie mindestens einen zuverlässigen Referenzpunkt. Messen Sie die Batteriespannung direkt an den Akku-Klemmen mit einem guten Multimeter und vergleichen Sie diese mit Ihrer ADC-basierten Berechnung. Noch besser sind zwei bis drei Referenzpunkte, z. B. bei ca. 4,1 V (nahe voll), 3,7 V (mittlerer Bereich) und 3,4 V (nahe leer, abhängig von Chemie und Sicherheitsgrenzen). Auf Basis dieser Punkte können Sie systematische Abweichungen erkennen.
Schritt 2: Mehrfachmessung und Glättung
Selbst mit Kalibrierung bleibt der ADC anfällig für Rauschen. Statt einen Einzelwert zu verwenden, sollten Sie mehrere Samples nehmen und aggregieren. In der Praxis bewähren sich Median oder ein getrimmter Mittelwert, weil Ausreißer (z. B. durch Funkstörungen) so weniger Einfluss haben.
- Median von N Samples: Sehr robust gegen Ausreißer.
- Getrimmter Mittelwert: Größter und kleinster Wert werden verworfen, Rest gemittelt.
- Oversampling: Mehr Samples können effektive Auflösung verbessern, kostet aber Zeit/Energie.
Schritt 3: Umrechnung in Batteriespannung mit Teilerfaktor
Wenn die Kalibrier-API Ihnen V_adc in Millivolt liefert, rechnen Sie über den Teilerfaktor auf V_bat zurück. Der Teilerfaktor k lautet:
Dann gilt:
Wenn Sie mit Millivolt arbeiten, bleiben Sie konsequent im Integerbereich, um Rundungsfehler zu reduzieren. Das erhöht Reproduzierbarkeit und vereinfacht die spätere Auswertung.
Teiler-Toleranz und „Systemkalibrierung“: Widerstände sind Teil der Messkette
Selbst bei 1-%-Widerständen kann der Teilerfaktor abweichen. Bei 5-%-Widerständen ist die Messung oft deutlich zu ungenau für seriöse Laufzeitabschätzungen. Wenn Sie präzise Batteriestatuswerte möchten, ist eine Systemkalibrierung empfehlenswert: Sie ermitteln am fertigen Gerät einen Korrekturfaktor, der sowohl ADC-Fehler als auch Teilerabweichung mit abdeckt. Das ist besonders sinnvoll, wenn Sie mehrere Geräte bauen und eine konsistente Anzeige brauchen.
- Präzisere Widerstände: 1 % (oder besser) verbessert die Grundlage.
- Einpunkt-Korrektur: Ein Faktor bei z. B. 3,8 V kann die Praxis stark verbessern.
- Mehrpunkt-Korrektur: Bei Bedarf lineare Regression oder segmentierte Korrektur über 2–3 Punkte.
Timing und Messbedingungen: Wann messen Sie die Batterie am besten?
Die Batteriespannung ist keine konstante Größe. Unter Last fällt sie ab (Innenwiderstand), im Leerlauf erholt sie sich. Wenn Sie im falschen Moment messen – etwa während eines WLAN-Sendepeaks – erhalten Sie „zu niedrige“ Werte, die Ihre Logik in die Irre führen können. Definieren Sie deshalb eine Messstrategie: Entweder messen Sie bewusst im Leerlauf (kurz nach dem Aufwachen, vor WLAN) oder Sie messen unter definierter Last, wenn Sie genau diese Situation bewerten wollen.
- Leerlaufnah messen: Direkt nach Wake-up, bevor Funkmodule aktiviert werden.
- Unter Last messen: Wenn Sie die „Worst-Case“-Versorgung sehen wollen (z. B. Brownout-Risiko).
- Mehrfach messen: Zwei Messungen (vor und nach Funk) geben ein gutes Bild der Spannungslage.
ADC-Kanäle und Pinwahl: Praktische Empfehlungen
Wählen Sie einen ADC1-Kanal, der in Ihrem Boardlayout gut erreichbar ist und nicht durch Bootstrapping-Pins oder spezielle Funktionen ungünstig beeinflusst wird. Bei vielen ESP32-Boards gibt es „bewährte“ ADC-Pins, aber die konkrete Zuordnung hängt vom Modul und vom DevBoard ab. Prüfen Sie außerdem, ob der Pin im Sleep-Zustand keine Leckströme erzeugt und ob Sie den Spannungsteiler ggf. per GPIO schalten können (z. B. High-Side/Low-Side-Switching mit MOSFET).
- ADC1 statt ADC2: Besonders, wenn WLAN aktiv ist.
- Boot-Pins vermeiden: Pins mit Strapping-Funktion können in bestimmten Schaltungen Probleme verursachen.
- Messpfad kurz halten: Kurze Leitungen und saubere Masse reduzieren Störeinflüsse.
Fehlerbilder und Diagnose: Wenn die Batteriespannung „springt“
Unplausible Sprünge sind ein typisches Symptom. Die Ursache liegt fast immer in einer der folgenden Kategorien: (1) Messung in Störmomenten, (2) unpassender Spannungsteiler bzw. zu hohe Impedanz, (3) fehlende Glättung, (4) falsche Attenuation, (5) fehlende oder falsch angewandte Kalibrierung. Eine systematische Diagnose spart hier viel Zeit.
- Werte zu hoch: Teilerfaktor falsch, R1/R2 vertauscht, Kalibrierung überkorrigiert.
- Werte zu niedrig: Messung unter Last, Spannungseinbruch, Teiler zieht Batterie über Schaltpfad herunter.
- Starkes Rauschen: Keine Filterung, zu hochohmiger Teiler, Messung während Funkaktivität.
- Sättigung/Clipping: Attenuation zu niedrig oder V_adc zu hoch.
- Unterschiedliche Werte je Board: Ohne Kalibrierung normal; Systemkalibrierung pro Gerät behebt das.
Batteriestatus interpretieren: Spannung ist keine lineare Kapazitätsanzeige
Viele Projekte setzen Batteriespannung direkt in „Prozent“ um. Das ist nur eingeschränkt sinnvoll, weil die Entladekurve je nach Chemie (Li-Ion, LiFePO4), Temperatur und Last stark nichtlinear ist. Für robuste Systeme ist es oft besser, mit Spannungs-Schwellen zu arbeiten: z. B. „voll“, „ok“, „niedrig“, „kritisch“. Wenn Sie dennoch Prozentwerte wollen, sollten Sie eine Kennlinie nutzen, die zur Batterietype passt, und Messungen vorzugsweise im Leerlauf durchführen.
- Schwellenlogik: Einfach, stabil, gut für Low-Power-Knoten.
- Kennlinien-Ansatz: Genauere Prozentwerte, aber abhängig von Last/Temperatur.
- Trend statt Moment: Ein gleitender Mittelwert über Stunden ist oft aussagekräftiger.
Hintergrundwissen zu Batteriekurven und Einflussfaktoren finden Sie bei Battery University.
ULP und Wake-Up-Strategie: Batteriespannung messen, ohne die CPU zu „verheizen“
In sehr stromsparenden Designs können Sie die Batteriespannung auch so organisieren, dass Messungen nur selten stattfinden oder nur dann, wenn ein Ereignis das rechtfertigt. Typisch ist: Bei jedem Wake-up einmal messen, aber nur bei deutlichem Abfall speichern/senden. Auf manchen ESP32-Varianten lässt sich sogar die ULP-Logik nutzen, um Schwellwerte zu prüfen und die Haupt-CPU nur bei „Low Battery“ zu wecken. Damit sparen Sie Funk und CPU-Aktivzeit, was den Akku zusätzlich schont.
- Messung nicht bei jedem Zyklus: Bei stabiler Spannung reicht ggf. jede N-te Messung.
- Delta-Trigger: Nur reagieren, wenn sich die Spannung um einen definierten Betrag ändert.
- Low-Battery-Alarm: Priorisierte Meldung, bevor das System ausfällt.
Für die ULP-Thematik ist die offizielle Espressif-Dokumentation ein guter Einstieg: ESP-IDF: ULP Coprocessor.
Best Practices: Präzise ADC-Kalibrierung in 10 konkreten Schritten
- ADC1 verwenden, wenn WLAN/BLE im Projekt vorkommt.
- Spannungsteiler so wählen, dass V_adc im sicheren Bereich liegt und die Quelle nicht zu hochohmig ist.
- Teilerstrom bewerten und ggf. den Teiler nur während der Messung einschalten.
- Filterkondensator am ADC-Pin vorsehen, um Rauschen zu reduzieren.
- Attenuation passend konfigurieren und Sättigung vermeiden.
- Mehrfachsamples erfassen und Median/getrimmten Mittelwert nutzen.
- Messzeitpunkt planen: ideal vor WLAN-Connect oder nach Funkaktivität mit ausreichender Beruhigungszeit.
- Kalibrier-API nutzen, um Rohwerte in mV umzuwandeln.
- Systemkalibrierung mit Multimeter-Referenzpunkt(en) durchführen.
- Interpretation sauber halten: Schwellenwerte oder Kennlinie statt naive Prozentrechnung.
Outbound-Links zu relevanten Informationsquellen
- ESP-IDF: ADC (Konfiguration, Kanäle, Attenuation)
- ESP-IDF: ADC Calibration (Kalibrier-APIs und Verfahren)
- ESP-IDF: Sleep Modes (Messstrategie in Wake/Sleep-Zyklen)
- Battery University: Entladekurven, Einfluss von Last und Temperatur
IoT-PCB-Design, Mikrocontroller-Programmierung & Firmware-Entwicklung
PCB Design • Arduino • Embedded Systems • Firmware
Ich biete professionelle Entwicklung von IoT-Hardware, einschließlich PCB-Design, Arduino- und Mikrocontroller-Programmierung sowie Firmware-Entwicklung. Die Lösungen werden zuverlässig, effizient und anwendungsorientiert umgesetzt – von der Konzeptphase bis zum funktionsfähigen Prototyp.
Diese Dienstleistung richtet sich an Unternehmen, Start-ups, Entwickler und Produktteams, die maßgeschneiderte Embedded- und IoT-Lösungen benötigen. Finden Sie mich auf Fiverr.
Leistungsumfang:
-
IoT-PCB-Design & Schaltplanerstellung
-
Leiterplattenlayout (mehrlagig, produktionstauglich)
-
Arduino- & Mikrocontroller-Programmierung (z. B. ESP32, STM32, ATmega)
-
Firmware-Entwicklung für Embedded Systems
-
Sensor- & Aktor-Integration
-
Kommunikation: Wi-Fi, Bluetooth, MQTT, I²C, SPI, UART
-
Optimierung für Leistung, Stabilität & Energieeffizienz
Lieferumfang:
-
Schaltpläne & PCB-Layouts
-
Gerber- & Produktionsdaten
-
Quellcode & Firmware
-
Dokumentation & Support zur Integration
Arbeitsweise:Strukturiert • Zuverlässig • Hardware-nah • Produktorientiert
CTA:
Planen Sie ein IoT- oder Embedded-System-Projekt?
Kontaktieren Sie mich gerne für eine technische Abstimmung oder ein unverbindliches Angebot. Finden Sie mich auf Fiverr.

