Energiesparen mit MCUs

Mikrocontroller-Schaltungen mit niedrigem Strombedarf

18. Dezember 2012, 8:18 Uhr | Von Andreas Riedenauer
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Energiesparen mit MCUs

Geschickt getaktet

Ist beispielsweise durch die Baudrate des UART ein Zeitfenster vorgegeben, sollte man zeitweise den Takt auf das gerade noch ausreichende Maß absenken und erst für Berechnungen wieder auf den höheren Takt umschalten. Dabei ist es günstiger, zwischen geeigneten Taktquellen umzuschalten als nur den Teilerfaktor des Prescalers zu variieren.

Grundsätzlich sollten höhere Frequenzen als maximal benötigt erst gar nicht erzeugt werden. In dieser Hinsicht ist der Xmega besonders flexibel. Wird er mit 16 MHz betrieben, ist es besser, diese Frequenz mittels 2-MHz-RC-Oszillator und PLL zu erzeugen, als einen 32-MHz-Takt herunterzuteilen. Benötigen CPU und Peripherie unterschiedliche Takte, sollte der Hauptoszillator, aus dem diese abgeleitet werden, so langsam wie möglich laufen.

Taktoszillatoren unterscheiden sich in Stromaufnahme, Einschwingzeit und Stabilität. Bei Nutzung der Sleep-Modi und begrenzten Anforderungen an Genauigkeit und Frequenzstabilität ist der interne RC-Oszillator zu empfehlen. Das spart nicht nur den vibrationsempfindlichen Quarz und Platz auf der Platine, sondern auch Zeit beim Einschwingen und damit Energie: Ein Quarz benötigt über 15 000 Schwingungen, bis er sauber oszilliert, ein RC-Oszillator nur sechs!

Keramikresonatoren liegen mit 200 bis 1000 Schwingungen dazwischen. Ihre Genauigkeit reicht für asynchrone serielle Schnittstellen, nicht aber für eine Uhr. Neuere AVR-Typen verfügen über einen Temperatursensor, der die Kalibrierung des RC-Oszillators im Register OSCCAL abhängig von der Temperatur mit 1% bis 2% Abweichung ermöglicht, was für UARTs ausreicht.

ATxmegas verfügen über einen im kompletten Spannungs- und Temperaturbereich auf 1% kalibrierten 32-kHz-RC-Oszillator. Auch die neuen »ATtiny1684« sowie die SAM4L-Serie sind mit besonders sparsamen Oszillatoren versehen. Die RC-Oszillatoren der neuesten Xmegas sind derart genau, dass nicht einmal für USB ein Quarz nötig ist. Die Quarzoszillatoren moderner AVRs lassen sich wahlweise für Low-Power- oder Full-Swing-Betrieb konfigurieren. Durch die geringere Amplitude im Sparmodus sinkt aber naturgemäß die Festigkeit gegen elektromagnetische Störbeeinflussung.

Tabelle 2 stellt die verschiedenen Oszillatortypen gegenüber. Neben der Taktfrequenz beeinflusst auch die Betriebsspannung die Stromaufnahme; sie sind nahezu proportional zueinander. Aber je niedriger die Betriebsspannung, desto niedriger ist auch die maxi-mal zulässige Taktfrequenz. Einge Controller enthalten einen Aufwärtswandler, der den Betrieb an nur einer Batteriezelle erlaubt.

passend zum Thema

Oszillatortyp
Genauigkeit
Einschwingzeit in Zyklen
Quarz
10 ppm bis 50 ppm
16000
Uhrenquarz 32 kHz 10 ppm bis 50 ppm 16000 bis 32000
Keramikresonator 0,5 % bis 1 % 200 bis 1000
RC-Oszillator 1 % bis 2 & (kalibriert) 6
externer Takt
-
6

Tabelle 2: Oszillatortypen


Beim »ATtiny23U/43U« ist sicheres Anlaufen ab 0,9 V gewährleistet, wodurch die Batterie sehr gut ausgenutzt wird. Um Tiefentladung zu vermeiden, wird unterhalb von 0,6 V der gesamte Chip abgeschaltet. Der Schaltregler selbst benötigt 17 μA, was für Schaltungen mit ständig laufendem Timer noch zu viel sein kann. Bei zu weit absinkender Betriebsspannung lässt sich das Verhalten von Mikrocontrollern nicht mehr exakt vorhersagen. Dies lässt sich durch eine »Brown out Detection« (BOD) vermeiden, die den Controller bei Unterschreiten des Mindestwertes zurücksetzt.

Pico-Power-AVRs verfügen über eine Sleeping-BOD, die sich im Sleep-Modus abschalten lässt, ATxmegas über eine »Sampled BOD«, die nur zeitweise die Spannung überprüft. Bei Batterien sinkt die Spannung so langsam, dass es oft genügt, sie periodisch über den A/D-Wandler oder den analogen Komparator zu überprüfen. So lässt sich zudem bereits deutlich vor Erreichen der BOD-Schwelle eine Batteriewarnung ausgeben. Auch das Softwaredesign hat Einfluss auf den Stromverbrauch.

Einige Tipps: Unterprogramme sparsam einsetzen, schnelle statt Speicherplatz sparende Algorithmen einsetzen, Look-up-Tabellen anstelle langwieriger Rechnungen, Interrupts statt Polling, relative Sprünge verwenden, häufig benutzte Variablen in Arbeitsregistern halten. Bei Hochsprachen die Optimierung zugunsten schneller Codeausführung wählen.

Besonderheiten beim »AVR«

AVR und SAM4(L) sind aufgrund des statischen CMOS-Designs und der Harvard-Architektur schon sehr sparsame Mikrocontroller. Beim AVR sind Features wie der effiziente, RISC-ähnliche Befehlssatz, Zero-Flag-Propagation und das Flash-Sampling zu nennen, bei dem der Programmspeicher nur während der Zugriffsphase mit Strom versorgt wird.

Innerhalb der AVR-Familie variiert die Ausstattung mit Stromsparfunktionen. Bei den klassischen AVRs sind die Pico-Power-Ausführungen am sparsamsten und darunter wiederum die »A«-Typen (z.B. »ATmega 48/88/168PA«), die um zirka 30% sparsamer sind als ihre Vorläufer. Nicht benötigte Peripherie sollte abgeschaltet werden.

Moderne AVRs haben ein Power-Reduction-Register (PRR), über das sich Timer, ADC, USART und TWI (I²C) durch Setzen eines Bits vom Takt trennen lassen; sie verbleiben dann in ihrem letzten Zustand, bis der Takt wieder freigegeben wird. Der Analogkomparator ist extra abzuschalten, nämlich durch Setzen des Bits ACD im Register ACSR.

Die Ersparnis beträgt etwa 60 μA bei 3 V. Dabei muss der Analog-Comparator-Interrupt gesperrt sein, sonst wird er durch Ändern des Bits ausgelöst. Dazu ist das ACIE-Bit im Register ACSR zuvor zu löschen. Wenn die Bandgap-Diode (Vref) intern mit einem Komparator-Eingang verbunden ist, fließen etwa 15 μA, und zwar auch im Sleep-Modus. Deshalb sollte das Bit ACBG im Register ACSR auf null gesetzt werden.

Tabelle 3 fasst die Einsparmöglichkeiten zusammen. Der Adressraum für die Special-Function-Register (SFR), in dem schnelle Spezialbefehle angewandt werden können, ist beschränkt, sodass Atmel einige Peripherieregis-ter in den SRAM-Bereich legen musste. Durch geschickte Auswahl der Peripherie lassen sich einige Takte einsparen.

Peripheriemodul
Einsparung im Aktiv-Modus
Einsparung im Idle-Modus
USART
2 %
6 %
Asynchroner Timer (RTC) 4 % 15 %
Timer/Counter 2 % 6 %
A/D-Wandler 4 % 14 %
SPI
3 %
11 %

Tabelle 3: Einsparungen bei abgeschalteter Peripherie bei »AVR«-Controllern


Zum Ausgleich gibt es General-Purpose-I/O-Register, auf die ein schnellerer Zugriff möglich ist als auf das SRAM. Bei der Xmega-Familie kann man darüber hinaus die aktive Phase durch sogenannte Virtual-Ports verkürzen, die den Zugriff auf die Register DIR, IN, OUT und INTFLAGS von bis zu vier Ports mit Single-Cycle-Befehlen zu Datentransfer und Bitmanipulation gestatten.

Der A/D-Wandler wird nur bei Bedarf eingeschaltet und dann möglichst im Single-Conversion-Modus betrieben. Im Noise-Reduction-Modus wird die CPU während der Wandlung abgeschaltet, was nicht nur Strom spart, sondern auch die Genauigkeit erhöht: Störungen des ADCs durch die Aktivitäten der CPU fallen weg. Reichen 8 Bit Auflösung anstelle der möglichen 10 Bit, verkürzt sich die Wandlungszeit von 65 μs auf 12 μs.

Da aber kein eigener 8-Bit-Modus zur Verfügung steht, muss man den ADC-Takt auf einen entsprechend hohen Wert stellen und durch Setzen des ADLAR-Bits das signifikante Ergebnisbyte ins ADCH-Register schieben. Dieses Register liest man 12 μs aus und schaltet dann den A/D-Wandler ab. Liegen analoge Spannungen an Eingangspins, die auch digitale Funktion haben, fließen in den digitalen Eingangsstufen Querströme, da beide Transistoren teilweise leiten.

Bei Pico-Power-Typen lassen sich die digitalen Eingangszweige über das »Digital Input Disable Register« (DIDR) bitweise trennen. Beim Xmega kann man den Non-Volatile-Memory-Controller stromsparend konfigurieren. Dabei werden das EEPROM sowie nicht benutzte Teile des Flash-Speichers abgeschaltet. Seitenweise (page) in das EEPROM zu schreiben ist sparsamer als byteweise.

Den Watchdog-Timer (WDT) abzuschalten spart 6 μA bei 3 V. Beim Xmega gibt es dank DMA und Event-System mehr Möglichkeiten, die CPU anzuhalten und dennoch auf Ereignisse zu reagieren und sogar Teilaufgaben selbstständig in der Peripherie ablaufen zu lassen. Ein Datenlogger etwa kann fast ohne CPU arbeiten: Über das Eventsystem löst die RTC periodisch A/D-Wandlungen aus, deren Ergebnisse über die DMA direkt im Speicher unter fortlaufenden Adressen abgelegt werden.

Die CPU wird nur bei Bedarf per Interrupt geweckt, zum Beispiel wenn das Ergebnis außerhalb eines zuvor definierten Bereichs liegt. Der DMA reduziert die CPU-Belegung um 96% bei SPI-Kommunikation mit 4 MBit/s und um 57% bei UART-Kommunikation mit 2 MBit/s. Bei den Controllern mit LCD-Controller wählt man spezielle Ansteuer-Signalformen aus und hält die Frame-Rate möglichst niedrig. Bei synchronem LCD-Clock kann das LCD-Modul auch im Idle- und im Power-Save-Modus betrieben werden, bei asynchronem LCD-Clock dazu im ADC-Noise-Reduction-Modus.

Über den Autor:

Andreas Riedenauer ist Field Application Engineer bei Ineltek Mitte.

Checkliste zum Low-Power-Design mit Mikrocontrollern   
Externe Beschaltung optimieren
Niedrige Betriebsspannung
Low-Power-Version verwenden
Eindeutige GND/VCC-Pegel an Eingängen / Pull-ups
Nichtgenutzte Pins als Eingänge mit Pull-ups
Bei Bedarf externe Pull-ups (Reset-Zustand)
Sleep-Modi nutzen
Intervallbetrieb mit RTC und RC-Oszillator
Aktive Phasen kurz und schnell
Dynamischer Tatkwechsel
Low-Power-Oszillator-Modus
Baustein mit Ultra-Low-Power-RC-Oszillator verfügbar?
Kurze Anschwingzeit des Oszillators
Brown-out-Detection (zeitweise) abschalten / Alternative: Komparator, ADC
On-Chip-Debugging-Einheit aus
Debug-Schnittstelle (JTAG) aus
Unbenutzte Peripherie (zeitweise) aus
General-Purpose-Register nutzen (schneller Zugriff)
Virtual-Ports nutzen (Xmega)
FRAM statt EEPROM?
ADC: Digital-Eingangszweig trennen
ADC: Noise-Reduction-Modus  / CPU anhalten
ADC: 8 Bit ausreichend?
Analog-Komparator aus
Bandgap-Diode aus (Vref)
Watchdog-Timer (WDT) aus
Event-System und DMA nutzen
LCD: Wave-Form beachten / niedrige Frame-Rate / bistabiles LCD? / E-Paper?
Möglichst Hardware statt Software

Software auf Schnelligkeit optimieren (Assembler?)

  1. Mikrocontroller-Schaltungen mit niedrigem Strombedarf
  2. Energiesparen mit MCUs

Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!