RoboterNetz.de Foren-Übersicht               
 RN-Wissen Home  -  Community Home  -  Alle Artikel -  Mitglieder -  Moderatoren  -  Bilderliste  -  Letzte Änderungen
 Kategorien  -  Beliebte Seiten  -  Sackgassenartikel  -  Artikel ohne Kategorie  -  Neue Artikel  -  Anmelden

Stromspar-Modi(AVR)

aus RN-Wissen, der freien Wissensdatenbank

Der Stromverbrauch von CMOS ”Cs ist etwa proprotional zur Taktfrequenz und Spannung. FĂŒr einen geringen Stromverbrauch könnte man also die Frequenz so weit reduzieren, dass die Rechengeschwindigkeit gerade noch ausreicht. Sonderlich praktisch ist diese Methode aber nicht. Moderne ”Cs haben eine Möglichkeit den Stromverbrauch zu reduzieren, wenn keine Rechenzeit nötig ist. Der ”C macht dann eine Pause in der deutlich weniger Strom verbaucht wird als im normalen Betrieb. Es ist durchaus ĂŒblich, das der grĂ¶ĂŸte Teil der Zeit in einem Stromsparmodus verbracht wird. Eine niedrigere Frequenz kann trotzdem sinnvoll sein, wenn dadruch eine niedrigere Spannung möglich ist und auch wegen weniger Funkstörungen. Eine reduzierte Spannung ist in jedem Fall sinnvoll.

Der folgende Teil bezieht sich auf die ATMEL AVR Controller. Vieles gilt so Ă€hnlich aber auch fĂŒr Pic, MSP430 und andere.


Inhaltsverzeichnis

Stromsparmodi

Bei den AVRs gibt es verschiedene Stromsparmodi (Sleep Modes). Sie unterscheiden sich dadurch wie viel Perepherie noch lĂ€uft und wie der ”C wieder in den normalen Zustand zurĂŒckkehrt. In der Regel ist dies durch das Auslösen eines Interrupts, der dann als erstes ausgefĂŒhrt wird. Die Beschreibung bezieht sich im folgenden auf den Atmel Mega48/88/168. Die anderen AVR Controller sind aber recht Ă€hnlich.


1) Idle : Dies ist der einfachste Sparmodus. Alle Timer, PWM Signale usw. laufen weiter und jeder Interrupt kann zum Aufwecken genutzt werden. Das aufwecken geht relativ schnell (6 Zyklen), so dass man diesen Mode auch fĂŒr kĂŒrzere Wartezeiten gut nutzen kann. Die Stromaufnahmen reduziert sich immerhin auf etwa 20%-50%. Ein weiterer Vorteil ist es, dass die Antwortzeit auf den Interrupt genau definiert ist, da ja kein angefangener Befehl mehr abgearbeitet werden muß.

2) Powerdown: Fast alle Takte sind ausgeschaltet. Entsprechend gehen keine Timer, USART usw. Die Möglichkeiten zum Aufwecken sind entsprechend eingeschrĂ€nkt. Ein Quarz als Takt ist in diesem Fall unpraktisch, denn es dauert etwas bis der Quarz wieder stabil schwingt. Die Verzögerung entspricht der nach einem Reset. Bevorzugt nutzt man hier also den internen Oszillator. DafĂŒr ist der Stromverbauch in diesem Mode auch sehr niedrig (unter 1”A möglich) und es kann zum Teil auf ein echtes ausschalten verzichtet werden.

3) Powersave: Der Mode ist sehr Ànlich dem Powerdown, nur das Timer 2 im asyncronen Modus noch geht. Die Hauptanwendung ist es Timer 2 mit ein 32 kHz Quarz laufen zu lassen, um eine durchlaufende genaue Zeit (Echtzeituhr) zu haben. Der 32 kHz Takt kann dann auch zum kalibrieren des internen Taktes genutzt werden, um z.B. eine UART zu betreiben.

4) Standby: Ähnlich wie Powerdown, nur ist das Aufwachen schneller und definiert in 6 Zyklen. Nur der Oszillator lĂ€uft weiter. Sinnvoll ist das vor allem mit einem Quarz, der ja nicht so schnell starten kann.

5) ADC Noise Reduction mode: Dieser Mode dient dazu eine AD-Wandlung mit weniger Störungen zu bekommen. Die reduzierte Stromaufnahmen, Àhnlich dem Idle Mode, ist dabei mehr ein Nebeneffekt. Das Aufwachen erfolgt hier in der Regel wenn die AD-Wandlung fertig ist.


Wenn man im Stromsparmode auf ein Ereignis wartet, kann man natĂŒrlich auch nicht den Watchdog zurĂŒcksetzen. Hier muß man dann eventuell ohne arbeiten, wenn kein passender Zeitgesteuerter Interrupt auftritt. Der Watchdog kann auch als langsamer und sparsamer Timer benutzt werden, um den ”C gelegentlich (z.B. etwa jede Sekunde) aufzuwecken, um Hardware abzufragen. Neuere ”Cs wie Mega88 erlauben dazu ĂŒber den Watchdogtimer einen Interrupt auszulösen. Eine genaue Zeitmessung ist damit allerdings nicht möglich.

Die Debugwire Funktion sollte abgeschaltet sein, vor allem fĂŒr Powerdown und Powersave mode.

Aufwachen aus den Stromsparmodes

Nicht jeder Interrupt kann zum Aufwachen genutzt werden; genaueres im Zweifelsfall im Datenblatt nachsehen. Im Idle mode gehen alle Interrupts. In allen Modes reichen die folgenden Interrupts zum Aufwachen:

  • Pin Change
  • Int0 , Int1 , aber nur als Level Interrupt
  • TWI Address match
  • Watchdog timer, auch als Interrupt

Im Powersave mode geht auch ein Interrupt von Timer 2, der in diesem Mode ja gerade weiter laufen kann. Damit das Aufwachen funktioniert muß ein Interrupt auch per SEI freigegeben werden.

Softwarebeispiele

Praktisch immer, wenn auf einen Interrupt gewartet wird, kann ein sleep-mode genutzt werden. Im Extremfall kann man damit sogar die Schleife und das Flag ersetzen. Um das Risiko zu vermindern versehentlich (z.B. ohne Brownout) in den sleep-mode zu gelangen, gibt es ein extra Bit im Register SMCR, um den Sleep mode zu blockieren.

In Assembler gibt es den Befehl Sleep, um in den im Register SMCR eingestellten Sparmodus zu wechseln. Nach der ISR die den Sparmodus aufgehoben hat, wird hinter dem sleep-Befehl normal weitergemacht.

Bei WinArv (C) werden ĂŒber #include <avr/sleep.h> die Stromsparfunktionen weitgehend hardwareunabhĂ€ngig eingebunden. Ein Beispiel ist bereits hier: Timer/Counter_(Avr)#Input_Capture.

BASCOM hat fĂŒr die Stromsparmodi extra Befehle: IDLE und POWERDOWN fĂŒr einige ”Cs. FĂŒr andere Modes mĂŒĂŸte man wohl inline ASM nutzen.

Sonstiges zum Stromsparen

ungenutzte Pins

Ein vermeidbarer weiterer Stromverbraucher sind EingĂ€nge die unbeschaltet sind oder eine etwa mittlere Spannung haben. Besser ist es ungenutzte Pins als Ausgang zu definieren, oder einen definierten H oder L Pegel zu erzeugen, ggf. auch durch die internen Pullup WiderstĂ€nde. Der eingeschaltete interne Pullup-widerstand braucht an sich noch keinen nennenswerten Strom. Bei den EingĂ€ngen fĂŒr den AD und Comperator kann man den digitalen Eingang meist abschalten. Dies hilft auch gegen den zusĂ€tzlichen Stromverbrauch durch eine mittleren Spannungswert.

Taktquelle

Auch die Takterzeugung braucht Strom. In Standby Mode ist dies sogar der wesenliche Stromverbrauch. Der interne RC-Takt braucht dabei etwas mehr Strom als ein Quarz. Beim Quarz kann zum Teil zwischen geringem Stromverbrauch und höherer Störfestigkeit gewÀhlt werden. Die sparsamste Taktquelle ist in der Regel ein 32 kHz Uhrenquarz oder der Takt vom Watchdog timer.

Bei neueren AVR Controllern kann der Takt intern geteilt werden. Man kann den Teiler auch zur Laufzeit verstellen. Man braucht also nicht den Quarz zu wechseln und kann trotzdem einen sparsameren langsamen Takt wÀhlen. Besonders wenn man den Standby mode nutzt, ist es aber besser gleich den richtigen Quarz zu wÀhlen.

IO Module

Neben der Recheneinheit brauchen auch die IO Module etwas Strom. Viele der Module lassen sich besonders bei neueren ”Cs einzelen zur Laufzeit abschalten. Bei Ă€lteren Modellen geht das wenigstens fĂŒr den Watchdog, den Brownout Detektor, den analogen Komparator und ggf. den AD Wandler. Beim AD Wandler und der internen Referenz dauert es nach dem Einschalten aber etwas, bis gute Ergebnisse erzielt werden.

Die Abschaltung des digitalen Teil des AD-Wandlers bei neueren ”Cs ist etwas trickreich: nur wenn der Takt zum digitalen Teil eingeschaltet ist (Register PRR), kann man auf das Register ADCSRA zum an- und abschalten des analogen Teils zugreifen.

Daten zum Stromverbrauch

Die Wirksamkeit der Stromsparmodi kann man wohl am besten an Beispieldaten abschĂ€tzen. Die Beispieldaten aus dem Datenblatt (zum Teil aus Kurven abgelesen) sind fĂŒr 3 V. Die Werte fĂŒr den Mega16/Mega32 sind Ă€hnlich (etwas höher) dem Mega8.

. Mega48/88 Mega8L Mega88PA
aktive 4 MHz (Q) 1,7 mA 6,8 mA 1,6 mA
aktive 1 MHz (RC) 550 ”A 1,8 mA 450 ”A
aktive 128kHz (WD) 60 ”A n.A. 45 ”A
aktive 32kHz (Q) 27 ”A 65 ”A ca.20 ”A
idle 4 MHz (Q) 360 ”A 1 mA 260 ”A
idle 1 MHz (RC) 160 ”A 300 ”A 140 ”A
idle 32kHz (Q) 15 ”A 16 ”A ca. 9 ”A
power down 0,25”A 0,25”A 0,1 ”A
power down+watchdog 4 ”A 20 ”A 4 ”A
powersave, 32 kHz(Q2) 7 ”A 10 ”A 1 ”A
Standby 4 MHz (Q) 80 ”A 70 ”A 65 ”A

Taktquellen: Q = Quarz, RC = interner RC Takt, WD = Watchdog-takt, Q2 = Quarz fĂŒr Timer2


Beim Mega48 u.Ä. lassen sich viele IO Module ĂŒber das Register PRR einzeln abschalten. Zum Stromverbrauch im aktiven oder Idle Mode kommt dann noch etwas dazu. Die Daten sind fĂŒr 3 V und 4 MHz, und in etwa proportional zum Takt:

IO-Module Mega 48/88/168 Mega88PA
USART 51 ”A 21 ”A
TWI 75 ”A 46 ”A
Timer0 24 ”A 10 ”A
Timer1 32 ”A 25 ”A
Timer2 72 ”A 35 ”A
SPI 95 ”A 40 ”A
ADC 75 ”A 50 ”A
Summe 424 ”A 227 ”A

Wenn alles eingeschaltet ist, sind das ca. 20% bzw. 100% des Stromes im aktiven bzw. Idle Mode. Beim Mega8 lassen sich diese Teile nicht seperat abschalten und der Strom ist schon oben enthalten.


Beim Stromverbrauch des ADCs ist das Datenblatt nicht so ganz eindeutig. Man hat einen taktunabhÀngigen Teil und einen der vom Takt abhÀngt. Eine Unterscheidung nach dem ADC Takt oder ob gerade ein Wandlung stattfindet ist noch nicht gemacht.

Die analogen Teilschaltungen haben einen vom Takt unabhÀngigen Teil des Stromverbrauchs:

Mega88 Mega8L Mega88PA
Bandgap Ref. 10 ”A 10 ”A 10 ”A
Brownout incl. Bandgap.23 ”A 15 ”A 20 ”A
AComperator 80 ”A 60 ”A 55 ”A
ADC 300 ”A250 ”A 170 ”A

siehe auch

Interrupt

'Persönliche Werkzeuge

3D Sensorboard
Kreisel+Beschleunigung
robotikhardware.de


Lichtprofi.de
LED Shop
www.lichtprofi.de