Entwicklungswerkzeuge optimieren Leistungsaufnahme von MCUs

Von Europäische Herausgeber

Zur Verfügung gestellt von Europäische Fachredakteure von DigiKey

Ein Aspekt ist vielen Geräten gemein, die das Internet der Dinge bilden: die Notwendigkeit eines niedrigen Energieverbrauchs. Dies zu erreichen, erfordert eine Optimierung auf mehreren Ebenen im Rahmen einer ganzheitlichen Strategie. Ein erfolgreicher Entwurf umfasst nicht nur die Auswahl stromsparender Komponenten, sondern auch den Einsatz von Software zur Optimierung der Nutzung der verfügbaren Batteriekapazität durch ein möglichst effizientes Zusammenspiel dieser Komponenten. Selbst kleinste Änderungen an der Hard- und Softwareimplementierung können große Unterschiede im Gesamtenergieverbrauch bewirken.

Herzstück der meisten IoT-Geräte ist ein Mikrocontroller (MCU), der auf eine hohe Energieeffizienz getrimmt ist. Eine typische energiesparende MCU umfasst eine Reihe intelligenter Peripheriegeräte, die im Auftrag des Kernprozessors Eingänge/Ausgänge sowie essenzielle Systemfunktionen steuern. Ein serieller Anschluss (UART) ist häufig in der Lage, Daten autonom zu senden und zu empfangen, während Software, die auf dem Prozessorkern läuft, nur für die Übertragung von Bytes vom entsprechenden Puffer benötigt wird, sobald der Datenempfang abgeschlossen ist. Mit der Verfügbarkeit verknüpfter DMA-Übertragungen auf Geräten wie denen der Gecko EFM32-Reihe mit MCUs von Silicon Labs lässt sich selbst diese Interaktion noch minimieren. In diesem Fall muss der Prozessorkern nur aktiviert werden, um den Inhalt des Speichers zu prüfen, sobald eine vollständige Nachricht empfangen wurde.

Wenn man Peripheriegeräten erlaubt, Eingänge/Ausgänge zu steuern, kann die MCU die meiste Zeit im Ruhemodus verharren. Viele Teile der MCU werden dann abgeschaltet und ziehen keinen Strom. Das Tastverhältnis ist das Verhältnis der Zeit im aktiven Modus zur Zeit im Ruhemodus. Ein niedriges Tastverhältnis ist für batteriebetriebene IoT-Anwendungen wichtig, weil im Ruhemodus nur Ströme im Mikroampere-Bereich fließen, während sie im aktiven Modus in der Regel um mehrere Größenordnungen höher sind.

Ein niedriges Tastverhältnis ermöglicht dem Prozessorkern, die meiste Zeit im Ruhemodus zu bleiben und nur bei Bedarf zur Erfassung von Daten oder zur Kommunikation aufzuwachen. Schlüssel für die Implementierung einer Strategie mit einem niedrigen Tastverhältnis ist das Verständnis dafür, wie die Software mit der Hardware interagiert. Funktionen, die eine zu lange Aktivierung der MCU bewirken, müssen ermittelt und dann nach Möglichkeit ersetzt oder umgeschrieben werden. Früher war das in einer frühen Entwicklungsphase nur schwer zu bewerkstelligen, weil es von einer fertigen Hardware zum Testen abhängt.

Das Pearl-Gecko-Starterkit und vergleichbare Evaluierungskarten von Silicon Labs beinhalten eine AEM-Funktion (Advanced Energy Monitor). Wird diese in Kombination mit den erweiterten Werkzeugen des Simplicity Studio derselben Firma genutzt, liefert sie während des Softwareentwicklungszyklus wertvolle Erkenntnisse darüber, wie viel Energie eine Anwendung benötigt. Diese Informationen zeigen nicht nur die Wirksamkeit von Ruhemodi, sondern auch Optimierungen auf Funktionsebene.

Schaltbild eines AEM-Moduls auf dem Board des Pearl-Gecko-Starterkits von Silicon Labs

Abbildung 1: Implementierung des AEM-Moduls auf dem Board des Pearl-Gecko-Starterkits.

Die AEM-Funktion überwacht den Strom, der von einem bordeigenen LDO fließt, der Strom vom USB-Bus zieht. In der Regel wird der USB zur Unterstützung des Debugging und des Herunterladens von Software in die Ziel-MCU genutzt. Wie in Abbildung 1 dargestellt, sind Strommessungen nicht möglich, wenn der Onboard-Schalter auf batteriebetriebenen Modus gesetzt ist.

Wenn der Schalter auf AEM-Modus steht, werden die vom Controller der Platine erfassten Daten an Simplicity-Studio-Tools weitergegeben und können mit dem Energy Profiler angezeigt werden. Der AEM kann Ströme über einen weiten Bereich von 0,1 μA bis 50 mA messen (ein Dynamikbereich von 114 dB). Das ermöglicht die präzise Analyse des Einflusses der verschiedenen Ruhemoduszustände sowie der Leistungsaufnahme im aktiven Modus.

Zur präzisen Messung der Stromaufnahme über einen so breiten Bereich wird ein Strommessverstärker zusammen mit einer Doppelverstärkungsstufe eingesetzt. Der Verstärker misst den Spannungsabfall über einem kleinen Reihenwiderstand, und die Verstärkungsstufe verstärkt diese Spannung mit zwei verschiedenen Verstärkungseinstellungen noch weiter. Das Ergebnis dessen sind zwei Strombereiche. Der Übergang zwischen diesen beiden Bereichen erfolgt bei rund 250 μA. Die digitale Filterung und Mittelung erfolgt innerhalb des Controllers der Evaluierungskarte vor dem Exportieren der Daten.

Bei jedem Takt des Taktgebers sampelt der AEM den Strom, wandelt ihn um und sendet ihn zusammen mit den Spannungs- und Zeitdaten über USB an die Entwicklungswerkzeuge. Auf diese Weise werden bis zu 6250 Strommessdaten pro Sekunde erzeugt.

Weil sich die Erstellung von Energieprofilen auf Trace-Daten für die Korrelation stützt, muss der auf der MCU ausgeführte Code so kompiliert werden, dass er Statements enthält, die DWARF-Daten (Debug With Arbitrary Record Format) senden. Die an den Debugger gesendeten PC-Samples (PC: Program Counter) werden unter Verwendung der Debug-Daten mit der Objektdatei abgeglichen, um die relevante Quelldatei, Funktion und C-Codezeile zu finden, die auf der MCU ausgeführt wird. Das ermöglicht die Verknüpfung von Strommessungen mit einzelnen Funktionen und Aufgaben.

Der Benutzer hat bei Verwendung des Profiling-Werkzeugs von Simplicity Studio Zugang zu drei Fenstern. Diese zeigen den relevanten Code, die Stromaufnahmekurve und eine Funktionsebenenansicht. Bei Klicken auf einen Punkt der Stromkurve wird ein Teil des Codes im Fenster mit der Codeauflistung hervorgehoben. Dieser entspricht dem aktuellen Codeabschnitt, der in diesem Moment ausgeführt wird, sowie der zugehörigen Stromaufnahme. Die Funktionsauflistung liefert die Gesamtstromaufnahme jeder Funktion und ihren Anteil am gemessenen Gesamtwert für die gesamte Anwendung. Wenn der Benutzer die Profiling-Informationen zu einem späteren Zeitpunkt analysieren will, muss es möglich sein, die Daten in eine Datei zu exportieren und sie dann zur späteren Analyse wieder zu importieren.

Zur Veranschaulichung des Einsatzes der Stromüberwachungswerkzeuge in Simplicity Studio schauen wir uns ein Beispiel einer MCU an, die über einen UART-Anschluss kommuniziert. Ein direkter Weg, Daten vom LEUART-Puffer des Gecko zur späteren Verarbeitung in den Hauptspeicher zu verschieben, ist die regelmäßige Abfrage des Peripheriegeräts. Wenn Daten vorliegen, gibt ein Statusindikator (LEUART_STATUS_RXDATAV) an, dass Daten abgerufen werden können.

Bild von einer langfristigen hohen Stromaufnahme

Abbildung 2: langfristige hohe Stromaufnahme bei seriellem Port-Polling.

Die Ausführung des Codes auf einem aktiven Prozessorkern resultiert in einer konstanten Stromaufnahme in Höhe von mehreren Milliampere. Durch Klicken auf die Kurve wird die Funktion hervorgehoben, die Verursacher dieser Aufnahme ist. Um Energie zu sparen, muss die MCU das Polling zur Prüfung der Verfügbarkeit von Daten verhindern. Das lässt sich erreichen, indem der Prozessor zwischen den Datenabrufen in den Ruhemodus gesetzt und mittels Interrupts aktiviert wird, wenn Empfangspufferdaten verfügbar sind. Die Stromaufnahme sinkt im Ruhemodus erheblich und steigt bei Ausführung der ISR (Interrupt Service Routine) auf einen Spitzenwert. Das lässt sich anhand der Lokalisierung der ISR im Energy-Profiler-Fenster sehen.

Diagramm der Implementierung der Interrupt-Service-Routine

Abbildung 3: Implementierung der Interrupt-Service-Routine reduziert hohe Stromaufnahme auf kürzere Zeiträume.

Sobald ein Datenempfangs-Interrupt abgearbeitet wurde, können sich jedoch andere Teile des Codes als „Stromfresser“ erweisen, indem sie den Prozessor aktiv halten. Das Klicken auf die relevanten Funktionen zeigt, dass jetzt die Übertragungsfunktionen für die zusätzliche Leistungsaufnahme verantwortlich sind. Eine Übertragungsfunktion lässt sich einfach programmieren, indem man eine while{}-Schleife einrichtet, die auf den Abschluss der Übertragung jedes einzelnen Bytes wartet. Das hält den Prozessor jedoch länger als nötig am Laufen. Vergleichbar mit der Situation beim Empfangs-Port kann die Schleife durch einen Interrupt ersetzt werden, der den Prozessor nach Abschluss jeder Übertragung aktiviert. Jetzt geht der Prozessor zwischen den einzelnen Frame-Bytes in den Ruhemodus, was die durchschnittliche Stromaufnahme senkt.

Kurve von den Ruhephasen zwischen den Übertragungen auf Byte-Ebene

Abbildung 4: Ruhephasen zwischen den Übertragungen auf Byte-Ebene reduzieren die Stromaufnahme noch weiter.

Das LEUART-Modul auf den Gecko-MCUs kann sich funktionsbezogen im Tiefschlafmodus befinden. In diesem Modus werden die HF-Oszillatoren abgeschaltet. Die Niederfrequenz-Oszillatoren (RC oder Quarz) laufen jedoch weiter und geben dem LEUART den Takt vor. Bei Verwendung eines solchen Modus kann die Stromaufnahme zwischen der ISR-Abwicklung in den Mikroampere-Bereich fallen.

Kurve von den Tiefschlafmodi und die resultierende Verbesserung der Energieeffizienz

Abbildung 5: Die Nutzung von Tiefschlafmodi verbessert die Energieeffizienz bei Anwendungen mit niedrigem Tastverhältnis.

Weitere Verbesserungen lassen sich durch Verschiebung eines größeren Teils der Pufferverarbeitung in die verknüpfte DMA Engine erzielen. Diese ist dann zuständig für die Auslösung der Interrupts nach dem Senden oder Empfangen kompletter Frames. Eine solche Strategie verlängert die Ruhephasen des Prozessorkerns. Die Optimierung der Leistungsaufnahme konzentriert sich hier auf die Datenanalyseaufgaben auf der Funktionsebene.

Fazit:

Das obige Beispiel veranschaulicht die Bedeutung von Stromüberwachungs- und Debugging-Werkzeugen bei der Optimierung der Energieeffizienz von MCU-Anwendungen. Statt mit der Energieoptimierung bis zum Ende der Entwicklung zu warten, können während des gesamten Entwicklungszyklus Analysen durchgeführt werden, die in iterativen Verbesserungen münden, die für den Entwickler klar ersichtlich sind. Im Verbund mit ausgeklügelten Ruhemodi und intelligenter Hardware, die über lange Zeiträume hinweg ohne Eingriff des Prozessors arbeiten kann, können Entwicklungsteams größere Verbesserungen in der Energieeffizienz erzielen.

 
DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Europäische Herausgeber

Über den Verlag

Europäische Fachredakteure von DigiKey