Ontwikkelingstools verbeteren het stroomverbruik voor MCU's

Door Europese uitgevers

Bijgedragen door De Europese redacteurs van DigiKey

Veel apparaten die deel uit maken van het Internet of Things (IoT) hebben één aspect met elkaar gemeen: de noodzaak tot een laag energieverbruik. Om aan deze vereiste tegemoet te komen, is een holistische aanpak nodig, met optimalisatie op meerdere niveaus. Een succesvol ontwerp betekent niet alleen onderdelen kiezen die weinig stroom verbruiken, maar ook gebruik maken van software om de beschikbare batterijcapaciteit te beheren, door de onderdelen op de meest efficiënte manier te laten samenwerken. Zelfs minimale veranderingen in de implementatie van hardware en software kunnen een enorm verschil uitmaken voor het totale energieverbruik.

Het hart van de meeste IoT-apparaten is een microcontroller (MCU) die is ontworpen met het oog op hoge energie-efficiëntie. Een typische low-energy MCU bevat een reeks van 'intelligente' randapparaten die I/O en essentiële systeemfuncties regelen voor de kernprocessor. Een seriële poort (UART) kan vaak zelfstandig gegevens verzenden en ontvangen, terwijl de software die op de processorkern draait, alleen nodig is om bytes uit de juiste buffer over te dragen zodra de gegevensontvangst is voltooid. Met de gekoppelde DMA-overdracht die beschikbaar is op apparaten zoals de Gecko EFM32-serie van MCU's van Silicon Labs kan zelfs die interactie tot het minimum worden beperkt. In dit geval hoeft de processorkern alleen te ontwaken om de inhoud van het geheugen te inspecteren op het moment dat er een volledig bericht is ontvangen.

Door I/O te laten beheren door randapparatuur, kan de MCU een groot deel van zijn tijd in de slaapmodus doorbrengen. In de slaapmodus worden veel onderdelen van de MCU uitgeschakeld en verbruiken geen stroom. De arbeidscyclus, of inschakelduur, is de verhouding tussen de tijd die in de actieve modus en de tijd die in de slaapmodus wordt doorgebracht. Een lage inschakelduur is belangrijk voor IoT-toepassingen die op batterijen werken, aangezien slaapmodi hooguit een paar micro-ampère trekken, terwijl in de actieve modus gewoonlijk veel meer stroom wordt verbruikt.

Bij een lage inschakelduur kan de processorkern het grootste deel van de tijd in de slaapmodus staan en alleen ontwaken om gegevens te verzamelen of te communiceren wanneer dit nodig is. De sleutel tot het implementeren van een strategie met lage inschakelduur is begrijpen hoe de software met de hardware samenwerkt. Functies waarvoor de MCU te lang wakker moet zijn, moeten worden geïdentificeerd en indien mogelijk vervangen of herschreven. Gewoonlijk was dit in het begin van de ontwikkelingsfase moeilijk te realiseren, tests die een dergelijke identificatie toelaten zijn namelijk pas mogelijk wanneer het hardwaregedeelte klaar is.

De Pearl Gecko starterkit en gelijksoortige evaluatieborden van Silicon Labs hebben een functie die Advanced Energy Monitor (AEM) heet. Wanneer deze wordt gebruikt in combinatie met de geavanceerde tools in de Simplicity Studio van het bedrijf, biedt deze functie al gedurende de software-ontwikkelingscyclus een waardevol inzicht in hoeveel energie een toepassing nodig heeft. Deze informatie maakt niet alleen duidelijk hoe effectief slaapmodi zijn, maar ook hoe optimalisaties op functieniveau kunnen worden doorgevoerd.

Schema van de AEM-module op het bord van de Pearl Gecko starterkit van Silicon Labs

Afbeelding 1: implementatie van de AEM-module op het bord van de Pearl Gecko starterkit.

De AEM-functie bewaakt de stroom die vloeit vanaf een LDO op het bord die stroom van de USB-bus trekt. De USB zal meestal worden gebruikt om foutopsporing en het downloaden van software naar de target-MCU te ondersteunen. Zoals in afbeelding 1 te zien is, zijn stroommetingen niet mogelijk wanneer de schakelaar op het bord op de modus voor batterijvoeding is ingesteld.

Wanneer de aan/uit-schakelaar op de AEM-modus is ingesteld, worden de door de bordcontroller verzamelde gegevens doorgestuurd naar de Simplicity Studio-tools en kunnen worden weergegeven met behulp van de Energy Profiler. De AEM kan stroom meten over een bereik van maar liefst 0,1 μA tot 50 mA, een dynamisch bereik van 114 dB. Hierdoor is een nauwkeurige analyse van de impact van verschillende slaapmodus-statussen en van het stroomverbruik in de actieve modus mogelijk.

Om de stroomafname over een dergelijk breed bereik nauwkeurig te meten, wordt een stroommetende versterker gebruikt in combinatie met een dubbele versterkingstrap. De versterker meet de spanningsval over een kleine serieweerstand en de versterkingstrap versterkt deze spanning verder met twee verschillende versterkingsinstellingen, waardoor twee stroombereiken worden verkregen. De overgang tussen deze twee bereiken vindt rond de 250 μA plaats. Digitale filtering en middeling gebeuren binnen de evaluatiebordcontroller, voordat de samples worden geëxporteerd.

Bij elke tik van de timer samplet en converteert de AEM de stroom en zendt deze samen met spannings- en timing-gegevens via de USB naar de ontwikkeltools. Er worden hierbij tot 6250 stroom-samples per seconde gegenereerd.

Aangezien energieprofilering voor correlatie afhankelijk is van traceergegevens, moet de op de MCU uitgevoerde code worden gecompileerd om instructies te bevatten die DWARF-gegevens (Debug With Arbitrary Record Format) verzenden. De PC-samples (PC staat voor program counter, opdrachtteller) die naar de debugger worden gezonden, zijn gecorreleerd aan het objectbestand dat de debug-gegevens gebruikt om het relevante bronbestand, de functie en C-coderegel te vinden die op de MCU draaien. Dit maakt het mogelijk om stroommetingen aan individuele functies en taken te koppelen.

Wanneer de gebruiker het profileringstool in Simplicity Studio gebruikt, heeft hij of zij toegang tot drie vensters. Deze tonen de relevante code, de grafiek van het stroomverbruik en een functieniveauweergave. Door op een willekeurig punt van de stroomgrafiek te klikken, wordt een deel van de code in het venster met codelijsten gemarkeerd. Dit komt overeen met het feitelijke stuk van de code dat op dat specifieke moment wordt uitgevoerd, en met dat specifieke niveau van stroomverbruik. De functielijst geeft de totale energie die door elk van de functies wordt verbruikt en het percentage van het gemeten totaal voor de gehele toepassing. Als de gebruiker de profileringsinformatie op een later moment wil analyseren is het mogelijk om de gegevens naar een bestand te exporteren en vervolgens voor verdere analyse te importeren.

Om het gebruik van de stroombewakingstools van Simplicity Studio te illustreren, bekijken we het voorbeeld van een MCU die via een UART-poort communiceert. Een eenvoudige manier om gegevens uit de LEUART-buffer van de Gecko naar het hoofdgeheugen te verplaatsen voor latere verwerking, is regelmatige polling van de randapparatuur. Als er gegevens beschikbaar zijn zal een statusvlag (LEUART_STATUS_RXDATAV) aangeven dat er gegevens kunnen worden opgehaald.

Beeld van hoog lange-termijn stroomverbruik

Afbeelding 2: hoog lange-termijn stroomverbruik met seriële poort-polling.

Het uitvoeren van de code op een actieve processorkern resulteert in een constant stroomverbruik van meerdere milliampères. Door op de grafiek te klikken, kan de functie worden gemarkeerd die verantwoordelijk is voor de stroomafname. Om energie te besparen dient te worden vermeden dat de MCU polling gebruikt om beschikbaarheid van gegevens te checken. Dit kan worden bereikt door de processor tussen het ophalen van gegevens in te laten slapen en door interrupts te gebruiken om de processor te wekken wanneer ontvangstbuffergegevens beschikbaar worden. Het stroomverbruik daalt aanzienlijk in de slaapmodus en piekt wanneer de interrupt-service-routine (ISR) wordt uitgevoerd. Dit is te zien door ISR te markeren in het venster van de Energy Profiler.

Grafiek van implementatie van interrupt-service-respons

Afbeelding 3: implementatie van interrupt-service-respons beperkt hoog stroomverbruik tot kortere tijdsperiodes.

Nadat een onderbreking van de gegevensontvangst eenmaal is afgehandeld, kan echter blijken dat andere delen van de code meer stroom trekken dan verwacht door de processor actief te houden. Door op de betreffende functies te klikken, wordt duidelijk dat de overdrachtsfuncties nu verantwoordelijk zijn voor het extra stroomverbruik. Het instellen van een while{}-lus is weliswaar een eenvoudige manier om een overdrachtsfunctie in te stellen om te wachten tot iedere byte-overdracht is voltooid, maar hierdoor blijft de processor wel langer draaien dan nodig is. Net als bij de situatie met de ontvangstpoort, kan de lus worden vervangen door een interrupt die de processor na afloop van iedere byte-overdracht wekt. De processor gaat nu tussen elke framebyte in de slaapmodus, waardoor het gemiddelde stroomverbruik wordt verlaagd.

Grafiek van slaapmodus tussen byte-niveau overdrachten

Afbeelding 4: slapen tussen byte-niveau-overdrachten zorgt voor een verdere verlaging van het stroomverbruik.

De LEUART-module op de Gecko MCU's kan functioneel zijn in een diepe slaapmodus. In deze modus worden de hoogfrequente oscillators uitgeschakeld, maar blijven de laagfrequente oscillators (RC of kristal) actief en klokken de LEUART. Door gebruik te maken van een dergelijke modus kan de stroomafname tussen de ISR-afhandeling tot enkele microampères dalen.

Grafiek van diepe slaapmodi die de energie-efficiƫntie verbeteren

Afbeelding 5: gebruik van diepe slaapmodi verbetert de energie-efficiëntie voor toepassingen met lage inschakelduur.

Verdere verbeteringen kunnen worden verkregen door meer van de bufferverwerking naar de gekoppelde DMA-motor te verplaatsen, door deze verantwoordelijk te maken voor het triggeren van interrupts bij ontvangst of verzending van complete frames. Met een dergelijke strategie kan de processorkern langer slapen, met een energie-optimalisatie die gericht is op gegevensanalysetaken op functieniveau.

Conclusie:

Bovenstaand voorbeeld demonstreert het belang van stroombewakings- en debugging-tools bij het optimaliseren van de energie-efficiëntie in MCU-toepassingen. In plaats van met de energie-optimalisatie te wachten tot het einde van de ontwikkeling, kunnen er gedurende de gehele ontwikkelingsfase al analyses worden uitgevoerd, met iteratieve verbeteringen die duidelijk zichtbaar zijn voor de ontwikkelaar. In combinatie met geavanceerde slaapmodi en intelligente hardware, die gedurende lange perioden kunnen functioneren zonder ingrijpen van de processor, kunnen engineeringsteams grote verbeteringen in energie-efficiëntie realiseren.

 
DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Achtergrondinformatie over deze auteur

Europese uitgevers

Over deze uitgever

De Europese redacteurs van DigiKey