Forum: Mikrocontroller und Digitale Elektronik Schaltung für Reset nach langem Tastendruck


von Bastian M. (spatz)


Angehängte Dateien:

Lesenswert?

Moin,

ich habe einen Microcontroller STM32F103RET6, der über eine 
Lithium-Battery und einen DC-DC-Wandler mit Spannung versorgt wird.
Das Gerät soll sich über einen Knopf ein- und ausschalten lassen.
Dazu gibt es einen Taster, der das Gate eines p-Kanal-MOSFETs zwischen 
Batterie und DC-DC-Wandler auf Low zieht. Der Microcontroller erhält 
Spannung, zieht über einen Output das Gate selbst auf Low und wird so 
weiterhin versorgt, auch wenn der Taster nicht mehr gedrückt wird. Wenn 
der Taster erneut gedrückt wird, erkennt der Microcontroller das über 
einen Input, beendet angefangene Aufgaben, setzt dann seinen Output auf 
High und schneidet sich so selbst von der Energieversorgung ab.
Anschließend lässt sich das Gerät über den Taster wieder aktivieren.

Die bisherige Schaltung ist im Anhang.
R1 hängt natürlich nicht an VCC, sondern an Vbat.
Die Dioden sorgen dafür, dass der Microcontroller den Taster auch 
auslesen kann, wenn der Output auf Low geschaltet ist.

Nun möchte ich gerne noch die Möglichkeit einfügen, den Microcontroller 
zu resetten, wenn der Taster über einen längeren Zeitraum (10-15s) 
gedrückt wird. Die Funktion soll also ähnlich sein wie beim 
Power-Schalter eines PCs: Kurzer Druck: An/Aus, Langer Druck: Reset.

Wie erreiche das von mir gewünschte Verhalten mit einfachen Mitteln, 
also THT-Komponenten, und ohne weitere Microcontroller?

Ein Reset wird ausgelöst, wenn die Spannung am Reset-Pin unter 0,8V 
fällt und der Microcontroller hat einen internen Pullup zu 3,3V an 
diesem Pin, der mit 30k (min), 40k (typ) und 50k (max) spezifiziert ist.

Grüße, Bastian

von Alex G. (dragongamer)


Lesenswert?

Der Reset pin hat einen Schmittrigger dran?
Dann würde ich das über einen Kondensator machen der bei Druck des 
Tasters, über einen relativ großen Widerstand (aber kleiner als der 
pullup des reset pins) entladen wird.
Fällt der Kondensator unter die Spannung, sollte der Reset auslösen.

von Oliver R. (Gast)


Lesenswert?

Wäre es auch eine Option den Reset per Software auszulösen? Das wäre ja 
recht einfach zu realisieren.

von Alex G. (dragongamer)


Lesenswert?

Oliver R. schrieb:
> Wäre es auch eine Option den Reset per Software auszulösen? Das wäre ja
> recht einfach zu realisieren.
Sowas baut man grade für den Fall ein, dass der uC nicht mehr 
reagiert...
Wobei es noch die Möglichkeit eines Watchdogs gibt wenn der uC sowas 
hat.

von Bastian M. (spatz)


Lesenswert?

Der Reset-Pin hat einen Schmitt-Trigger.

Hier habe ich mal die Schaltung simuliert, mit 8,2k als 
Entladewiderstand, 470µF als Kondensator und 30k Pullup (worst case):
https://www.falstad.com/circuit/circuitjs.html?cct=$+1+0.1+0.019691167520419408+56+5+43%0AR+192+176+192+128+0+0+40+3.3+0+0+0.5%0Ap+192+240+272+240+1+0%0Ar+192+176+192+240+0+30000%0Ar+192+240+192+304+0+8200%0As+192+368+192+432+0+0+false%0Ag+192+432+192+480+0%0Ag+272+240+272+272+0%0Aw+192+304+192+368+0%0A209+144+240+144+432+0+0.00047+0.7309530348745665+1%0Aw+144+432+192+432+0%0Aw+144+240+192+240+0%0A

Damit komme ich bei komplett entladenem C auf ca. 0,7V, die geforderten 
0,8V sind nach ca. 10 Sekunden erreicht.

In der Simulation erkenne ich aber ein anderes Problem: Beim Öffnen des 
Schalters wird der Kondensator nur sehr langsam geladen, so dass die 2V 
High Pegel erst nach einiger Zeit erreicht werden... kann ich das 
irgendwie umgehen?

Eine Softwarelösung will ich ja gerade vermeiden, der Reset soll auch 
funktionieren, wenn sämtliche Software sich aufgehängt hat...

Edit: Ein Watchdog-Timer wäre natürlich auch eine Option, wobei ich 
einen manuellen Reset bevorzugen würde...

: Bearbeitet durch User
von Alex G. (dragongamer)


Lesenswert?

Bastian M. schrieb:
> In der Simulation erkenne ich aber ein anderes Problem: Beim Öffnen des
> Schalters wird der Kondensator nur sehr langsam geladen, so dass die 2V
> High Pegel erst nach einiger Zeit erreicht werden... kann ich das
> irgendwie umgehen?
Kannst du vieleicht einen Umschalter als Taster verwenden?

von my2ct (Gast)


Lesenswert?

Alex G. schrieb:
> Sowas baut man grade für den Fall ein, dass der uC nicht mehr
> reagiert...

Dafür gibt es Watchdog-Timer

> Wobei es noch die Möglichkeit eines Watchdogs gibt wenn der uC sowas
> hat.

Hat er - laut Datenblatt besitzt der STM32F103RET6 davon sogar zwei 
verschiedene (Kap. 2.3.17 Timers and watchdogs).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bastian M. schrieb:
> Edit: Ein Watchdog-Timer wäre natürlich auch eine Option, wobei ich
> einen manuellen Reset bevorzugen würde...
Warum würdest du den bevorzugen?

my2ct schrieb:
> Alex G. schrieb:
>> Sowas baut man grade für den Fall ein, dass der uC nicht mehr
>> reagiert...
> Dafür gibt es Watchdog-Timer
Man darf den Watchdog aber natürlich nicht im Timerinterrupt 
zurücksetzen...

von georg (Gast)


Lesenswert?

Lothar M. schrieb:
>> einen manuellen Reset bevorzugen würde...
> Warum würdest du den bevorzugen?

Das gibt einem ein ganz anderes Gefühl von Macht über die Maschine.

Georg

von Peter D. (peda)


Lesenswert?

Bastian M. schrieb:
> setzt dann seinen Output auf
> High und schneidet sich so selbst von der Energieversorgung ab.

Dann denk das mal zu Ende. Bricht die VCC ein, geht der Ausgang des MC 
auf 0V und der P-FET schaltet wieder ein.
Solche Schaltungen benötigen daher mindestens 2 Transistoren.

von Bastian M. (spatz)


Lesenswert?

georg schrieb:
> Lothar M. schrieb:
>>> einen manuellen Reset bevorzugen würde...
>> Warum würdest du den bevorzugen?
>
> Das gibt einem ein ganz anderes Gefühl von Macht über die Maschine.
>
> Georg

Ich hätte es nicht schöner ausdrücken können. Eventuell kann es auch 
Sinn ergeben, einen Reset auszulösen, ohne auf den Watchdog warten zu 
müssen.

Peter D. schrieb:
> Bastian M. schrieb:
>> setzt dann seinen Output auf
>> High und schneidet sich so selbst von der Energieversorgung ab.
>
> Dann denk das mal zu Ende. Bricht die VCC ein, geht der Ausgang des MC
> auf 0V und der P-FET schaltet wieder ein.
> Solche Schaltungen benötigen daher mindestens 2 Transistoren.

Das Gate des p-FET häng nicht an VCC, sondern an der Batterie. Das ist 
im Schaltplan falsch gezeichnet, steht aber drunter.

Beitrag #5698223 wurde vom Autor gelöscht.
von Bastian M. (spatz)


Lesenswert?

Ich denke, ich habe eine Lösung gefunden:

https://www.falstad.com/circuit/circuitjs.html?cct=$+1+0.001+1.5642631884188172+50+5+43%0Ar+256+240+256+336+0+8200%0Aw+160+176+160+240+0%0Ar+336+240+336+160+0+30000%0AR+336+160+336+80+0+0+40+3.3+0+0+0.5%0Ap+336+240+432+240+1+0%0As+160+336+256+336+0+0+false%0Ag+160+336+160+368+0%0Ad+160+240+256+240+2+default%0Aw+256+240+288+240+0%0Aw+288+240+336+240+0%0Aw+160+144+160+128+0%0AR+160+128+160+80+0+0+40+3.3+0+0+0.5%0A209+160+240+160+336+0+0.00047000000000000004+3.454137925353802+1%0At+256+160+160+160+0+1+-0.24231403919197003+-0.39645196454577203+100%0AR+256+80+256+48+0+0+40+4.3+0+0+0.5%0A209+256+112+256+160+0+0.00001+1.859841702092928+1%0Aw+256+160+256+240+0%0Ad+256+80+256+112+2+default%0Ao+4+1+0+4098+5+0.1+0+1%0A

Ich habe einen NPN-Transistor eingefügt, der den Kondensator lädt. 
Hierzu fließt der Strom beim Laden des Kondensators über den internen 
Pullup des Microcontrollers in die Basis des Transistors und verstärkt 
so den Ladestrom. Der Transistor wird somit schnell geladen.
Beim Schließen des Schalters wird der Kondensator über eine Diode 
entladen. Diese sorgt dafür, dass der Strom beim Laden durch den 
Transistor fließt.

Bisher funktioniert diese Schaltung nur, wenn der Kondensator geladen 
ist. Das ist jedoch nicht immer sicher gestellt, da bei Druck auf den 
Schalter bei leerem Kondensator die Versorgungsspannung anliegt, aber 
direkt über den Entladewiderstand abfließt. Der Kondensator wird also 
nicht geladen, und die Spannung am Reset-Pin beträgt maximal den 
Low-Wert, nicht den High-Wert. Der Microcontroller würde also nicht 
starten.

Um das zu verhindern gibt es einen zweiten, kleineren Kondensator, der 
direkt am Akku hängt. Dieser sorgt dafür, dass auch bei geschlossenem 
Schalter und ungeladenem Hauptkondensator eine positive Spannung am 
Reset-Pin anliegt.
Die Diode vor dem Kondensator reduziert die Spannung, die in obigem Fall 
ansonsten zu hoch für den Microcontroller wäre. Außerdem ist mit der 
Diode weniger Ringing beim Einschalten der Schaltung, und die Kurve 
fällt flacher ab.

Zur Dimensionierung der Bauteile ist folgendes zu sagen:
- Der Pullup-Widerstand ist in meinem Fall in den Microcontroller 
eingebaut. Wenn dies nicht der Fall gewesen wäre, hätte ich ihn 
vermutlich größer gewählt.
- Der Entladewiderstand sollte so dimensioniert sein, dass die 
Endspannung unter der Trigger-Spannung des Microcontrollers liegt. Es 
gilt:
Vmin = Vdd*(Rent/(Rent+Rpull)).In meinem Fall komme ich bei 30k für den 
Pullup und 8,2k für den Entladewiderstand auf ca. 0,7V, die 
Triggerspannung liegt bei ca. 0,8V.
- Der große Kondensator bestimmt die Dauer bis zum Auslösen des Resets. 
Je größer der Kondensator, desto länger. Theoretisch kann man den 
Kondensator verkleinern, wenn man den Entladewiderstand vergrößert, aber 
das ist in meinem Fall nicht möglich, da ich die Widerstände nicht 
verändern kann
- Der kleinere Kondensator bestimmt die Spannung im Falle eines 
ungeladenen Hauptkondensators. Je größer die Kapazität, desto höher auch 
die Spannung am Reset-Pin. Hierbei gilt es, den Wert zu finden, den der 
Microcontroller noch toleriert, aber der den Reset-Pin lange genug auf 
einer ausreichend hohen Spannung hält.
- Der npn-Transistor und die Dioden sind Standardtypen, es fließen keine 
hohen Ströme oder Spannungen

Grüße,

Bastian

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.