Hallo,
ich betreibe einen Mikrocontroller (ATMega8L) an einer Li-Ionen
Batterie. Die Schaltung soll mit einem Tastendruck gestartet werden. Der
µC soll bei unterschreiten einer bestimmten Batteriespannung die
Stromversorgung der gesamten Schaltung abschalten. Hierzu verwende ich
einen 3,3V-Linearregler mit Shutdown-Eingang (konkret ZLDO 330). Der µC
muss auch über die 3,3V versorgt werden, da er mit Peripherie hinter
dem Spannungsregler verbunden ist.
In den Foren habe ich hierzu bisher nichts brauchbares gefunden.
Den wesentlichen Teil der Schaltung habe ich angehängt (schematisch,
Blockkondensatoren, etc. sind zur besseren Übersicht nicht dargestellt).
Die Idee ist, dass der Shutdown-Eingang (SC) über den Taster nach GND
gezogen und dadurch die Spannungsversorgung hochgefahren wird. Der µC
schaltet dann PC0 als Ausgang mit log. 0, so dass SC auch nach loslassen
des Tasters auf 0 bleibt, bis entweder über INT0 eine weitere Betätigung
des Tasters erkannt wird, oder aber der µC aus einem anderen Grund
abschaltet (z.B. schwache Batterie, Messung hier nicht dargestellt). PC0
wird dann als Eingang geschaltet, woraufhin SC high Level kriegt und der
Regler abschaltet.
Allein mit dem µC klappt das auch zuverlässig. Wenn ich jedoch eine
etwas größere Last (ca. 100mA) in den 3,3V Zweig einhänge, kommt es
während des Abschaltens offensichtlich zu einer Rückkopplung von PC0 auf
SC, die den Spannungsregler auf knapp unter 1V einschwingen lässt.
Eine saubere Lösung wäre, den Taster und PC0 über jeweils einen Eingang
eines RS-FlipFlops an SC anzuschließen, allerdings möchte ich mit
möglichst wenigen/kleinen Bauteilen auskommen. (Alternativ könnte man
natürlich einen zweiten, 6-8 pinnigen µC nehmen, der die Funktion des
FlipFlops nachbildet ;-)
Hat jemand eine einfachere Lösung?
Reine Neugier: Wie erkennt PD2 überhaupt, daß der Taster geschlossen
ist? Wenn PD0 auf Masse liegt, "riecht" PD2 je nach Batteriespannung
noch ungefähr 2,5V, reicht das für eine zuverlässige Detektion des
Pegels?
Wie stabil ist Deine Batteriespannung unter Last?
EDIT: Ich sehe gerade im Datenblatt: 0,6*VCC für High, das reicht.
Andere Frage: wozu dient PD2 überhaupt?
Ich würde das mit dem Ausschalten so ansetzen: parallel zum Taster einen
NPN-Transistor, diesen (über Basisvorwiderstand) mit dem uC ansteuern,
R4 & R5 weglassen, R3 zwischen Vin und SC, SC an Taster und Kollektor
des Transistors
Vor den Basisvorwiderstand des Transistors natürlich noch nen Pulldown.
Wegen der Spannungerkennung musst du dir noch Gedanken über die
(stabile) Referenzspannungserzeugung machen - denn du brauchst ja einen
Vergleichswert.
Was hälst Du davon an SC einfach einen Kondensator zu hängen, so 10 bis
100nF und am Ausgang vom µC PC0 nach einen Widerstand von 1k? Dann
dürfte es doch nicht mehr schwingen.
Danke für's Feedback!
@MarioT:
ja, hab gestern auch schon ein bisschen mit 'nem Konsensator an SC
rumgespielt, leider ohne Erfolg. Werde das aber nochmal probieren. Evtl.
habe ich aber dann das Problem, dass es nicht schwingt, aber durch die
Verzögerung evtl. langsam genau an diesen Zusatnd annähert, wo der µC SC
soweit runterzieht, dass der Regler nicht entgültig abschaltet.
@Micha:
PD2(INT0) detektiert den Zustand des Tasters (Taster geschlossen -> R5
an GND, sonst über Spannungsteiler R3, R4 nahe Vcc), damit darüber auch
Ausschalten am µC getriggert werden kann (der Controller muss erst noch
Daten auf einer SD Karte sichern, bevor er abschaltet). Dies
funktioniert auch einwandfrei.
In einer früheren Version habe ich es mit einem Transistor probiert, ich
fürchte aber, dass ich da dieselben Probleme habe, da der Pegel an PC0
während des Abschaltens nicht definiert ist. Kannst Du das evtl. mal
aufmalen?
Als Referenzspannung genügt die interne 2,56V Ref. (ggf. in Software
kalibriert), der µC schaltet bei unterschreiten von 3,2V ab. Alternativ
kann auch der LBF (Low Battery Flag) Ausgang des Reglers genutzt werden,
allerdings schaltet man dann schon früher ab.allo,
Via Taster abschalten ist auf diese Weise aber nicht möglich. Dazu würde
ich obigen Vorschlag mit den beiden Schließern umsetzen. Getestet ist
das Ganze jedoch nicht, daher gebe ich keine Garantie auf Funktion.
arne schrieb:> Hat jemand eine einfachere Lösung?
Wenn die exakten 3.3V nicht vom (unbekannten) Rest der Schaltung
benötigt werden:
Keinen Spannungsregler verwenden, µC direkt an den 4.2 … 3.0 V des Akkus
betreiben, Sleep-Mode einsetzen, Taster an Interrupt-Pin zum Aufwecken.
Schalte an die Basis des Transistors die Taste, in Reihe mit 10k, nach
Vin. Nimm als Pulldown für die Basis einen 22k-Widerstand. Schließe
einen ADC-Pin an die Basis des Transistors über einen
4k7-Serienwiderstand an.
1. Drücke die Taste, der Spannungsregler startet. Aktiviere zur
Selbsthaltung den internen Pullup im ADC-Pin.
2. Drücke die Taste, der ADC kann den sich ändernden Spannungspegel
abfragen.
3. Schalte den ADC-Pin auf Ausgang-Low, das schaltet den Spannungsregler
ab.
Hinter dem µC sitzt noch eine SD Karte, die nur bis 3,6V spezifiziert
ist, daher der 3,3V Regler. Ich habe Bedenken, den Controller direkt
aus der Batterie (max. 4.2V) zu speisen, während die Karte und der Rest
der Schaltung die 3,3V aus dem Regler bekommt. Aber vielleicht gibt's
auch dafür eine Lösung, das wäre zumindest für die schaltbare
Spannungsversorgung, Sleep/Wake-up am einfachsten.
Ich werde nochmal die Transistorvariante probieren.
@Travel Rec.: ADC statt INT ist auch gut. Ist das eine erprobte Lösung?
Potenziell sehe ich auch hier die Gefahr, dass der Pegel an ADC während
des Abschaltens undefiniert ist und so den Transistor evtl. wieder
öffnet.
arne schrieb:> Allein mit dem µC klappt das auch zuverlässig. Wenn ich jedoch eine> etwas größere Last (ca. 100mA) in den 3,3V Zweig einhänge, kommt es> während des Abschaltens offensichtlich zu einer Rückkopplung von PC0 auf> SC, die den Spannungsregler auf knapp unter 1V einschwingen lässt.
Falsch vermutet.
Nur mit MC bricht die Spannung nicht weit genug ein und der
Spannungsregler schaltet noch nicht wieder ein.
Der MC kriegt seine VCC quasi über den 47k.
Mit Last wird die VCC soweit runtergezogen, daß am Pin des MC low
anliegt und der Regler schaltet wieder ein.
Jeder IO-Pin kann nicht über VCC+0.3V liegen!
Deshalb ist der Transistor notwendig.
Bei High schaltet er ein und wenn die VCC sinkt, kriegt er kein high
mehr und sperrt.
Peter
arne schrieb:> ADC statt INT ist auch gut. Ist das eine erprobte Lösung?> Potenziell sehe ich auch hier die Gefahr, dass der Pegel an ADC während> des Abschaltens undefiniert ist und so den Transistor evtl. wieder> öffnet.
Ja, die Lösung ist erprobt, allerdings mit einem Regler, der einen
High-aktiven Enable-Pin hat, also ohne Transistor auskommt.
Beim Abschalten gehst Du so vor, daß Du mit dem ADC zuerst den Pegel
detektierst. Wird die Taste als wieder losgelassen erkannt, setzt Du den
Portpin auf Ausgang Low und schickst dann unmittelbar darauf den
Controller in den Tiefschlaf. Dann schaltet der Regler sicher ab und den
Controller stört das Wegfallen der Spannung auch nicht. Beim
selbsttätigen Abschalten auf eine Bedingung hin sparst Du Dir die
Tastenabfrage.
Danke für den Tipp! Klappt jetzt wunderbar.
Schaltung sieht jetzt wie folgt aus, Reststrom im Standby liegt
tatsächlich unter 10µA.
Beim nächsten mal also einen Regler mit inversem Shutdown Pegel kaufen -
wieder was gelernt :-)
da ist eine böse falle eingebaut.
über R2 und R4 und die internen schutzdioden kann dir dein atmel beim
tastendruck schon parasitär versorgt werden.
dank des hohen vorwiderstandes der spannungsversorgung und dem sprung
bei einsetzendem linearregler kann dir dein atmel hängen bleiben.
ich hatte das bei genau so einem anwendungsfall mit einem ldo mit
softstart.
spendier in serie zu R2 noch eine diode und du bist das problem los.
Ok, berechtigter Einwand. Bin mir nur grad nicht sicher, ob ich mit dem
ADC über die Diode die Tasterstellung noch sicher detektieren kann.
Würde man das Problem nicht auch mit dem Brown-Out Reset in den Griff
bekommen?
Mach dir nicht soviel Arbeit.
+ Nimm die Schaltung aus dem ersten Post.
+ Ersetze R4 durch eine Diode.
+ an Pin 23 des µC ebenfalls eine Diode
+ an Pin 2 des ZLD einen Pullup Widerstand
Den Pullup so dimensionieren das mit geschaltenem PC0 der Pegel an SC
weit genug absinkt. Beachte max Strom an PC0.
Das nennt sich dann Wired OR.
Ergebnis ist das der Taster und der µC den SC pin nach GND ziehen
können.
Nach Datenblatt muss SC nur < 1,5 Volt sein.
Mit den Dioden kommst du auf ~0,6 Volt. sollte locker reichen.
Am Int0 kannst du damit auch sauber den Tasterzustand ablesen.
Ralph schrieb:> Mach dir nicht soviel Arbeit.>> + Nimm die Schaltung aus dem ersten Post.> + Ersetze R4 durch eine Diode.> + an Pin 23 des µC ebenfalls eine Diode> + an Pin 2 des ZLD einen Pullup Widerstand> Den Pullup so dimensionieren das mit geschaltenem PC0 der Pegel an SC> weit genug absinkt. Beachte max Strom an PC0.
Kannst du das mal zeichnen?
Michael M. schrieb:> über R2 und R4 und die internen schutzdioden kann dir dein atmel beim> tastendruck schon parasitär versorgt werden.
Sind etwa 1,5V, die da übrig bleiben...
arne schrieb:> Würde man das Problem nicht auch mit dem Brown-Out Reset in den Griff> bekommen?
Sicher.
Ja, sollte. Braucht aber 2 Pinne. Und es versorgt den ATMEL ständig
parasitär. Die Widerstände am Schalter müssen also sehr hochohmig sein.
Den oberen Widerstand am Schalter kann man sparen und stattdessen den
internen Pullup des Controllers nutzen.
Ralph schrieb:> Sollte so funktionieren.
Nein, zumindest nicht zuverlässig.
Die Shutdownspannung muß <0,4V sein für ein und >1,5V für aus.
Ist der MC aus, hast Du die interne Schutzdiode in Reihe, also <=1,4V,
d.h. die >1,5V werden nicht eingehalten.
Soll der MC an sein, hast Du die Diodenspannung + die interne
Lowspannung, d.h. ~1V, die <0,4V werden also auch nicht eingehalten.
Das ist also totaler Murx.
Wie schon gesagt wurde, ist im MC eine Diode gegen VCC.
D.h. bei VCC = 0V zieht der MC auf Low (~0,7V).
Die Schaltung kann also nur funktionieren, wenn der Regler mit High
einschaltet.
Peter
kann mich nur nochmal wiederholen: die von Travel Rec. vorgeschlagene
Lösung mit einem Transistor und 4 Widerständen (s. mein vorletzter Post)
funktioniert wunderbar. Während Shutdown zeigt mein Multimeter einen
Reststrom von 2µA, was will man mehr?
Der Taster generiert eine Spannungsdifferenz von knapp 0,1V am ADC und
wird sich so auch einwandfrei detektieren lassen.