Forum: Analoge Elektronik und Schaltungstechnik Mosfet-Selbsthaltung für MP3-Player


von Torsten (Gast)


Angehängte Dateien:

Lesenswert?

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

von Torsten (Gast)


Lesenswert?

Leider ist meine Frage abgeschnitten. Daher nochmal:
Kann das so funktionieren oder habe ich etwas (oder mehrere Dinge) nicht 
beachtet?

Danke im voraus.

von Jobst M. (jobstens-de)


Lesenswert?

Und wie soll man das wieder abschalten?

Gruß
Jobst

von Olaf (Gast)


Angehängte Dateien:

Lesenswert?

Schau mal hier. So mach ich das bei einem raeudigen STM32F030 in meinem
SCA300 Adapter weil dieses olle Teil noch nicht weiss was LowPower ist.

Funktioniert jetzt seit 2Jahren sehr gut.

Olaf

von Torsten (Gast)


Lesenswert?

@Jobst: Wenn ich so drüber nachdenke dann hast du Recht. Irgendwie 
dachte ich, dass das durch Wegnehmen von Power geschieht, aber reicht 
nicht.

@Olaf: Vielen Dank, das sieht gut aus! Das werde ich mal testen.

von Torsten (Gast)


Lesenswert?

Ich habe zu dem Ganzen nochmal zwei Fragen

a) Wie bestimmt man in der OP-Schaltung denn, wie schnell sich der 
Kondensator entlädt? Fließt da wirklich nennenswert Strom in den OP 
rein?

b) Grundsätzlich: Hat es eigentlich Vorteile, sowas mit einem OP statt 
mit einen P-Channel-Mosfet zu machen? Ich sehe einen PullUp mit 1M. Bei 
Mosfets arbeite ich immer mit 100k, habe es mit größeren Werten aber 
noch nie probiert. Wäre das ein Vorteil vom OP ggü. Mosfet, dass man mit 
größeren Pull-Widerständen arbeiten kann und damit weniger Verluste hat?

Danke im voraus.

von Torsten (Gast)


Lesenswert?

Nachtrag zu meiner ersten Frage: Im Datenblatt 
(https://assets.nexperia.com/documents/data-sheet/74AHC_AHCT1G04.pdf) 
habe ich gesehen, dass "Input-Leakage" bei 25 Grad und 5,5 V => 0,1 uA 
sind.
Wenn F = As/V hernehme und nach s umstelle, dann käme ich bei 5 V auf 
235s. Müsste ich da nicht eher sowas wie 82 pF nehmen, damit ich auf 4,1 
s käme?

Oder bin ich komplett auf dem Holzweg? Also wäre euch auf jeden Fall für 
Hilfe dankbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.