Hallo Zusammen,
ich möchte einen Mikrocontroller an einem Supercap betreiben der mit
einer kleinen Solarzelle geladen wird. Der Energieverbrauch des MCU ist
wesentlich höher als was die Solarzelle liefern kann, darum schläft er
die meiste Zeit und wacht nur ab und zu auf um eine Messung zu machen.
Nun weiss ich aber nicht wie ich in diesen Zustand hineinkomme. Wenn man
mit einem leeren Supercap startet dann wird der langsam (mehrere
Minuten) aufgeladen bis auf etwa 4V. Der Mikrocontroller beginnt aber
bereits bei ca 2.5V an zu laufen und verbraucht dabei für die
Initialisierung mehr Energie als die Solarzelle liefert, entlädt dabei
den Supercap und die Spannung fällt, so dass der Mikrocontroller wider
ausgeschaltet wird. Und das immer wieder von neuem.
Wie kann ich erreichen, dass der Mikrocontroller erst aber einer
gewissen Spannung (zB 3 Volt) eingeschaltet wird, die ausreicht um sich
zu initialisieren und in den Sleep mode zu schalten?
So etwas wie ein "Voltage Monitor" der den MCU im Reset hält bis eine
gewisse Spannung erreicht ist hilft mir glaub ich nicht viel, da ich
dann einfach das Problem zu einer anderen Spannung verlagere?!
Das ganze ist bis jetzt nur ein Gedankenexperiment, ich weiss also noch
nicht wirklich welchen Mikrocontroller ich dann wirklich verwenden
werde.
Ich würde mich über Ideen und Ratschläge freuen. Es muss nicht unbedingt
ein fix fertiger Chip sein der das für mich regelt, es würde mich auch
interessieren ob/wie man es mit Mosfet, Komperator etc. lösen könnte.
viele Grüsse
Stefan
Der Brown-Out im Mikrocontroller löst nicht nur einen Reset bei
Unterspannung aus, sondern verhindert auch einen Start, solange die
Soll-Spannung nicht erreicht ist. Die Schaltschwelle ist bei AVR durch
Fuses programmierbar.
Allerdings könnte es sein, dass der ganze Chip in diesem Haltezustand
mehr Strom verbraucht, als im Standby. Da würde ich mal im Datenblatt
nach Hinweisen suchen oder notfalls ausprobieren.
Der MSP430 ist sehr sparsam im Stromverbrauch,
und damit kann man auch viele Spielereien mit
dem Schlafmodus machen. Aber ich bin mit dem MSP430
selber noch Anfänger. Schau dir bitte mal das
Datenblatt an, er könnte für dich geeignet sein.
Ich habe mir im Datenblatt des ATmega32 angeschaut wie der Brown-Out
funktioniert aber ich glaub nicht, dass das mein Problem löst:
Der ATmega wird im Reset gehalten bis die Spannung über Vbod+ steigt und
wieder wenn sie unter Vbod- fällt. Die Differenz Vhyst = Vbod+ - Vbod-
ist nur 50mV, es könnte also immer noch sehr gut passieren dass der
ATmega sich gleich wieder in den Reset befördert. Wenn man die Vhyst
Spannung ändern könnte auf 1V oder so dann würde es funktionieren, das
geht aber anscheinend nicht. Oder habe ich jetzt etwas falsch
verstanden?
Deine Bedenken sind durchaus berechtigt. Da liegt es doch nahe, einen
externen Schmitt Trigger an den Reset-Eingang anzuschließen. Dem könnte
man mit einem OP-Amp realisieren. Müsste allerdings ein spezieller sein,
wegen der geringen Versorgungsspannung.
Oder du schleifst einen Thyristor in die Spannungsversorgung ein, der
erst ab einer gewissen Spannung ein schaltet. Wenn man den selbst aus
einem NPN/PNP Pärchen bastelt, kann man ihn in die VCC Leitung
einschleifen und mit negativer Gate-Spannung ansteuern (natürlich mit
Spannungsteiler, sonst schaltet er zu früh ein).
Ich habe gerade gelesen, dass man den Brown-Out Detektor per Software
deaktivieren kann. Wenn Du das gleich zum Programmstart machst, ist es
egal, wenn danach die Spannung einbricht. Danach kann ein ADC verwendet
werden, um die Spannung per Software zu überwachen.
An welche Funktion denkst du beim MSP430? Der Stromverbrauch an sich ist
eigentlich kein Problem, viele der neuen Mikrocontroller haben ja
mittlerweilen einen Stromverbrauch von <1uA im tiefsten power mode.
> Ich habe gerade gelesen, dass man den Brown-Out Detektor per Software> deaktivieren kann. Wenn Du das gleich zum Programmstart machst, ist es> egal, wenn danach die Spannung einbricht. Danach kann ein ADC verwendet> werden, um die Spannung per Software zu überwachen.AVR: Das Problem ist wohl das Starten, meine ATmega48 bzw. 88 ziehen im
RESET einige mA, also käme der Kondensator nie auf die nötige Spannung.
@stefanus: Danke für die Ideen mit dem Schmitt-Triger und Thyristor, das
muss ich mir mal genauer anschauen. Wo hast du du gelesen dass man den
Brown-Out per software ein und auschalten kann? Im Atmega32 Datasheet
steht, dass er per fusebit aktiviert/deaktiviert wird.
@ope: Das mit dem Komparator hatte ich mir auch überlegt, dazu bräuchte
ich aber irgend eine Referenz Spannung die zT über der
Versorgungsspannung liegen müsste? Ausserdem dürfte der Komparator nicht
wider zurückschalten.
Es gibt schon diverse technische Mòglichkeiten, das einfachste ist aber
die Solarzelle auf 2 I/O anzuschliessen und den Coldcap mit zwei
Kondensatoren (1uf und 0.1uf) an VCC und GND. Das wars.
Weiters gibt es fuer sowas auch noch einen msp mit fram anstelle von
sram.
Stefan schrieb:> Wie kann ich erreichen, dass der Mikrocontroller erst aber einer> gewissen Spannung (zB 3 Volt) eingeschaltet wird
Leg ihn schlafen und schliesse an einen Pin der auf PinChange Interrupt
zum aufwachen führt einen 4V Unterspannungssensor an, wie ICL7665.
Alternativ ohne Zusatzbauteile: Regelmässig (per watchdog) aufwachen
lassen (z.B. jede 1/10 sec), per ADC Spannung messen, und falls es noch
nicht reicht gleich wieder schlafen schicken.
@chris: Das verstehe ich jetzt nicht. Kannst du etwas ausführlicher
erklären wie das funktionnieren sollte?
@MaWin: Meine Befürchtungen waren, dass ich gar nicht soweit komme um
ihn in den Schlafzustand zu versetzen. Wenn er einmal initialisiert ist
und schläft sollte es kein Problem mehr sein.
Wie ist eigentlich das Verhalten von Mikrocontrollern unter ihrer
Minimalspannung? Jedenfalls für die ATmegas scheint es so zu sein, dass
sie sich dann im Reset Zustand befinden. Wenn sie aber im Reset einige
mA Strom ziehen (gemäss Post vom alten Hans) dann müsste man den
Mikrocontroller komplett vom Supercap trennen sonst könnte er gar nie
geladen werden.
Das (Taschenrechner)Solarpanel ladet ueber die Schutzdioden den Goldcap.
Der uC braucht noch einen 1uf sowie 0.1uf damit dieser stabil làuft.
Wenn genug Sonne da ist, startet der uC und làuft ab da.
Hier ist die Rede von Goldcap, bei 1 Farad hat man bei 40uA
Durchschnittsverbrauch eine Reserve von 24 Stunden, bei 20uA 48 Stunden
usw.
Der Stromverbrauch eines AVR mit externem 32khz Takt an timer2 ist 1uA
(mega88PA) und wenn er aktiv ist 20uA (32khz).
Der ADC schlàgt mit ca 75uA zu buche. Bei 5V sind 40% hinzuzurechnen.
In einer realen Applikation habe ich einen Durchschnittsverbrauch von
knapp unter 3uA. Gesendet wird wenn der goldcap voll ist, der uC bekommt
am Eingangspin mit ob das Solarpanel Spannung liefert oder nicht.
Deshalb weil nur gesendet wird, wenn die Solarzelle den Strom liefert
und der goldcap schon etwas nachgeladen wurde, fliesst die Sendeleistung
nicht in das Budget fuer den Strom des Goldcaps ein.
Was noch zu erwàhnen ist:
Eine 5.6 Zenerdiode schuetzt den uc for zu hoher Spannung, da zwei
Solarpanels in Serie verbaut wurden um eine hohe Spannung zu erhalten um
den
goldcap auf ca 5.3V aufzuladen.
Wenn man sehr stromhungrig ist, dann sollte man sich eher sowas nehmen,
https://www.olimex.com/Products/MSP430/Power/MSP430-SOLAR/
Du aktivierst die Brown-Out-Detection per Fuse und deaktivierst sie beim
Programmstart sofort. Dann ist sie in den Sleep-Modi deaktiviert, wird
beim Aufwachen aber temporär wieder scharf. Ein ATmega328P kann das.
(S.38/10.2/BOD Disable)
Alles recht theoretisch hier. In der Praxis gibts Probleme weil die
Sonne öfter mal nicht scheint und das Energiebudget nicht langt. Von
einer Z-Diode sollte man auch die Finger lassen: Viel zu ungenau und zu
früh zu stromhungrig.
MaWin schrieb:
> Leg ihn schlafen und schliesse an einen Pin der auf PinChange Interrupt> zum aufwachen führt einen 4V Unterspannungssensor an, wie ICL7665.
Das Problem bleibt die Startbedingung.
Wenn man jetzt wüsste, wie der ICL7665 unterhalb seiner
Mindestbetriebsspannung von 1.6 V reagiert.
Mein alter Tietze&Schenk macht da wenig Hoffnung:
"... läßt sich nur mit einem Ruhekontakt eines Relais realisieren ..."
Und ein solches scheidet hier ja wohl aus.
Vorschlag: Kurzzeitbetrieb in Übergangsphase
In der Startphase nach seinem brownout-Start nur etwa im Minutenrhythmus
die Betriebsspannung kurz per AD-Wandler abfragen, erst bei
ausreichender Spannungsreserve in normalen Betriebsmode übergehen. Bei
Unterspannung rechtzeitig in den sleepmode zurück. Da kann man die
Schaltschwellen per Software beliebig einstellen.
Eventuell in der Niedrigspannungsphase der Solarzelle den Kontroller per
Diode nicht aus dem Hauptpuffer sondern aus einer Akkuzelle versorgen.
Ich vermute stark, dass BOR auch >3mA braucht, wie der generelle Reset
auch.
Ev. SM72240 sowie z.B. 2N7002 .
Ja, Zenerdiode ist nicht besonders genau, aber da eine hohe Spannung
gewàhlt
wurde, um auch bei nicht direktem Sonnenschein noch Aufladung zu haben
ist
sie effizienter als ein Vreg.
Bezueglich ICL7665 und Vcc<1.6V , das wuerde ich als kein Problem sehen.
VCC von ICL7665 wurde ueber eine Diode vom Solarpanel kommen und
gleichzeitig
ueber eine weiter Diode vom uC. Also bas-70 z.B.
Sobald der uC korrekt làuft, setzt er den Ausgangspin auf high, welcher
zur diode/vcc des ICL7665 geht. Gleichzeitig wird bei Unterspannung
abgeschaltet.
Ich hab mal irgendwo gelesen, dass Der Brownout am AVR nur funktioniert,
wenn die Spannung mit einer gewissen Spannung steigt und fällt. Wenn das
zu langsam passiert, soll es wohl Probleme geben.
Kann das jemand bestätigen?
Das Problem läßt sich vermutlich nur mit externer Beschaltung lösen. Ich
kenne zumindest keinen MC, der sowas kann.
Das Problem sieht man auch oft an käuflichen Geräten. Solange die Akkus
voll sind, macht der MC sein Ding und geht dann in den Stromsparmodus.
Sobald aber die Akkus leer sind und nicht schnell entnommen oder geladen
werden, schlägt das Brownout zu, der MC geht in Reset und zieht viel
Strom. Die Folge ist, die Akkus werden tiefentladen und sind reif für
den Mülleimer.
Aber auch Primärzellen mögen eine Tiefentladung nicht, sie werden dann
schnell undicht und zerätzen die Platine.
Es müßte einen MC geben, der unter der unteren Brownout-Schwelle im
Schlafmodus bleibt und erst beim Überschreiten der oberen Schwelle kurz
einen Reset auslöst.
Hallo,
wie wäre es mit einem Resetcontroller ala TPS3836. Da gibt es sicher
vrschiedene passende, die die Aufgabe bei einem Verbrauch von wenigen
100nA schaffen.
Grüße
Fasti
Ein Reset-Controller bringt nichts, da wie Peter schon bemerkte im Reset
der Stromverbrauch viel höher ist.
Besser ist ein Spannungsdetektor, der dem µC den Vcc ein und abschaltet.
Wie wäre es mit einem Resetcontroller (Schwelle zB 1 Volt über der
Minimalspannung vom uC) und damit einen FET anzusteuern der die
Versorgung vom uC schaltet. Das ganze so beschaltet dass der uC den
Resetcontroller "überstimmen" kann. Sobald der uC dann das erste mal
aufwacht überstimmt/deaktiviert er den Resetcontroller und kann von da
an den ganzen Spannungsbereich nutzen. Falls einmal die Spannung am
Supercap unter das Minimum vom uC sinkt geht der in den Brown-out Reset
und gibt dabei automatisch den Resetcontroller wieder frei.
Das könnte funktionieren oder? Sieht jemeand eine bessere/einfachere
Lösung?
> Genau DAS wäre wohl die sinnvollste Lösung.
Es sieht theoretisch gut aus. Ich hoffe, Stefan, dass Sie uns über die
Lösung in der Realität informieren, zumindest ich bin sehr daran
interessiert, da noch etwas skeptisch.
Und ein paar Angaben zu den Strömen, die habe ich bislang vermisst.