Forum: Analoge Elektronik und Schaltungstechnik Push-button controller


von Torsten S. (biologist)


Angehängte Dateien:

Lesenswert?

Ausgangslage ist folgende:
Ich habe, auf Basis des ESP32, einen mp3-Player, den man über 
RFID-Karten steuern kann. Versorgt wird der ESP32 (und die ganze 
Peripherie) über USB und/oder LiPo bzw. FePo-Akku. D.h. es gibt auch 
einen Laderegler (TP5000), aber das soll hier nicht der Diskussionspunkt 
sein. Wenn ich unterstelle, dass ich die Akkus bis höchstens 3 V 
entladen will und USB 5 V hat, dann liegt meine Eingangsspannung also, 
je nach Betriebsmodus, zwischen 3 und 5 V (Vin). Da der ESP32 3.3 V 
braucht ist angedacht, dass ein Boost/Buck-Converter verwendet wird 
(z.B. TPS6302x von TI). Vielleicht wird's auch nur ein LDO, aber das 
schränkt die Flexibilität etwas ein. Auch ein CH340C ist vorhanden, um 
den ESP32 via USB zu programmieren. Es gibt auch einen Port-Expander, 
der die verschiedenen Buttons ausliest und Interrupts an den ESP32 
wirft. Für alle Fälle gibt es auch einen Reset-Button für den Fall, dass 
der ESP32 nicht mehr reagiert. Ok.

Nun hätte ich gerne einen Push-Button-Controller, so dass man das Ganze 
über einen Button aus- und anschalten kann. Ich weiß, dass es sowas 
beispielsweise mit dem LTC2954 auch in fertig gibt, aber das ist 
vergleichsweise teuer und zudem bei JLCPCB ein Extended Part + nicht 
immer verfügbar. Einen zweiten Mikrocontroller ist mir zu aufwändig, so 
dass ich mir überlegt habe, das diskret aufzubauen. Ein paar Widerstände 
und Mosfets kosten ja quasi nix. Ich habe dann ein bisschen gesucht und 
bin bei einem Video von Eevblog gelandet; es geht genau um diese 
Schaltung hier: https://youtu.be/Foc9R0dC2iI?t=192. Das habe ich mir 
dann "etwas" angepasst.

Das Ganze soll so funktionieren, dass ich mit einem Push-Button (SW1) 
die Stromversorgung aktiviere. Das Ausschalten soll vom ESP32 aus 
getriggert werden.

Folgendes habe ich mir dabei überlegt:
- Q1 bis Q3 sind erstmal gesperrt wenn die Spannungsversorgung 
"startet".
- Durch das Drücken von SW1 wird das Gate von Q1 via R1 auf GND gezogen. 
Q1 steuert durch.
- Da Q1 durchsteuert wird das Gate von Q2 via R4 angesteuert. Q2 steuert 
durch, zieht das Gate von Q1 auf GND und es kommt zu einer Selbsthaltung 
von Q1 und Q2.
- Vout liefert nun dauerhaft Versorgungsspannung für einen 
DC/DC-Converter bzw. einen LDO. Darüber werden ESP32 und die ganze 
Peripherie versorgt.
- Der ESP32 steuert im Normalbetrieb das Gate von Q3 mit HIGH an, so 
dass dieses sperrt. Es ist jedoch eh schon gesperrt, weil der 
Spannungsteiler von R5/R6 dafür sorgt. Hat also keinen Effekt.
- R5/R6 habe ich so dimensioniert, dass es für 3 bis 5 V passen sollte 
und dennoch keine zu hohe Spannung am GPIO des ESP32 ankommt. Vielleicht 
kann man für R5/R6 auch mit größeren Widerständen operieren, weil 
darüber fließt im Akkubetrieb ja dauerhaft Strom (wenn auch nur 28 uA).
- Will ich das Ganze ausschalten, dann drücke ich wieder SW1. Auf die 
Schaltung hat das keine Auswirkung, jedoch registriert der ESP32 über 
den Port-Expander, dass ausgeschaltet werden soll.
- Der GPIO es ESP32 geht auf LOW und zieht damit das Gate von Q3 auf 
etwa 0,1 V. Q3 steuert durch.
- Da Q3 durchsteuert, wird das Gate von Q2 auf GND gezogen, so dass Q2 
sperrt.
- Da Q2 sperrt, wird das Gate von Q1 via R2 auf Vin gezogen. Q1 sperrt, 
die Spannungsversorgung des DC/DC-converters bzw. LDO wird unterbrochen.

Passt das aus eurer Sicht so oder habe ich da was übersehen?

: Bearbeitet durch User
von Michael M. (Firma: Autotronic) (michael_metzer)


Lesenswert?

Torsten S. schrieb:
> Vielleicht kann man für R5/R6 auch mit größeren Widerständen operieren,
> weil darüber fließt im Akkubetrieb ja dauerhaft Strom (wenn auch nur 28
> uA).

R6 kann entfallen und R5 könnte man evtl. sogar im Extremfall auf 1M 
erhöhen.

von Torsten S. (biologist)


Lesenswert?

Michael M. schrieb:
> R6 kann entfallen und R5 könnte man evtl. sogar im Extremfall auf 1M
> erhöhen.

Ich bin mir da immer unsicher, ob das "good practice" ist, 5 V in 
Richtung eines GPIOs zu schicken, der zu einem 3.3 V-uC gehört. 
(Wohlwissend, dass ja ein großer Widerstand (R5+R7) dazwischen ist und 
daher eigentlich nix passieren kann.)

: Bearbeitet durch User
von Torsten S. (biologist)


Angehängte Dateien:

Lesenswert?

Mir ist gerade noch was aufgefallen: Zwischen R1 und den Abzweig zu 
"to_portExpander" muss noch eine Diode, damit das Durchsteuern von Q2 
nicht als "Taste gedrückt" vom Port-Expander interpretiert wird.

Müsste zwar keine Schottky sein, aber die brauche ich woanders in der 
Schaltung eh.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Torsten S. schrieb:
> Nun hätte ich gerne einen Push-Button-Controller
> aber das ist vergleichsweise teuer und nicht immer verfügbar.

Schau dich mal im Online Shop von Pololu um.
https://www.pololu.com/category/121/pololu-power-switches

Bist du sicher, dass Q3 seinen Zweck erfüllt? Das ist ja ein P-kanal 
MOSFET. Wenn du dessen Gate auf Low legst, zieht er die Spannung vom 
Gate des Q2 herunter, aber er zieht auch seinen eigenen Source Anschluss 
herunter. Dann leitet er nicht mehr.

Darüber hinaus gehst du fälschlicherweise davon aus, dass I/O Pins 
inaktiv (hochohmig) sind, solange das IC keine Stromversorgung hat. Das 
ist aber nur in ganz wenigen Ausnahmefällen so.

Deine Schaltung legt an den GPIO Pin des ESP ständig eine Spannung an, 
während der ESP keine Stromversorgung hat. In diesem Zustand sind aber 
nur 0,3V erlaubt. Damit riskierst du Fehlfunktionen im ESP. Weil dabei 
ständig Strom durch die ESD Schutzdioden im ESP fließt, wird es dir den 
Akku tief entladen.

von Torsten S. (biologist)


Angehängte Dateien:

Lesenswert?

> Schau dich mal im Online Shop von Pololu um.
> https://www.pololu.com/category/121/pololu-power-switches
Ja Pololu kenne ich, aber ich wollte halt keine Breadboard-Lösung 
sondern das soll alles auf eine Platine kommen. Hintergrund ist, dass 
das auch andere Leute verwenden werden und da möchte ich nicht jedes Mal 
mit Breadboards hantieren.

> Bist du sicher, dass Q3 seinen Zweck erfüllt? Das ist ja ein P-kanal
> MOSFET. Wenn du dessen Gate auf Low legst, zieht er die Spannung vom
> Gate des Q2 herunter, aber er zieht auch seinen eigenen Source Anschluss
> herunter. Dann leitet er nicht mehr.
Nein, ich bin mir nicht sicher. Aber genau deswegen ist es gut, dass ich 
hier vorher gefragt habe :-D
>
> Darüber hinaus gehst du fälschlicherweise davon aus, dass I/O Pins
> inaktiv (hochohmig) sind, solange das IC keine Stromversorgung hat. Das
> ist aber nur in ganz wenigen Ausnahmefällen so.
Ok stimmt.
>
> Deine Schaltung legt an den GPIO Pin des ESP ständig eine Spannung an,
> während der ESP keine Stromversorgung hat. In diesem Zustand sind aber
> nur 0,3V erlaubt. Damit riskierst du Fehlfunktionen im ESP. Weil dabei
> ständig Strom durch die ESD Schutzdioden im ESP fließt, wird es dir den
> Akku tief entladen.
Vielen vielen Dank für die Hinweise - was gelernt!

Ich habe das Ganze mal auf einen N-Mosfet umgezeichnet und hoffe, dass 
das jetzt besser ist :-)

von Stefan F. (Gast)


Lesenswert?

Jetzt hast du aber noch das gleiche Problem bei deinem Portexpander. 
Solange der keine Stromversorgung hat, darf keine Spannung an seinen 
Pins anliegen. Sonst wird der Akku wird tief entladen, und der 
Portexpander könnte Fehlfunktionen bekommen.

von olaf (Gast)


Lesenswert?

> Passt das aus eurer Sicht so oder habe ich da was übersehen?

Was machst du wenn der Nutzer den Button kuerzer drueckt als dein
Controller braucht um das zu uebernehmen? Da muss noch ein Kondensator 
ran.

Olaf

von Torsten S. (biologist)


Angehängte Dateien:

Lesenswert?

Das stimmt natürlich. Danke!

von Stefan F. (Gast)


Lesenswert?

olaf schrieb:
> Da muss noch ein Kondensator ran.

Die beiden linken Transistoren halten sich gegenseitig von alleine 
eingeschaltet.

von Torsten S. (biologist)


Lesenswert?

Torsten S. schrieb:
> Das stimmt natürlich. Danke!

Hätte vielleicht erwähnen sollen, dass sich das auf

> Jetzt hast du aber noch das gleiche Problem bei deinem Portexpander.

bezog.

von Stefan F. (Gast)


Lesenswert?

Torsten S. schrieb:
> Das stimmt natürlich. Danke!

Jetzt brauchst du am Port-Expander einen Pull-Up Widerstand.

von Torsten S. (biologist)


Lesenswert?

Stefan F. schrieb:
> Jetzt brauchst du am Port-Expander einen Pull-Up Widerstand.

Den ("weak pullup") hat der PCA9555 ohnehin. Also das benutze ich schon 
jetzt ohne externen PullUp und habe da keine Probleme.

von Torsten S. (biologist)


Lesenswert?

Müsste man eine solche Schaltung eigentlich mit ltspice simulieren 
können? Weil ich habe das gestern versucht (Mosfets: AO6407 und 6408) 
und bin auf das Problem gestoßen, dass der Mosfet oben (in meinem Bild 
Q1) durchsteuert, wenn er von Q2 angesteuert wird. Also auch, wenn ich 
den Rest abtrenne (habe einfach die Verbindung entfernt), gab es dieses 
Problem.

Was auch ein Problem war: Den Port-Expander habe ich mit einer zweiten 
Spannungsquelle (3.3 V) über einen Widerstand von 100k simuliert (er 
wird mit 3.3 V versorgt und als "weak internal pullup resistor" habe ich 
einfach mal 100k angenommen). Der hat zwar beim Einschalten keine 
Spannung, aber ich wollte mal sehen, ob mir das beim Ausschalten 
vielleicht irgendwelche Probleme macht (auch wenn ich so weit dann doch 
gar nicht gekommen sind). Aber da scheint Q1 halt schon aufgrund der 
Spannungsdifferenz von 3.3 und 5 V durchzusteuern. Möglich, dass mir das 
in echt dann doch auch Probleme macht.

Muss dazusagen, dass ich ltspice zum ersten Mal benutzt habe. Vielleicht 
habe ich ja auch einen Fehler gemacht.

von Stefan F. (Gast)


Lesenswert?

Torsten S. schrieb:
> Müsste man eine solche Schaltung eigentlich mit ltspice simulieren
> können?

Ich denke schon. Wenn es bei dir nicht geht ist vielleicht noch irgendwo 
der Wurm drin. Mann kann so etwas auch in einem provisorischen Aufbau 
testen, bevor man Platinen herstellen lässt. Ich mache das immer so.

von Michael B. (laberkopp)


Lesenswert?

Torsten S. schrieb:
> habe ich da was übersehen?

Zu aufwändig und es fliesst Strom über R1/R2 und R4/R5 in den 
ausgeschalteten Controller.

Warum versuchst du das Rad neu zu erfinden ?

https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29.1

von Torsten S. (biologist)


Lesenswert?

Stefan F. schrieb:
> Mann kann so etwas auch in einem provisorischen Aufbau
> testen, bevor man Platinen herstellen lässt. Ich mache das immer so.

Ich gebe zu, dass ich das bisher aufgrund von Faulheit nicht getan habe 
:-) Ich habe IRL3103 und NDP6020P auch. Widerstände und Dioden eh, 
PCA9555 als Breadboard auch. Ja ok, ich gehe es mal an.

Logikgatter wären vielleicht auch noch eine Idee, sowas umzusetzen. Da 
habe ich allerdings noch nie mit gearbeitet.

von Stefan F. (Gast)


Lesenswert?

Torsten S. schrieb:
> Logikgatter wären vielleicht auch noch eine Idee, sowas umzusetzen. Da
> habe ich allerdings noch nie mit gearbeitet.

Oder ein ATTtiny25 + NDP6020P. Damit könntest du auch gleich den 
Tiefentladeschutz realisieren.

von Torsten S. (biologist)


Lesenswert?

Michael B. schrieb:
> Warum versuchst du das Rad neu zu erfinden ?
>
> https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29.1

Ja ich dachte mir schon irgendwie, dass ich das tatsächlich tue, aber 
habe halt nach einem Weg gesucht, das irgendwie mit einfachen Mitteln 
abzubilden. Das Nutzen von Logikgattern hatte ich in meinem Post nach 
deinem ja auch noch erwähnt.


Stefan F. schrieb:
> Oder ein ATTtiny25 + NDP6020P. Damit könntest du auch gleich den
> Tiefentladeschutz realisieren.

Wie gesagt: Das werden weitere User nutzen und es ist halt unpraktisch, 
wenn dann jedes Mal der uC programmiert werden muss. Als 
Tiefentladeschutz wollte ich einen SGM809 verwenden (wobei die Akkus 
selbst auch einen Schutz besitzen).

Also Anforderung ist halt, dass der Taster in meiner Schaltung das Ganze 
zwar einschalten, nicht jedoch wieder ausschalten darf (da er im Betrieb 
anderweitig verwendet wird). Ausschalten soll es der uC. Muss ich mal 
drüber nachdenken, wie ich das in Logikgattern hinkriege.

Puh, vielleicht muss ich doch nen fertigen IC nehmen. Das artet ja doch 
mehr in Arbeit aus, als ich dachte.

von Wilhelm M. (wimalopaan)


Angehängte Dateien:

Lesenswert?

Mach es so. Diode D105 kann weg.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Mach es so. Diode D105 kann weg.

Die Schaltung tut nicht einmal Ansatzweise, was der TO braucht.

von Torsten S. (biologist)


Lesenswert?

Torsten S. schrieb:
> Ausschalten soll es der uC. Muss ich mal
> drüber nachdenken, wie ich das in Logikgattern hinkriege.

Ich dachte eben, dass es vielleicht mit einem RS-FF ginge.

FF-S: Taster mit Inverter, damit "Taste gedrückt" eine 1 wird.
FF-R: ESP32, welcher ein HIGH-Signal gibt zum Ausschalten.

Problem, und damit muss ich meine Aussage von eben nochmal ergänzen:
a) Der Taster schaltet ein.
b) Der Taster wird im laufenden Betrieb für andere Sachen verwendet.
c) Drückt man den Taster lange (im Betrieb), dann schaltet der ESP32 ab 
(weil vor dem Shutdown noch ein paar Dinge gemacht werden sollen). D.h. 
der Taster schaltet schon auch ab, aber nur indirekt.

Das würde aber beim Abschalten, da man den Taster dann ja auch drückt, 
zum Schaltzustand 1/1 führen zum Zeitpunkt, wenn der ESP32 abschalten 
möchte. 1/1 ist aber meines Wissens beim RS nicht erlaubt.

Oje, das artet echt aus...

von Wilhelm M. (wimalopaan)


Lesenswert?

Torsten S. schrieb:
> Ich dachte eben, dass es vielleicht mit einem RS-FF ginge.

Warum, wenn Du einen µC hast. Siehe die Schaltung in meinem Beitrag.

von Stefan F. (Gast)


Lesenswert?

Torsten S. schrieb:
> 1/1 ist aber meines Wissens beim RS nicht erlaubt

Normalerweise ist klar spezifiziert, wie das konkrete Flipflop auf diese 
Kombination reagiert.

von Torsten S. (biologist)


Lesenswert?

Ok, also ich glaube dann werde ich mal Datenblätter studieren.
Danke.

von Peter D. (peda)


Lesenswert?

Mit FF aus Logik-ICs hat man wieder das Problem, daß die empfindlich auf 
Störungen und Preller reagieren können. Eh das alles zuverlässig und wie 
gewünscht funktioniert, kann das schnell eine Materialschlacht werden.

Z.B. ein ATtiny13 oder 85 kann bis 5,5V immer an der Batterie hängen und 
umfangreiche Abläufe realisieren, die in HW viele Bauteile bedeuten 
würden. Der Hardwareaufwand bleibt minimal, nur der MC und ein P-FET zum 
Einschalten der Haupt-CPU.

von Torsten S. (biologist)


Lesenswert?

Peter D. schrieb:
> Z.B. ein ATtiny13 oder 85 kann bis 5,5V immer an der Batterie hängen und
> umfangreiche Abläufe realisieren, die in HW viele Bauteile bedeuten
> würden. Der Hardwareaufwand bleibt minimal, nur der MC und ein P-FET zum
> Einschalten der Haupt-CPU.

Ein User der o.g. Projekts hat mich diesbzgl. mal auf eine Idee von dir 
gebracht: Beitrag "Power Switch". Er meinte, dass 
das auch anfänglich gut funktioniert habe, es nach ein paar Monaten aber 
wohl Probleme gab, so dass man das Ganze vom Strom trennen musste. Das 
kann halt bisschen doof sein, weil das Ganze wird in ein Gehäuse 
eingebaut und mit Akkupufferung kommt man da ggf. nur schwer dran.

Also die Lösung ist natürlich maximal flexibel und daher finde ich sie 
irgendwie auch cool. Aber ich muss halt dann immer noch einen uC extra 
flashen (es geht wie gesagt nicht nur um mich sondern eine tiefe 
dreistellige Anzahl von Leuten pro Jahr). Da habe ich so ein bisschen 
Bammel, wenn es da irgendwann Probleme gibt und es stellt sich aus, dass 
das ein Software-Fehler ist. Weil das kann man dann nur mit viel Aufwand 
fixen.


Torsten S. schrieb:
> Müsste man eine solche Schaltung eigentlich mit ltspice simulieren
> können? Weil ich habe das gestern versucht (Mosfets: AO6407 und 6408)
> und bin auf das Problem gestoßen, dass der Mosfet oben (in meinem Bild
> Q1) durchsteuert, wenn er von Q2 angesteuert wird. Also auch, wenn ich
> den Rest abtrenne (habe einfach die Verbindung entfernt), gab es dieses
> Problem.

Das habe ich heute nochmal versucht. Weiß nicht, was da gestern 
schiefgelaufen ist, aber die Schaltung verhält sich jetzt so, wie ich es 
gewünscht hatte. Also ich werde es mal auf dem Steckbrett aufbauen.

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.