Aufwachen aus dem Tiefschlafmodus

Die meisten Mikrocontroller (z. B. AVRs, MSP430s, PICs usw.) unterstützen eine Reihe verschiedener Schlafmodi. Der "tiefste" Schlafmodus ist derjenige, der den geringsten Stromverbrauch vorgibt (z. B. "Power Down", "Shut Down"), aber alle Taktsysteme werden in diesen Modi normalerweise angehalten, und es scheint mir, dass die einzige Möglichkeit, " Aufwecken" von ihnen erfolgt über einen externen Stimulus (z. B. Pinwechsel-Interrupts, Chip-Reset). Übersehe ich etwas? Gibt es unglaublich stromsparende Methoden, um ein periodisches Wecksignal für eine MCU zu erzeugen?

Angenommen, mein Ziel ist es, den Stromverbrauch zu minimieren (dh so lange wie möglich tief zu schlafen, so kurz wie möglich wach zu bleiben), während ich regelmäßig aufwache, um eine Funktion auszuführen, was ist der übliche Weg, um diese Art von Verhalten zu erreichen? Nehmen wir zur weiteren Vereinfachung an, dass meine Funktion zustandslos ist (ich muss mich an nichts aus der Vergangenheit erinnern, um sie auszuführen).

Ich hatte einige Erfolge mit dem WDT auf dem MSP430, um diesen Effekt zu erzielen. Ich habe gerade meine Hauptroutine zu meiner Funktion gemacht, wobei die letzte Zeile es ermöglicht, dass der Watchdog-Timer nach einer bestimmten Zeit abläuft und in LPM4.5 oder wie auch immer der "Tiefschlaf" -Modus genannt wird. Das Nettoergebnis ist, dass die Funktion ausgeführt wird, die MCU schläft, das WDT abläuft und der Chip zurückgesetzt wird, ad nauseum. Scheint zu funktionieren, ich frage mich nur, ob es eine "bessere" oder "elegantere" oder "energieeffizientere" Möglichkeit gibt, diese Art von Verhalten zu erreichen?

Ich habe diesen Ansatz noch nicht mit einem AVR ausprobiert, aber ich denke, dass der WDT in den AVRs "stromhungriger" ist als beim MSP430, sodass er für Arbeiten mit geringem Stromverbrauch möglicherweise weniger attraktiv ist. Vielleicht gibt es keinen "allgemeinen" Ansatz für niedrigen Stromverbrauch, und Sie müssen die Tools verwenden, die eine bestimmte Produktlinie bietet? Ich weiß, dass die neue picoPower-Linie viele geniale Funktionen wie das Ereignissystem und Schlafwandeln hat, die in einigen Fällen kaum erfordern, dass die CPU überhaupt wach ist, wenn Sie Ihre Anwendung in diese Struktur einpassen können ...

OK genug von meiner Wanderung, lasst uns hier, was ihr zu sagen habt :)

Bearbeiten Konkrete Beispiele zur Veranschaulichung von Techniken wären auch cool!

Hast du focus.ti.com/lit/wp/slay015/slay015.pdf gesehen ? Einige interessante Punkte neben den absoluten Schlafleistungszahlen.

Antworten (4)

Die meisten Mikros unterstützen einen Quarzoszillator mit 32,768 kHz und geringer Leistung mit einer Art Prescaler und Timer-Interrupt. Stellen Sie den Prescaler so ein, dass der Timer langsam zählt und die Unterbrechung zum gewünschten Zeitpunkt erfolgt.

Einige Mikros haben auch einen eingebauten Low-Power-RC-Timer, wenn das genaue Timing nicht kritisch ist.

Das Datenblatt für jedes Low-Power-Mikro listet die Leistung mit 32,768 Oszillator (und sonst nichts) auf. Es ist ziemlich nahe bei Null. Sie können rechnen, ob dies akzeptabel ist, und es mit dem vom Watchdog gezogenen Strom vergleichen.

OK, zum Beispiel beim msp430f2013, schauen wir uns die Leistung im Datenblatt an.

0,5 μA sind fast null, obwohl es das Fünffache des wahren AUS-Modus ist.

Für weitere Details können wir in das Datenblatt schauen.
Der Übergang von LPM4 (alles aus) zu LPM3 (Betrieb des Oszillators) ist die Differenz zwischen 0,5 μA und 1 μA.

Angenommen, die Batterie ist CR2032 mit 225 mAh Kapazität. Dann beträgt die Standby-Zeit in LPM4 etwa 50 Jahre und in LPM3 etwa 25 Jahre. 25 Jahre sind für viele Anwendungen lang genug, da der ON-Strom (während der Messung selbst) den Verbrauch dominiert.

Alt-Text

Fühlen Sie sich frei, ein konkretes Beispiel auszuwählen ... :)
fertig, für msp430f2013 und cr2032 Zelle.
Wir verwenden Cr2032 bei meiner Arbeit mit dem ACLK bei 32768 und wachen alle 2 Sekunden auf. Wir verwenden alle 90 Sekunden einen Transceiver. Wir nehmen alle 10 Sekunden eine Temperaturmessung vor. Mit einem neuen CR2032 können wir mehr als 4 Jahre halten.

Einige Teile haben ziemlich stromsparende Oszillatoren (einige uA) zum Aufwachen, und einige PICs haben auch Hardware, um eine sehr langsam ansteigende Spannung an einem Pin zum Aufwachen zu ermöglichen - dies kann von einem externen Kondensator stammen, der vor dem Schlafen eingerichtet wurde, um über den aufzuladen erforderliche Wachzeit.

Bei PICs mit RTCs kann die RTC in einen Alarmzustand versetzt werden, sodass sie die MCU zu einem bestimmten Zeitpunkt mit einem externen 32,768-kHz-Quarz aufweckt. Sie ziehen ~450 nA IIRC im RTC+Sleep-Modus, aber nur 20 nA bei ausgeschaltetem RTC.

AVR-Watchdog-Timer sind nicht so schlecht, wie Sie denken. Gemäß dem ATTiny13A-Datenblatt beträgt die Stromaufnahme im Power-Down-Modus bei 3 V 2 μA ohne aktivierten WDT und 4 μA mit. Sicher, es ist 2x mehr, aber der Strom selbst ist klein genug für etwa 6,2 Jahre Betrieb, was ungefähr der gleichen Zeit entspricht, die die Batterie ohnehin benötigt, um sich selbst zu entladen (Quelle: Mindesthaltbarkeitsdatum).

Darüber hinaus würde praktisch alles andere, was Sie an den μC anschließen, viel mehr ziehen. Tatsächlich besteht der schwierigste Teil beim Entwerfen einer solchen Schaltung mit geringem Stromverbrauch darin, den gesamten Strom im restlichen Schaltplan während der Ruhephase abzuschalten.

Die Aufwachverzögerung ist auch gut konfigurierbar, von ~ 12 ms bis 8 s, wenn der Speicher dient. Die tatsächliche Frequenz macht keinen merklichen Unterschied, wenn kurze Interrupt-Routinen verwendet werden: Ich kam damit davon, den ADC einzuschalten, einen 1K-Poti abzutasten, einiges aus den Ergebnissen zu berechnen und ohne merkliche Änderung des Gesamtverbrauchs wieder einzuschlafen ( mit einem großen Kondensator geglättet, um die Trägheit meines Multimeters auszugleichen).

Beachten Sie, dass der WDT kein genaues Zeitnahme-Tool ist, also sollten Sie vielleicht eine externe RTC anschließen. Diese können nur Nanoampere verbrauchen, also sollte es eine gute Paarung sein. Wenn die fragliche RTC regelmäßige Impulse erzeugen kann, könnten Sie diese anstelle des WDT als Ihre Weckquelle verwenden, auf Kosten des Verbrauchs eines Pins.