Gast
#7022612
In einem Arduino-Projekt nutze ich einen ESP32 als "Kernelement" für einen mp3-Player. Der Player wird entweder per USB oder per Akku (LiPo / FePo) betrieben. Es gibt einen Laderegler, der den Akku (sofern notwendig) lädt, wenn eine USB-Versorgung vorhanden ist. Ein/ausgeschaltet wird der ESP32 bisher per Taster. Wobei Ausschalten bisher Deepsleep bedeutete und ich habe dann einen Mosfet benutzt, um die Peripherie (SD, DAC, Amp, Neopixel...) spannungslos zu schalten. Auch wenn der Deepsleep-Verbrauch für einen uC in diesem Setting vergleichsweise hoch war, hat das Ganze, gemessen am geringen Aufwand, sein Ziel erstmal erreicht. Auch wenn es in diesem Projekt nicht auf das letzte uA im ausgeschalteten Zustand ankommt, habe ich mir zum Ziel gesetzt, diesmal etwas weiter "vorne" anzusetzen und über den Enable-Pin des LDOs (ggf. wird's auch ein STBB1-APUR) den ESP32 und die ganze dahinterliegende Peripherie spannungslos zu schalten. Zu dem, wie ich mir das so überlegt habe, habe ich mal ausschnittsweise einen Schaltplan angehängt. Anforderungen: * Wenn der Player nicht gebraucht wird, soll der LDO deaktiviert sein, so dass ESP32 + Peripherie nicht versorgt werden. * Ich möchte den Player über einen kurzen Tasterdruck einschalten können. * Im laufenden Betrieb soll es eine Selbsthaltung geben, die der ESP32 via GPIO steuert. * Über einen Dip-Switch möchte ich den LDO wahlweise auch dauerhaft aktivieren können (Bypass). * Push-Button-ICs sind zuweilen nicht ganz günstig oder aktuell schwer zu kriegen. Ich würde es daher gerne mit recht einfachen Mitteln versuchen, auch wenn das verbrauchstechnisch ggf. etwas nachteilig ist. Auch möchte ich keinen zweiten uC einsetzen. Zur Erklärung: * VIN ist die Spannung, die entweder von USB oder vom Akku kommt. D.h. maximal haben wir hier 5 V, es könnten jedoch auch nur etwa 3 V ankommen. * POWER führt zu einem GPIO des ESP32. Recht früh in der Setup()-Routine wird hier LOW draufgeschaltet (Selbsthaltung). Über einen anderweitigen Tastendruck wird der ESP32 in den Deepsleep überführt - die Selbsthaltung endet damit. * Button_PPlay ist ein Taster, dessen Tasteraktionen von einem Port-Expander registriert werden (nicht im Bild) und entsprechend Aktionen auslöst. Der Taster hängt an GND, d.h. beim Drücken des Tasters kommt in der gezeigten Schaltung GND an. * EN_APUR ist der Enable-Pin des LDOs. Problem: Button_PPlay wird im Normalfall nur kurz gedrückt. Jedenfalls zu kurz, als dass der ESP32 schon in Selbsthaltung gehen könnte. Diese Zeit möchte ich überbrücken (und dachte da an ein RC-Glied). Meine Ideen (siehe Schaltplan): * Drückt man die Button_Pplay, so werden über Q1 die beiden Kondensatoren C11 und C12 schnell aufgeladen. * Lässt man Button_Pplay wieder los, so sperrt Q1 wieder und die beiden Kondensatoren steuern das Gate von Q4 an. Gleichzeitig werden sie über R20 entladen. * Mit insgesamt 14,7 uF zu 100 k habe ich eine Entladedauer von 7,35s berechnet (5 Tau). Q4 hat jedoch eine Vgs von 0,9 V, so dass ich eher mal mit 2 Tau gerechnet habe: 3 V * 0,63 * 0,63 = 1,19 V. Grob müsste das etwa für 3 s Stützzeit reichen. * R20 dient als Pulldown-Widerstand für Q4 und den LDO. Gleichzeitig jedoch auch als Entladewiderstand von C11/C12. * R19 dient zum Begrenzen des Stromes vom GPIO. Nicht zuletzt auch im Hinblick darauf, dass es keinen Kurzschluss geben kann, wenn man ESP32-seitig hier HIGH draufschaltet. * D5 müsste keine Schottky sein. Generell möchte ich mit der Diode (richtig rum gesetzt?) verhindern, dass ein LOW via Q4 oder POWER Rückwirkungen in Richtung Button_PPlay auf den Port-Expander hat, so dass hier falsche Tastenereignisse erkannt werden. Frage: Kann das so funktionieren oder habe

