Aus RN-Wissen.de
Version vom 5. Juli 2009, 12:52 Uhr von Besserwessi (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

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 das 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 kurze Pause in der weniger Strom verbaucht wird als im normalen Betrieb. 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.

Variabler Takt

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. Besser ist es aber in der Regel den Controller zum warten in einen Stromsparmodus zu schicken, denn so kann man sparsam warten und trotzdem schnell rechnen wenn nötig.

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.


1) Idel : 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%.

2) Powerdown: Fast alle Takte sind ausgeschaltet. Entsprechend gehen keine Timer, USART usw. DieMö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 Quarzlaufen zu lassen, um eine durchlaufen de genaue Zeit 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 Idel Mode, ist dabei mehr ein Nebeneffekt.


Wenn man im Stromsparmode auf ein Ereigniss wartet, kann man natürlich auch nicht den Watchdg zurücksetzen. Hier muß man dann eventuell ohne arbeiten, wenn kein Zeitgesteuerter Interrupt auftritt. Der Watchdog kann auch als langsamer Timer benutzt werden, um den µC gelegentlich (z.B. etwa jede Sekunde) aufzuwecken, um Hardware abzufragen. 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 Idel 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 Im Power save mode geht noch ein Interrupts von Timer 2, der in diesem Mode ja gerade weiter laufen kann.


Softwarebeispiele

Im Assembler gibt es den Befehl Sleep, um in den im Registe SMCR eingestellten Sparmodus zu wechseln.


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 AD Eingängen kann man den Digitalen Eingang abschalten. Dies hilf auch gegen den zusätzlichen Stromverbrauch durch eine mittleren Spannungswert.

Taktquelle

Auch die Takterzeugung braucht Strom. 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. Beim Mega48 u.Ä. läuft der interne RC Talt mit 8 MHz und braucht daher relativ viel Strom. Die Sparsamste Taktquelle ist in der Regel ein 32 kHz Uhrenquarz oder der Watchdog timer.

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. Beim AD Wandler und der internen Referenz dauert es nach dem Einschalten aber etwas, bis gute Ergebnisse erziehlt werden. Wie viel Strom die einzelnen Module brauchen hängt von der Controllerversion, der Spannung und dem Takt ab.


Daten zum Stromverbrauch

Die Beispieldaten sind für 3 V aus dem Datenblatt. Die Werte für den Mega16/Mega32 sind ähnlich (etwa 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

idel 4 MHz (Q) 360 µA 1 mA 260 µA idel 1 MHz (RC) 160 µA 300 µA 140 µA idel 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 timer, Q2 = Quarz für Timer2


Stromverbrauch der IO Module in aktive oder idel Mode, die im PRR Register abgeschaltet werden können. Daten für 3 V und 4 MHz, 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: ca. 20 % von aktive oder ca. 100 % der Idel Power Beim Mega8 lassen sich diese Teile nicht seperat abschalten. 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.


vom Takt unabhängiger Teil des Stromverbrauchs: 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 µA 250 µA 170 µA


LiFePO4 Speicher Test