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
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.
Wäre es auch eine Option den Reset per Software auszulösen? Das wäre ja recht einfach zu realisieren.
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.
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
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?
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).
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...
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.