Ununterbrechungsfreie Stromversorgung

Posted on Do 11 Januar 2024 in Computer & Electronics

In meinem Post zum Gaszählersensor hatte ich mit einem Akkulademodul und einer 18650 Zelle eine mini-USV für ein ESP-Modul zusammengeschustert, die dann beim ersten Stromausfall spektakulär versagt hat: der angeschlossene ESP ist offenbar abgeschmiert und musste neu booten. Zwar fuhr er sofort wieder hoch und lief dann brav mit Akkuversorgung, aber das gelbe vom Ei war das nicht. Heute wollen wir mal genauer untersuchen, was da schiefläuft und vielleicht können wir das ja tatsächlich beheben?

Versuchsaufbau

Als erstes reproduzieren wir nochmal den Aufbau und werden dann versuchen, der Schaltung auf den Zahn zu fühlen. Im Wesentlichen sind wir daran interessiert, was passiert, wenn der Strom ausfällt. Zielgröße ist dabei die Versorgungsspannung für das ESP-Modul.

Das Datenblatt sagt, dass der ESP im Bereich von 2.5 V – 3.6 V funktioniert.

Nun kommt der Strom aus dem USB-Port und der liefert 5V. Auf dem NodeMCU Board haben wir dann einen Spannungsregler (AMS1117), der daraus 3.3V macht. Für diesen ist eine Dropout Voltage von 1.1V (max. 1.3V) angegeben und 4.8V als typische Input-Spannung.

Also schnappen wir uns zunächst mal ein Multimeter und schauen, welche Spannungen wir vorfinden. Dabei messen wir die Versorgungsspannung des ESP an den 3.3V bzw. Ground Pins des nodeMCU boards (Pins 10/11). Die eingehende Spannung messen wir direkt am Spannungsregler. Und das machen wir im Netz- und Akkubetrieb:

Betriebsmodus V_in V_ESP
Akku 4.98V 3.32V
Netz 3.96V 3.02V

WTF??? Wie es aussieht liefert das TP5400-Lademodul im Akkubetrieb die korrekte Spannung, aber sobald wir selbiges mit Saft aus dem USB-Netzteil versorgen bekommen wir nur noch knapp 4V??? Das würde bedeuten, dass dieses Technikwunderwerk nicht in der Lage ist, den Akku zu laden und gleichzeitig eine saubere Spannungsversorgung für den Verbraucher zu liefern! Das ist seeehr unschön!

Grundsätzlich funktioniert unser ESP dennoch, denn er bekommt auch im Netzbetrieb ja noch 3V ab und das ist in der Spezifikation. Bleibt die Frage, wie der Übergang von Netzbetrieb zu Akkubetrieb (Stromausfall) bzw. umgekehrt (Strom kommt wieder) aussieht. Das wollen wir mal oszilloskopieren (Ch1: V_in, Ch2: V_ESP). Zunächst mal einfach nur die Spannungen mit USB-Spannungsversorgung: und im Batteriebetrieb

Sofort fällt ins Auge, dass beide Spannungen im Akkubetrieb einen riesigen Haufen Ripple&Noise haben, während sie im Netzbetrieb schön glatt sind. Mit anderen Worten – der Boost-Converter ist scheiße geglättet.

Als nächstes schauen wir uns mal den Übergang von Netzbetrieb zu Akkubetrieb an – also das Stromausfalls-Szenario:

Und wie sieht es aus, wenn der Strom wiederkommt? So:

Das ist vielleicht nicht wirklich hübsch, denn wir kommen schon verdammt nah an die untere Grenze von 2.5V. Allerdings nur sehr kurz und ganz eigentlich sollte der ESP das verkraften, da wir, wenn auch knapp, innerhalb der Spezifikation bleiben.

Was ist dann los?

Also einen Schritt zurücktreten und auf etwas höherem Level forschen. Dazu rufen wir einfach mal den Webserver des ESP auf und schauen, was er zu sagen hat. Wir starten im Netzbetrieb, schalten dann den Strom aus und etwas später wieder an und schließlich wieder aus:

Und so weiter... Ich habe das eine ganze Weile gespielt: an/aus/an/aus/...

Wenn man das geneigte Auge auf die Uptime richtet, stellt man fest, dass diese unerschütterlich steigt, d.h. die Wechsel in der Spannungsversorgung lösen keinen reboot aus. Aber was zum Geier passiert dann?

Und so saß ich betrübt in meinem Labor und verstand die Welt nicht mehr, bis schließlich:

Waaaaas? Ich bin so ein Depp! Natürlich! ESPhome hat einen internen Watchdog, der die Firmware rebootet, wenn für eine gewisse Zeit (15 Minuten) keine Verbindung vom Client (normalerweise Homeassistant) besteht. Das soll dafür sorgen, dass er sich neu startet, wenn da was abgeschmiert ist, oder irgendwie hängt. Bei meinem kleinen Testaufbau ist nie ein Client verbunden, denn den habe ich nicht in HASSIO eingebunden – ich wollte ja nur das Spannungsproblem ergründen. Beim echten Gaszähler ist HASSIO natürlich verbunden. Fällt aber für längere Zeit der Strom aus, fährt irgendwann der Server runter wenn der Akku meiner USV zur Neige geht. Und wenn dann der Strom noch weitere 15 Minuten wegbleibt, dann macht ESPhome einen Reset.

D.h. ich sollte das abschalten. Und das geht im Grunde ganz einfach: Man muss nur die Variable reboot_timeout auf 0 setzen (Siehe Doku):

api:
  reboot_timeout: 0s

Also Firmware neu flashen und abwarten. Und siehe da – das Ding läuft nun auch länger als 15 Minuten, ohne dass ein API-Client verbunden ist:

Fazit

Manchmal bin ich gewaltig auf dem Holzweg. Aber das sind oft die spannendsten Projekte...

Außerdem haben wir gelernt, dass der TP5400 ein Power-Bank Chip ist und eigentlich nicht geeignet, um ein USB-Gerät auch während des Ladens zu versorgen. In unserem Fall sollte es dennoch funktionieren, aber empfehlenswert ist es nicht.