Strom unter Kontrolle Professionelle Energie-Optimierung von Embedded-Systemen

Mikrocontroller-betriebene Geräte hängen häufig an Batterien oder unterliegen anderweitigen Beschränkungen in der Energieaufnahme. Im Ringen und geringstmöglichen Stromverbrauch gilt es, Zusammenhänge herzustellen zwischen Stromverbrauch und Applikations-Software. Die zwei Entwicklungswerkzeuge ULINKpro und PowerScale stellen diese Zusammenhänge her.

Die Schlagwörter "ultra low power" und "energy harvesting" sind aus guten Gründen in aller Munde. Halbleiterhersteller stehen im harten Wettbewerb, um Energiespar-Eigenschaften ihrer Mikrocontroller zu optimieren. Die optimale Nutzung hängt allerdings stark von der Implementierung der Anwender-Software ab. Dieser Artikel beschreibt die beste Vorgehensweise zur Energie-Optimierung eines Gesamtsystems. Benutzt wird dabei das Energie-Analyse-Tool PowerScale in Verbindung mit einem Cortex-M-Mikrocontroller und der Entwicklungsumgebung MDK-ARM.

Low-Power - fast überall gefordert

Energieeffiziente Embedded-Systeme sind für viele Anwendungsbereiche wichtig, auch wenn dies auf den ersten Blick nicht offensichtlich ist. Systeme, die mechanische Komponenten ersetzen (z.B. Lichtschalter, Verbrauchsmesser oder Türschlösser), befinden sich im Dauerbetrieb und sollten daher hohe Energieeffizienz aufweisen. Im Automobil ist energieeffiziente Elektronik wichtig, um letztlich den Wunsch nach geringerem Kraftstoffverbrauch nachzukommen. Systeme, die - wie beispielsweise die Regelschaltung für einen bürstenlosen Gleichstrommotor - auf das Steigern der Energieeffizienz ausgerichtet sind, benötigen ebenfalls einen energieeffizienten Mikrocontroller, um die Gesamtbilanz zu verbessern. Hohe Energieeffizienz wird schließlich auch von batteriebetriebenen Systemen verlangt, um aus Komfort-, Umwelt- und Kostengründen eine möglichst lange Batterielebensdauer zu erreichen.

Mikrocontroller auf Basis der Cortex-M-Prozessoren sind führend bei Energieeffizienz. Durch hohe Rechenleistung können Aufgaben schneller erledigt werden, und das System befindet sich länger im Sleep Mode mit abgeschaltetem Prozessortakt. Cortex-M-Mikrocontroller bieten zusätzlich einen Deep Sleep Mode an, in dem viele Teile des Controllers von der Spannung getrennt sind. Obendrein können Takt und Spannung für die Peripherie flexibel -- während der Ausführung der Anwender-Software - angepasst werden.

Energieoptimierung der Applikation

Für die Energieoptimierung der Applikation gibt es prinzipiell zwei Entwicklungsschritte: Im ersten Schritt wird die Auswirkung der Software auf den Energieverbrauch analysiert, gegebenfalls werden Software-Anpassungen zur Energiereduzierung durchgeführt. Der zweite Schritt ist die reale unverfälschte Messung des Energieverbrauchs.

Im ersten Schritt ist die Korrelation der Stromveränderungen zu den Software-Aktivitäten wichtig. Hierbei müssen die Komponenten der Entwicklungs-Tools, der Debuggerteil und die Energiemesskomponente zusammenspielen und damit dem Entwickler einen detaillierten Einblick in das Gesamtsystem gewährleisten. Die leistungsfähigste Debugtechnik bei Cortex-M-Mikrocontrollern ist die Nutzung der Embedded Trace Macrocell (ETM). ETM erlaubt die exakte Korrelation der Programmausführung mit dem Energieverbrauch. Dabei müssen gleichzeitig der ETM Instruction Trace und der Strom-/Spannungsverlauf aufgezeichnet werden.

Nicht jeder Cortex-M-Mikrocontroller hat ETM integriert, aber jeder Cortex-M3- oder -M4-Prozessor hat einen Serial-Wire-Viewer-Ausgang (SWV), der z.B. Interrupt-Ereignisse, Code-Instrumentierungen, periodische Programm-Counter-(PC)-Werte oder Sleep-Mode-Statistiken ausgeben kann. Wenn Anfang und Ende jeder Interrupt Service Routine (ISR) signalisiert werden, ist damit die Korrelation der ISRs zum Energie-Trace einfach und exakt möglich. Für Software-Teile, die nicht zu ISRs gehören, gibt es zwei weitere Möglichkeiten: PC-Sampling und Code-Instrumentierung. Bei PC-Sampling wird der aktuelle Programmzähler in periodischen Zeitabständen ausgegeben; damit ist eine grobe Zuordnung des Energie-Traces zur Programmausführung möglich. Besser und exakter ist die Ausgabe von Software-Ereignissen über Code-Instrumentierung. So können verschiede Ereignisse signalisiert werden, beispielsweise Aktivieren der PLL, An- oder Abschalten einer Peripherie (z.B. ADC). Die Zuordnung der Ereignisse zu den Stromverbrauchsänderungen wird damit transparent. Eine weitere Möglichkeit ist das Signalisieren eines Events durch Umschalten eines freien IO-Pins. Hier ist zwar keine Unterscheidung der Ereignistypen möglich, jedoch wird dies aufgrund der Einfachheit oft genutzt.

Ist im ersten Entwicklungsschritt die Software bezüglich des Energieverbrauchs optimiert, folgt der zweite Schritt - die exakte unverfälschte Energiemessung. Dies ist nötig, da der Stromverbrauch durch Debug- und Trace-Betrieb verändert wird. Wenn die Debug-Unit des Cortex-M-Mikrocontrollers aktiviert ist, kann der Sleep Mode nicht vollständig aktiviert werden, da sonst kein Debugging mehr möglich ist. Aber auch die zusätzliche Strombelastung durch den Debug-Adapter selbst verfälscht den Energiebedarf. Eine Trennung der beiden Systeme zur Debug/Trace-Aufzeichung und Strom-/Spannungs-Erfassung ist deshalb unbedingt erforderlich. Kombinierte Systeme können niemals den Strombedarf korrekt erfassen, und wenn der Energieverbrauch ein Schlüsselkriterium ist, der bei jeder Software-Version gemessen und dokumentiert werden muss, so ist dies nur mit getrennten Systemen exakt möglich.