Wie kann diese Power ON/OFF-Schaltung verbessert werden?

Ich arbeite an einem kleinen Gerät in der Größe eines Mobiltelefons und versuche, einen taktilen kurzzeitigen Netzschalter zu implementieren, der von der MCU aus gesteuert werden kann (zum Einschalten drücken, zum Ausschalten erneut drücken). Ich habe Mühe, dafür eine einfache und elegante Schaltung zu finden. Dieser ist fast da, aber er kann nicht verwendet werden, um das Gerät ohne einen zweipoligen Schalter auszuschalten.

Einfaches EIN/AUSPWR_ENABLE ist ein aktiv hohes Signal, das die Stromversorgung der MCU einschaltet.

Wenn die Stromversorgung ausgeschaltet ist, wird PWR_ENABLE durch das Aktivieren von Q20 auf Low gezogen (R32 hält das Gate von Q20 hoch, das Gate von Q19 ist niedrig, weil die MCU nicht mit Strom versorgt wird). Wenn der Knopf SW4 gedrückt wird, wird Q20 deaktiviert, wodurch PWR_ENABLE hochgezogen werden kann. Sobald die MCU hochfährt, setzt sie den POWER_HOLD-Pin auf High, wodurch das Gate von Q20 auf Masse gezogen bleibt. Um die Stromversorgung abzuschalten, setzt die MCU POWER_HOLD auf Low, das Gate von Q20 geht zurück auf High, zieht PWR_ENABLE auf Low, die Stromversorgung wird abgeschaltet.

Das ist alles gut, aber ich möchte, dass der Benutzer das Gerät durch langes Drücken auf SW4 ausschaltet. Das Beste wäre ein Signal von SW4, damit die MCU vor dem Ausschalten den Haushalt führen kann. Das Problem ist, dass das Gate von Q20 bei eingeschaltetem Gerät auf Massepotential liegt, sodass ich nicht einfach ein Signal direkt von SW4 zurückbekommen kann.

Im AUS-Zustand sollte ein Druck PWR_ENABLE hochziehen. Im EIN-Zustand sollte ein Druck PWR_ENABLE NICHT auf Low ziehen, sondern die MCU auslösen, die wiederum PWR_ENABLE auf Low zieht (nach dem Speichern von Einstellungen usw.).

Ich habe mir die folgende Schaltung ausgedacht, aber sie scheint zu kompliziert zu sein. Kennt jemand einen eleganten Weg zur Vereinfachung? Das Ziel besteht darin, ein Signal an die MCU zurückzusenden, dass der Benutzer eine Abschaltung anfordert.

Ein/Aus zu kompliziert

Eine andere Sache ist, dass Sie, wenn die MCU ausgeschaltet ist, immer noch einen Strom durch den 100k-Widerstand und Q10-Q20 haben, das, selbst wenn es klein ist, nicht so elegant ist, finden Sie nicht?
@clabacchio Nun, stimmt :-) Der Stromverlust durch den 100k-Widerstand ist nicht ideal.
Wenn Sie die Ein-/Aus-Taste gedrückt halten, muss sie das Ausschalten erzwingen oder nur ein Signal an die MCU senden, damit sie ihre Tätigkeit beenden und sich selbst ausschalten kann? Wenn nur ein Signal gesendet werden muss, ist keine Hardwareverzögerung erforderlich. Programmieren Sie die MCU einfach so, dass sie x Sekunden wartet und prüft, ob das Signal noch aktiv ist.
" Taste, die von der MCU aus steuerbar ist ". Das ist eine Robotik-Frage, die meiner Meinung nach hier nicht zum Thema gehört.

Antworten (5)

Ich denke, dies kann mit nur ein paar Dioden und einem Widerstand erreicht werden.Geben Sie hier die Bildbeschreibung ein

Durch Drücken der Taste bei ausgeschaltetem Gerät wird PWR_ENABLE aktiviert, um das Mikro (oder die Stromversorgung oder was auch immer) einzuschalten. Das Mikro bestätigt POWER_HOLD, um den Strom eingeschaltet zu halten. Das Mikro überwacht dann PWR_DOWN_REQUEST, um zu sehen, wann der Benutzer die Taste erneut gedrückt hat. Wenn VBATT über dem Pegel liegt, der in einen Eingang des Mikros eingespeist werden kann, kann ein Spannungsteiler hinzugefügt werden.

WOW, das könnte funktionieren!
@morten, wie Olin erwähnte, kann das Entprellen von Schaltern ein Problem sein, daher sollten Sie POWER_HOLD als Ausgang einrichten und ihn so schnell wie möglich nach dem Einschalten des Mikros hochsetzen, vorzugsweise direkt im Reset-Code. Das Schöne an dieser Schaltung ist, dass durch die Verwendung von Dioden anstelle eines ODER-Gatters kein VCC benötigt wird, sodass Sie sogar die PWR_ENABLE-Leitung verwenden können, um den Aktivierungsstift eines Reglers zu steuern und die Systemleistung bis zur Aktivierung abzuschalten.
Ich habe einen Kondensator über dem Pulldown-Widerstand hinzugefügt, der die Entprellung mildert. Passen Sie die Werte nach Bedarf an.

Ich habe das nicht ausprobiert oder simuliert, aber es scheint ungefähr richtig zu sein.
Dies sorgt für kurzes Andrücken und langes Abdrücken.
Ein weiterer Blick, nachdem ich es gepostet hatte, deutet darauf hin, dass möglicherweise ein Widerstand mit sehr hohem Wert (z. B. 1 M - 10 M Bereich) von C1 + bis V + helfen kann, die Anfangsbedingungen festzulegen, aber wahrscheinlich nicht benötigt wird.

Es ist keine Prozessorsteuerung gezeigt, aber diese kann leicht hinzugefügt werden, indem man bei Bedarf an geeigneten Stellen eintippt.

Q1/Q2 und R1/R2 bilden ein klassisches SCR-Latch.
Anfänglich sind Q1 und Q2 ausgeschaltet.
Das Schließen von PB1 schaltet kurzzeitig Q1 über R2 ein, das Q2 über R1 einschaltet, was den Q1/Q2-Latch aktiviert.
Das Freigeben von PB1 lässt Q1/Q2 verriegelt.

C1 beginnt die angenommene Ladung entweder über Q1-be R2 D1 oder über R4, nicht gezeigt wie oben.

Wenn PB1 kurz geschlossen wird, beginnt C1 sich über R3 zu entladen, aber solange die Zeitkonstante R3.C1 lang ist, bleibt PB1 auf Zeit C1 geladen.

Ein langes Drücken von PB1 entlädt C1 über R3 und schaltet Q2 über Shottky D2 aus.
R3 muss viel kleiner sein als R1, damit die Basis von Q2 über D1 ausreichend geerdet ist. Dies ist durchaus machbar, solange die Schaltungsanforderungen bekannt und ausgelegt sind.

Wenn Q2 ausgeschaltet ist, lädt das Loslassen von PB1 C1 wieder auf. Der Wiederaufladestrom muss klein genug sein, um Q1 nicht über R2 erneut auszulösen.

Insgesamt würde es einige Sorgfalt erfordern, das Design so zu gestalten, dass es verschiedene hohe oder niedrige Anforderungen des Laufwerks erfüllt, aber es sollte machbar sein. Das Hinzufügen eines weiteren Transistors im Timing-Pfad würde wahrscheinlich den Designaufwand erleichtern.

Geben Sie hier die Bildbeschreibung ein


Ja ha!! :-)

Habe gerade daran gedacht.
Etwas geheimnisvoll. Diagramm vielleicht später.

Zwei NPN-Bipolare.
Beide haben Kollektorwiderstände gegen V+.
Beide haben Basiswiderstände von ihrer eigenen Basis zum gegenüberliegenden Kollektor.
= klassisches Kreuzkoppelschloss.

Jetzt das Extra - vermutlich vor 50 Jahren erfunden :-).
Nennen Sie einen Transistor Q1. Kondensator C1 -ve Ende an Masse. Widerstand R1 vom Q1-Kollektor zu C1+ PB1 von C1+ zur Q1-Basis.

Betrieb:
Durch kurzes Drücken auf PB1 wird die Verriegelung umgeschaltet.
Der Betrieb kann mit Überlegung zeitlich asymmetrisch gemacht werden. Beachten Sie, dass wie oben beschrieben ein langes Drücken das System in Schwingung versetzen kann. Der Widerstand R1 in Reihe mit PB1 kann wünschenswert sein, um die Entladezeit in Q1_b zu erhöhen.

Wenn Q1 eingeschaltet ist, ist sein Kollektor niedrig, so dass C1 auf niedrig geladen wird.
Die Q1-Basis ist hoch (wie sie eingeschaltet ist).
Durch Drücken von PB1 wird Low mit der Basis von Q1 verbunden, sodass Q1 ausgeschaltet wird.
Verriegelungsschalter.

Wenn Q1 ausgeschaltet ist, ist sein Kollektor hoch.
Q1 Basis ist niedrig.
C1 lädt zum Q1-Kollektor = hoch.
Durch Drücken von PB1 wird High mit der Basis von Q1 verbunden und eingeschaltet.
Verriegelungsschalter

QED

Die Druckzeit von PB1 muss niedriger sein als die Zeitkonstante von R1.C1.
Das nächste Umschalten erfolgt erst, wenn > R1.C1 Zeitkonstante.

Sie befinden sich wahrscheinlich im Bearbeitungsstadium, aber ich glaube, das wurde nicht richtig hochgeladen. Es sagt mir immer, dass mein Zzz-Laufwerk nicht zugänglich ist. An Super User um Hilfe zu bitten!

Sie sagen, Sie möchten eine Taste, die "von der MCU aus steuerbar ist", aber andere Teile Ihrer Frage scheinen nach dem Ein- und Ausschalten über eine momentane Taste zu fragen. Ich nehme an, ersteres ist nur schlechtes Fragenschreiben und noch schlimmeres Korrekturlesen und beantworte letzteres.

Ein Ein-/Ausschalten mit diskreter Elektronik ist möglich, aber ziemlich schwierig. Eines der Probleme ist das Tastenprellen. Da eine Taste bei einem einzigen Tastendruck viele Male ein- und ausgeschaltet wird, kann das Endergebnis unbestimmt sein. Das bedeutet, dass Sie etwas Timing hinzufügen müssen, was es noch komplexer macht.

Heutzutage ist die viel einfachere Antwort, den Mikrocontroller die ganze Zeit eingeschaltet zu lassen, ihn aber selbst auszuschalten. Mikros sind jetzt mit 1 µA und weniger Ruhestrom erhältlich. Das ist für die meisten praktischen Zwecke "aus". Der Vorteil ist, dass sie schnell per Knopfdruck geweckt werden können. Das Mikro kann dann das Entprellen durchführen und sich selbst und andere Schaltkreise nach Bedarf ein- oder ausschalten. Selbst wenn Sie nur einen Ein-/Aus-Taster wünschen, ist ein winziges Mikro der einfachste Weg, dies zuverlässig zu tun.

Das Anschließen des Netzschalters an die MCU wäre eine großartige Lösung. Der Ruhestrom für den Regler (in diesem Fall ein LDO) beträgt jedoch mindestens 120 uA. Auch der Rest der Schaltung verbraucht im Schlafzustand etwas Strom. Vielleicht könnte ich einen separaten kleinen LDO mit niedrigem Ruhestrom nur für die MCU verwenden ...
Es gibt LDOs, die viel weniger Ruhestrom verbrauchen. Beim Ein-/Ausschalten schalten Sie die ganze Zeit nur die CPU ein, dann kann sie den Rest des Zeugs nur dann einschalten, wenn sie eingeschaltet sein soll.

Ich denke, Sie könnten einen bistabilen CMOS-Set-Reset mit aktiven High-Eingängen verwenden (kann die Hälfte eines geeigneten 74HC-Chips sein). Pulldown-Widerstände an beiden Eingängen. Ein Eingang kann durch den Schalter auf Eanble-Power hoch gemacht werden und wird auch in den Mikrocontroller eingegeben. Der andere Eingang kann durch den Mikrocontroller hoch gesetzt werden, um die Stromversorgung zu deaktivieren. Der Bistabile wird direkt von der Batterie gespeist, sein Verbrauch sollte jedoch minimal sein.

Beachten Sie, dass die Eingänge im Ruhezustand niedrig sein müssen, um zu vermeiden, dass der Mikrocontroller über die Eingangsschutzdioden mit Strom versorgt wird.

Meine Empfehlung wäre, die "Power On" -Taste den gleichen Transistor wie der Prozessor hochfahren zu lassen und denselben Prozessor-Pin für die Funktionen "Keep On" und "Button Sense" zu verwenden. Wenn der Prozessor möchte, dass das Gerät eingeschaltet bleibt, sollte er den Pin in 99 % der Fälle hoch treiben; Es kann jedoch gelegentlich vorkommen, dass der Stift ganz kurz schwebt, um zu prüfen, ob die Taste gedrückt wird. Wenn es Ihnen nichts ausmacht, möglicherweise eine kleine Menge Strom über der Schiene in Ihren CPU-Pin einzuspeisen, sollten Sie in der Lage sein, mit vier Widerständen und zwei MOSFETs auszukommen. Wenn Sie die Möglichkeit eines Stroms über der Schiene vermeiden möchten, ist eine Zenerdiode möglicherweise die einfachste Möglichkeit, dies zu tun.

Eine Sache, auf die Sie übrigens achten sollten, ist sicherzustellen, dass ein "Hoch" von der CPU die Schaltung nur einschalten kann, wenn die CPU-Spannung über ihrer minimalen Betriebsspezifikation liegt. Andernfalls ist es möglich, dass die CPU beliebigen Code ausführt, sobald ihre Spannung unter ihre Betriebsspezifikation fällt, und dieser beliebige Code versucht, die Schaltung wieder einzuschalten. Ich hatte dieses Problem in der Vergangenheit, aber es kann vermieden werden, indem sichergestellt wird, dass das Widerstandsverhältnis zwischen dem Pulldown-Widerstand am NFET-Gate und dem vom CPU-Pin kommenden Vorwiderstand so ist, dass das Gate gewinnt. Schalten Sie sich nicht ein, es sei denn, die CPU gibt eine sehr gute "hohe" Spannung aus.