Akkuspannungsüberwachung

Bislang schicken wir USB und LiPo durch Festspannungsregler (LDO) und mit LFP-Akkus versorgen wir den ESP32 direkt. Das funktioniert soweit sehr gut, hat jedoch zwei Nachteile:

a) Bei USB und LiPo wird die überschüssige Energie verheizt. Das ist einerseits von der Effizienz nicht optimal, andererseits werden die Bauteile warm.
b) Werden die Akkus zunehmend entladen, dann sinkt die Akkuspannung ab, was bei tiefer Entladung zu „komischem Kram“ seitens des ESP32 führen kann.

Die Antwort darauf: Man verwendet einen Boost-Buck-Converter. Also einen Schaltregler, der z. B. sowohl aus 3 V, als auch aus 5 V, eine Zielspannung von 3,3 V formen kann. Genau das habe ich auch gemacht und dabei TPS63000 verwendet. Das funktioniert auch einwandfrei.

Daraus ergibt sich jedoch ein neues Problem: Man kann einen angeschlossenen Akku tiefentladen. Die Akkupacks von Eremit haben zwar ein BMS integriert, aber ich möchte es gerne nicht so weit kommen lassen, bis dieses abschaltet und früher einschreiten. In einem ersten Ansatz habe ich den SGM809 verwendet. Die Schaltung sieht so aus:

Zur Erklärung:

  • In der Mitte sieht man den Schaltregler
  • Links oben sieht man die Umschaltung zwischen USB (VBUS) und Akku. Das wird auf den Develboards auch so gemacht und ist ein sog. ORing.
  • Links unten sieht man die Akkuspannungsüberwachung, die man auch überbrücken kann per Lötjumper. Dessen Eingang habe ich mit einem RC-Glied (100 Ohm, 2.2 µF) gedämpft. Der Output wirkt auf den Schaltregler und kann diesen aktivieren/deaktivieren über Push/Pull.

Ergebnis:
Die Schaltung funktioniert wie angedacht, jedoch nur so lange, wie ich die Spannungsüberwachung nicht aktiviere. Tue ich das jedoch und habe im laufenden Betrieb USB + Akku angeschlossen, dann führt das Rausziehen des USB-Steckers zu einem kurzzeitigen Spannungseinbruch (sah im Oszi so etwa nach 1 ms aus), der den SGM809 dazu veranlasst, den TPS63000 kurz auszuschalten, ehe er dann wieder neu startet. Ohne Spannungsüberwachung läuft alles wie gewohnt weiter.

Ansätze:

  • Vielleicht könnte man den ORing durch einen Multiplexer ersetzen: https://www.ti.com/product/TPS2116. Ich weiß aber nicht, ob das den Effekt beseitigt.
  • Vielleicht ist der SGM809 auch das falsche Bauteil. Ich brauche eigentlich kein Monitoring im µs-Bereich, mir würde auch sowas wie 1 s reichen. Man kann natürlich das RC-Glied anpassen, aber man kann es auch nicht übertreiben, weil sonst muss man beim Einschalten warten.
  • Vielleicht ein PullUp mit Widerstand + Schottky-Diode zwischen Eingang SGM809 und Akkuspannung

Frage an euch:
Was fällt euch dazu ein? Ideen?
Vielleicht gibt’s ja fertige Bauteile, mit denen man das elegant lösen kann.

Jetzt habe ich mit einer Lösung lange rumgemacht und sie offenbar selbst gefunden, nachdem ich hier alles so schön ausformuliert habe. Und zwar habe ich das RC-Glied zwischen SGM809 und TP63000 gesetzt. In einer ersten Anordnung 10 µF + 10 kOhm, das hat nicht gereicht. Mit 20 µF und 10 kOhm ging es dann.
Also Sinn macht’s vermutlich, mit 100 kOhm zu arbeiten und den Kondensator vielleicht auf 2,2 µF zu setzen.

Muss ich mal noch ein bisschen testen. Aber auf jeden Fall schaltet sich das Ganze jetzt nicht mehr aus im Betrieb mit Überwachung.

Ich werfe mal Coulomb counter in den Raum aka https://www.st.com/en/power-management/stc3100.html#overview

Dann würde man genau wissen was los ist, und könnte im ESP passend reagieren.

So, mal das Oszi sinnvoll eingesetzt. So sieht das am Ausgang des SGM908 mit 10 kOhm und 20 µF jetzt aus.

Am Anfang mit USB + LFP-Akku. Dann USB ausgesteckt, was dazu führt, dass der SGM908 den Ausgang auf LOW schaltet und der Kondenator über den Widerstand entladen wird (ca 270 ms lang). Dadurch sinkt die Spannung ab auf 1 V etwa. SGM908 schaltet dann wieder auf HIGH, was dazu führt, dass der Kondensator über den Widerstand auf Akkuspannung geladen wird.

Funktioniert also grundsätzlich, muss aber noch optimiert werden.