Espuino mit LiFePo4 Akku betreiben

Ich hab das ESP Board quasi ganz normal an USB angeschlossen. Dann jedoch das USB-Kabel unterbrochen und und die 5V von USB an das Lademodul angeschlossen. Schließlich schalten die 5V noch einen Mosfet, der den Akku beim laden komplett trennt.

Hier meine Schaltung.

1 „Gefällt mir“

Danke für die Schaltung. Kannst Du bitte einmal die Funktionsweise / Zusammenspiel der beiden MOSFETs erklären? Wieso sind das zwei?

Die Body-Diode eines Mosfet erlaubt es dem Strom, immer in eine Richtung zu fließen. Da die Batteriespannung unter 3.3V sinken kann und ich kein Risiko eingehen wollte bei sehr niedriger Spannung die Batterie unter Umständen zu schnell zu laden, habe ich quasi in beide Richtungen „abgeriegelt“.

Danach ist mir aufgefallen dass die body diode natürlich auch keine ideale Diode ist und erst bei einem gewissen Spannungsunterschied überhaupt leitet. Ich denke Q2 könnte man ohne Probleme weglassen.

Vielleicht kann ich noch die Wahl der Widerstände erklären:
R7 ist der Basiswiderstand. Ich hatte diesen erst nicht und ein schreckliches Rauschen, da USB 5V selten perfekt sind und Störungen quasi verstärkt wurden.
R1 ist um den mosfet im Akkubetrieb durchzuschalten (auf GND ziehen). Hier musste ich etwas experimentieren. Ein 10k Widerstand hat nicht schnell genug auf GND gezogen, als Folge ist der ESP32 abgestürzt. 470Ω zusammen mit C1 als Puffer sind ein guter Kompromiss. Wenn der Stecker gezogen wird bricht die Spannung nicht ein.

1 „Gefällt mir“

Könnte man diese Lösung auch mit einem LiPo nutzen?

Bin auf der Suche nach einer Lösung, dass ich die USB Buchse fürs Laden und für Datenaustausch nutzen kann und zusätzlich noch einen Ein / Ausschalter dazwischen habe.
Das wär ja eigentlich genau die Lösung oder?

Für LiPo gibt es ja eigentlich gängige Lösungen, am einfachsten ist zum Beispiel ein ESP32 board mit Ladeschaltung. Dafür gibt es ja bereits Platinen von @biologist.

Grundsätzlich funktioniert das aber ähnlich, wobei man bei LiPo grundsätzlich einen LDO braucht weil die Spannung sonst zu hoch ist. LFP geht auch ohne, obwohl ein boost-buck converter dabei eventuell sinnvoll ist.

Ich habe einfach einen Schalter zwischen Akku + und Platine gebaut.

Wenn Schalter an, dann Gerät an und ich kann über USB laden
(nur laden geht nicht, stört aber auch nicht)

Hab einen Lolin D32 Pro - somit Ladeschaltung integriert und das Board von @biologist dazu.
Funkt alles.

Nur will ich eben einen Ein-Aus Schalter dazwischen schalten und im ausgeschaltenen Zustand trotzdem den Akku laden können.
Bzw. hätte gern gewusst ob das überhaupt realisierbar ist und wenn ja wie.
Wenn es nicht realisierbar ist - auch kein Problem.

genau das wollte ich eigentlich umgehen :smiley:

Also USB-Ladeschaltung-Akku sind immer verbunden und der ESP32 soll per Schalter dazugeschaltet werden, so verstehe ich das.

Das geht soweit ich das sehe mit den üblichen Boards nicht.

Du willst den ESP32 über 5V betreiben wenn USB angeschlossen ist; daran führt kein Weg vorbei wenn du den eingebauten UART chip verwenden willst. Jetzt willst du aber den ESP32 trennen aber trotzdem den Akku laden. Das heißt die Ladeschaltung muss extern sein.

Ist der Schalter „an“, willst du meine Schaltung: also USB 5V zum ESP verbinden und mit den 5V den Mosfet zum akku auf VIN schalten steuern. Da VIN glaube ich nicht nach außen gelegt ist benötigst du hier auch noch einen LDO. Ist der Schalter „aus“ trennst du alles.

Ist alles schon recht umständlich und an dem Punkt hast du schon fast dein eigenes Devboard gebaut.

Alternative 1: wenn du ein kaputtes board riskieren möchtest, kannst du die Leiterbahn zum ESP32 (also der eigentliche Chip) 3.3V zerstören und stattdessen deinen Schalter einlöten. Ist elektronisch die einfachste Methode, aber sicher nicht so einfach zu löten.

Alternative 2: Dem ESP32 nicht den Strom kappen, sondern einfach den EN pin mit dem Schalter auf LOW ziehen. Auch simpel aber wenn du den Schalter zum Strom sparen willst bin ich mir nicht sicher wie sich das auswirkt.

1 „Gefällt mir“

ok hört sich also nach einer menge Arbeit an, die es mir eigentlich nicht wert ist :smiley:
Da verzichte ich lieber auf das Laden in ausgeschaltenem Zustand und löte den Schalter einfach zwischen Akku und Board.

Das mit EN Pin dacht ich mir auch schon, aber der schaltet ja soviel ich gelesen habe nicht das Board komplett aus.

Danke für die echt ausführliche Erklärung und Hilfestellung!

Zur Info:
Ich bin gerade dabei, ein Derivat eines D32 pro zu designen. D.h. konkret:

  • Gleiches Pinout wie D32 pro. Die zwei freien Pins verwende ich für etwas Anderes. D.h. es wird dann kompatibel zu ESPuino-miniD32(pro): Lolin D32/D32 pro mit SD_MMC und Port-Expander (SMD) sein. Also zumindest ist das der Plan :rofl:.
  • Gleiche Breite, jedoch etwas länger (da mehr Bauteile und außerdem arbeite ich mit 0805 und nicht 0402). Wenn man sowas von JLC fertigen lässt, dann kann man sicher runter auf 0402 gehen. Aber zum Handlöten ist das zu klein. Und hier alles auf 0603 noch anzuschaffen habe ich keine Lust.
  • TP5000 anstelle TP4054 als Lade-IC. Erstmal ausschließlich für LiFePo4-Nutzung. Geplant ist ein Ladestrom von 1 A.
  • ME6211 als LDO (wie gehabt), jedoch wird nur USB über den LDO laufen. FePo wird ohne LDO laufen. Akku wird aber weiterhin von der ESP32-Versorgung abgekoppelt, wenn USB-Versorgung vorhanden ist.
  • Einen Boost/Buck-Converter wie STBB1-APUR habe ich jetzt erstmal nicht eingeplant, da man den in diesem Formfaktor eh nicht unterbringen kann.
  • CH340 (wie gehabt)
  • USB-C (16 Pin)

Ich will das jetzt einfach mal testen, wie gut das funktioniert, wenn man auf die unregulierte Akkuspannung geht.

2 „Gefällt mir“

Ich hab ja ein ähnliches Setup im Einsatz, allerdings fließt wohl beim AMS1117 ein Strom vom OUT-Ausgang Richtung GND, wenn nur Batterie anliegt. Bei mir benötigt das ca 4mA extra, ohne Verbraucher. Aktuell stelle ich auf einen Buck-Boost von Pololu als Breakout um und komme damit auf einen Standby-Verbrauch von 50 uA.

Das WROVER-E/IE Modul ist ja bis 3V Mindest-Spannung spezifiziert. Beim Einsatz ohne Buck-Boost würde ich noch einen Voltage Protector auf den Reset-Pin empfehlen. Ansonsten kann der ESP mal in einem undefinierten Zustand hängen bleiben. Das habe ich auch schon selbst beobachtet.

Mit dem Board Lolin D32 pro mit SD_MMC, PN5180, max. fünf Buttons und Port-Expander (SMD), einem TP5000 Breakout und dem Pololu S7V8F3 (oder S9V11F3S5C3) benötigt das ganze im ESP-Standby etwa 2 mA.

Mit einem Pololu Mini Pushbutton Power Switch komme ich mit dem S7V8F3 auf 50 uA und mit dem S9V11F3S5C3 auf 80 uA Standby-Strom. Der Switch ist dabei hinter dem Buck-Boost.

Nur mal so zur Info, falls jemand in diese Richtung etwas einsetzen will.

Für ein Buck-Boost-Breakout habe ich mich aufgrund der schlechten Verfügbarkeit und Bauform entsprechender ICs entschieden.

2 „Gefällt mir“

Finde ich super. Eigentlich ist es gar nicht schwer selbst ein Entwicklungsboard für einen WROVER (z.B.) zu entwerfen, das ESP32 Paket hat ja schon das wichtigste dabei.

Fände für den ESPuino ein „generelles“ Entwicklungsboard aber gar nicht so interessant, sondern eher ein minimales Board für „mix and match“, also die Pins sinnvoll rausgeführt, ohne Stromversorgung etc. Dann noch USB/Laderegler als extra Platine (will man ja eigentlich eh im Gehäuse rauslegen wie bei der Kopfhörerplatine, oder?). Dann könnten gewisse Leute sich auch noch Schalter überall reinlöten :smiley:.

Wenn ich irgendwann mal dafür Zeit habe wollte ich mal ne eigene ESPuino Platine nach meinen Vorstellungen entwerfen, mit LiFePo4 und Pins schon passend für ESPuino rausgelegt/auf JST. Meine Idee ist aber dabei den Trend einzelner Sub-Platinen fortzuführen, also zusätzlich USB+Akku weg vom ESP32 und weiterhin Kopfhörerplatine und Audio-Verstärker verwenden.
Damit umginge man zumindest einmal das Problem dass jeder eine andere Platine möchte :smiley:.

Vorteil bei allem ist, dass man auf billigst-Teile wie den AMS1117 und nervige LEDs einfach verzichten kann und damit mehr Kontrolle über den Stromverbrauch hat.

1 „Gefällt mir“

Von oben:

Von unten:

Ist bereits fertig entwickelt und die Bestellung an JLC raus. Die Länge ist 78,2 mm. Bin gespannt, ob das so funktioniert. Jetzt bin ich mal gespannt, ob ich ESP32, TP5000 und USB-C auch gescheit gelötet bekomme :slight_smile:.

Ich muss sagen, dass ich die Sandwich-Geschichte auch gerne mag. Da ist man mit der Positionierung für die Kopfhörerplatine auch flexibler. Und wer sie nicht braucht, der lässt das Ganze halt weg.

Ich habe in den letzten Wochen auch ein bisschen Zeit in eine Complete investiert und habe dabei das Thema mit dem Deepsleep-Verbrauch nochmal aufgegriffen. Meine Idee war, über den EN-Pin des LDO (bzw. Buck/Boost) die gesamte Peripherie (inkl. ESP32) auszuschalten.

Ziele:
a) Über einen Schalter kann man den LDO die ganze Zeit aktivieren.
b) Im Normalbetrieb macht der ESP32 die Selbsthaltung und hält sich gewissermaßen selbst wach (über PE_POWER).
b) Über einen Button kann man den LDO „antasten“. Da diese Zeit jedoch nicht reicht, dass der ESP32 in Selbsthaltung gehen kann, habe ich ein RC-Glied eingeführt, welches diese Zeit überbrückt.

Ob das Ganze so funktioniert weiß ich aber noch nicht. Bislang habe ich das nicht getestet.

1 „Gefällt mir“

Ich finde das gut, man könnte dann ja z.B. den ESPuino so konfigurieren dass er nach ein paar Stunden schlafen komplett den Strom abstellt. Oder wer immer per RFID aufwecken können will lässt PE_Power auch im Deepsleep aktiviert - nur so in der Theorie sehr flexibel.

Man müsste natürlich nochmal aufgreifen ob das dann der „Ersatz“ für die Stromabschaltung des Verstärkers etc. ist oder ob man das in Software getrennt handhabt - ich hatte ja um knacken zu verhindern mal den Strom erst spät angeschaltet, womit @compactflash dann Probleme mit einer ähnlichen Lösung hatte.

Krasse Sache! So ein spezielles Entwicklungsboard wäre schon was Cooles. Wenn es fertig gelötet zu kaufen ist, nehme ich, auf jeden fall 1-2 stk.(meistens sieht man nur wroom und/oder vorhandene hardware ist mies angebunden)- an einer Complete besteht aber auch noch interesse! - Boards, die aussehen als währen sie von einem designer-team einer professionellen firma erstellt wurden - viel zu schade um sie irgendwo ein zu bauen wo man sie nicht mehr sieht.

kann man den laderegler als sub-platine machen, so wie @SZenglein schon schrieb, wegen dem verlegen/umlegen der usb-buchse.
Und auch damit man verschiedene akkus nutzen kann - wollen ja nicht alle auf lifepo4 akkus fahren.
z.Z. nutze ich 3 verschiedene stromversorgungen.

  • Stationär (Netzbetrieb)
  • NiMh (standart in der toniebox - für den umbau der toniebox, dann kann man den akku weiterverwenden [könnte man evtl. auch die rfid-reader-antenne der box nutzen - dann könnte man die metallplatte, die die tonies hält, drin lassen - bei beiden unterstützen readern stört diese so sehr, das keine rfid-chips mehr funzen.] https://guide-images.cdn.ifixit.com/igi/tUJUOnuTFoGCuY1u.huge )
  • LiPo (z.b.:18650er sind häufig in verwendung) [wemos d1 mini battery shield + battery protection board + lipo 1200mAh hier im einsatz]
1 „Gefällt mir“

Sodele, heute kamen die PCBs für das geplante FePo-Board. Aufgelötet habe ich es noch nicht, aber immerhin mal einen ESP32-WROVER + USB-C-Buchse draufgelegt :slight_smile:.

Hier mal ein Größenvergleich zwischen Lolin D32pro und meiner FePo-Variante:

Aktuell fehlt mir noch ein Tantal-Kondensator für den TP5000.

4 „Gefällt mir“

Es hat mir doch keine Ruhe gelassen und daher habe ich die Schaltung vorhin aufgelötet. Den Tantal-Kondensator habe ich temporär durch einen „normalen“ Keramik-Kondensator ersetzt. Gelötet habe ich das Ganze auf einer Hot Plate, da ich wegen dem TP5000 Bedenken hatte, das mit Heißluft hinzukriegen. Da ich keinen Stencil benutzt habe, musste ich mit Flussmittel an verschiedenen Stellen (USB-C-Buchse, TP5000 (vor allem), UMH3N, ME6211 und ESP32) nachlöten, um etwaige Brücken zu entfernen. ESP32 und USB-C-Buchse ging einfacher, als ich dachte. Aber TP5000 sieht man ohne Mikroskop halt leider nicht so wirklich gut. UMH3N ist auch ein echt kleines Scheisserchen, bei dem Pin 1 schlecht markiert ist.

TP5000 funktioniert (hatte ich auf 1 A Ladestrom eingestellt; im Test hat er mit 0,83 A geladen), der ESP32 lässt sich flashen und er startet auch. Anfänglich bin ich nach dem Start in eine Dauer-Bootloop gelaufen. Lösung: Ich hatte damals blöderweise gleich drei WROVER mit nur 4 MB Flash bestellt und wollte halt mit 16 MB-Layout flashen. Also sah soweit erstmal gut aus…

An einer Stelle habe ich allerdings einen schönen Bock geschossen: Statt einen fertigen ESP32-WROVER-Footprint für KiCad zu benutzen, habe ich ihn selbst gezeichnet. Und wenn ich schon dabei war, dann wollte ich auch ein eigenes ESP32-Symbol anlegen. Und beim zweiten Schritt ist mir der Bock passiert mit der Nummerierung:
1: GND
2: 3.3V
3: EN
4: VP
6: VN
7: IO34

Was habe ich also verbockt? Tja, ich habe die 5 vergessen und habe damit für alle nachfolgenden Pins auf der linken Seite des ESP32 einen Folgefehler (Pin-Offset von 1).

Hier mal ein Bild aus dem Datasheet des ESP32-WROVER-E:

Demnach sind also VN, 34, 35, 32, 33, 25, 26, 27, 14, 12, GND und 13 mit einem Offset von einem Pin falsch. Gut, muss ich die Platine neu routen, blöd gelaufen.

Eine Sache ist mir jedoch unklar: Wenn ich das Ganze im Netzbetrieb laufen habe, dann kommen hinten 3,3 V raus - fein. Schließe ich dazu noch einen Akku an, dann wird dieser geladen - auch fein. Versorge ich jedoch nur mittels Akku (V=3,35 V), dann liegt die Spannung nur noch bei 2,85 V. Da wollte ich mal in die Runde fragen, ob wer ne Idee hat, warum das so ist.

Hier ist der Schaltplan: D32_FePo.pdf (173,4 KB). Da sieht man auch schön, dass Pin 5 im Symbol des ESP32 fehlt :woman_shrugging:.

Nochmal zur Zielsetzung: Ich habe den Akku extra nicht durch den LDO laufen lassen, damit die Spannung nicht reduziert wird. D3 habe ich zur Sicherheit reingemacht, falls irgendwie Strom durch ME6211 bei Akkubetrieb in die falsche Richtung fließen sollte.

Hinweis:
Mit ME6211_OUT hatte ich einen Denkfehler. Das ist natürlich das Gleiche wie die normalen 3.3 V und hätte ich mir sparen können.

Also vielleicht hat ja jmd. ne Idee, warum im Akkubetrieb am ESP32 nur 2,85 V ankommen, während die Akkuspannung tatsächlich 3,35 V ist. Wohlgemerkt: Da habe ich nur das Board gemessen und das Ganze nicht in ein ESPuino-Carrier-Board eingesteckt.

Hier nochmal zur Vollständigkeit die empfohlene Schaltung für den TP5000 bei FePo-Betrieb. Ich habe lediglich den Widerstand von 0,067 auf 0,1 Ohm vergrößert, damit der Ladestrom auf 1 A begrenzt wird. Und die Stndby-LED habe ich nicht angeschlossen. Die 51k für den Widerstand bei RTRICK müssten so etwa 20% Itrick bewirken. Den Rest habe ich (hoffentlich; bitte gerne mal nachschauen) fehlerfrei übernommen.

Hier noch das Datasheet für den TP5000:
TP5000_auto_translated_.pdf (471,6 KB)

Ich denke ich habe den Fehler selbst gefunden. Die fehlenden 0,5 V fallen auf der Bulk-Diode des Mosfets Q2 ab. Der Grund dafür ist, dass der P-Channel-Mosfet nicht durchgesteuert ist im reinen Akkubetrieb. Das ist deswegen der Fall, weil die Spannung (2,8 V) in falscher Richtung durch den ME6211 wandert (bei VOUT rein und bei VIN raus) und dann entsprechend am Gate von Q2 anliegt. Da das ein P-Mosfet ist, sperrt dieser.

Für den Fall, dass Strom in die falsche Richtung fließt, hatte ich eigentlich mit D3 vorgesorgt. Ich habe D3 nur, wir mir jetzt klar wird, falsch positioniert. Eingebaut werden muss dieses Bauteil zwischen VIN und dem Abzweig zu Q2. Also halt einfach weiter zum ME6211 schieben. Dann müsste es klappen.

Jut, also zweite Revision machen :slight_smile:.