Utvecklingsverktyg anpassar strömförbrukningen för MCU:er
Bidraget med av DigiKeys europeiska redaktörer
2017-06-06
En aspekt är gemensam för många enheter som utgör tingens internet (IoT): kravet på låg energiförbrukning. Att åtgärda det här behovet kräver optimering på flera nivåer i en holistisk strategi. En framgångsrik design innefattar inte bara att välja lågenergikomponenter utan även att använda programvara för att utnyttja tillgänglig batterikapacitet genom att låta komponenterna samarbeta på effektivast sätt möjligt. Till och med mindre ändringar på maskinvara och programvaruimplementering kan göra stora skillnader i den övergripande energiförbrukningen.
Hjärtat i de flesta IoT-enheter är en mikrokontroller (MCU) som är utformad för hög energieffektivitet. En typisk lågenergi-MCU inkluderar en matris av smart kringutrustning som styr I/O och väsentliga systemfunktioner för processorkärnan. En serieport (UART) kan ofta skicka och ta emot data autonomt medan programvara som körs på processorkärnan endast behöver överföra byte från den berörda bufferten när datamottagningen har slutförts. Med de länkade DMA-överföringarna som är tillgängliga på enheter som Gecko EFM32-sortimentet med MCU:er från Silicon Labs kan till och med den interaktionen minimeras. I det här fallet kan processorkärnan endast väckas för att inspektera minnesinnehållet när ett helt meddelande har tagits emot.
Genom att tillåta kringutrustning att hantera I/O kan MCU-enheten tillbringa mycket tid i viloläge, där många delar av MCU-enheten stängs av och inte drar ström. Arbetscykeln är förhållandet mellan tiden i aktivt läge och tiden i viloläge. En låg arbetscykel är viktig för batteridrivna IoT-tillämpningar eftersom viloläge endast förbrukar mikroampere medan aktivt läge normalt förbrukar många gånger mer.
En låg arbetscykel gör det möjligt för processorkärnan att vara i viloläge större delen av tiden och endast vakna för att samla in data eller kommunicera vid behov. Nyckeln till att implementera en låg arbetscykelstrategi är att förstå hur programvaran interagerar med maskinvaran. Funktioner som håller MCU:n aktiv för länge måste identifieras och därefter bytas ut eller skrivas om vid behov. Traditionellt har detta varit svårt att uppnå tidigt i utvecklingsfasen eftersom sådan identifiering förlitar sig på färdig maskinvara för testning.
Pearl Gecko starter kit och liknande utvärderingskort från Silicon Labs inkluderar en avancerad energiövervakningsfunktion (AEM). När de används i kombination med de avancerade verktygen i företagets Simplicity Studio ger de värdefulla insikter i hur mycket energi en tillämpning kräver under programvaruutvecklingscykeln. Informationen visar inte bara vilolägenas effektivitet utan även funktionsnivåoptimeringar.

Figur 1: Implementering av AEM-modulen på Silicon Labs Pearl Gecko-startsatskort.
AEM-funktionen övervakar strömmen från en onboard-LDO som drar ström från USB-bussen. Normalt används USB som stöd för felsökning och hämtning av programvara till mål-MCU:n. Figur 1 visar att när onboard-switchen har ställts in på batteridrivläge så är strömmätningar inte möjliga.
När strömbrytaren har ställts in på AEM-läge skickas data som samlats in av kortstyrenheten till Simplicity Studio-verktygen och kan visas med Energy Profiler. AEM kan mäta ström i ett stort område från 0,1 μA till 50 mA och ett dynamiskt omfång på 114 dB. Det möjliggör precis analys av inverkan av olika vilolägesstatusar samt strömförbrukning i aktivt läge.
För att mäta strömförbrukningen exakt i ett så stort område används en strömavkännande förstärkare tillsammans med ett dubbelt förstärkningssteg. Förstärkaren mäter spänningsfallet över en liten seriekopplad resistor och förstärkningssteget förstärker spänningen ytterligare med två olika förstärkningsinställningar och uppnår två strömområden. Övergången mellan de två områdena sker runt 250 μA. Digital filtrering och utjämning sker i utvärderingskortets styrenhet innan proven exporteras.
Vid varje timersteg tar AEM prov på och omvandlar strömmen och skickar den sedan tillsammans med spännings- och tidsinformation via USB till utvecklingsverktygen och genererar upp till 6250 strömprov per sekund.
Eftersom energiprofilering förlitar sig på spårdata för jämförelser måste koden som körs på MCU sammanställas för att innehålla instruktioner som skickar DWARF-data (Debug With Arbitrary Record Format). Programräknarens (PC) prov skickas till avbuggaren där de jämförs med objektfilen med felsökningsdata för att hotta den aktuella källfilen, funktionen och C-kodraden som körs på MCU. Detta gör det möjligt att koppla strömmätningar till individuella funktioner och uppgifter.
Användaren har tillgång till tre fönster när profilverktyget används i Simplicity Studio. De visar den aktuella koden, strömförbrukningskurvan och en funktionsnivåvy. Genom att klicka på valfri punkt i strömkurvan markeras en del av koden i kodlistfönstret. Det här motsvarar det faktiska kodavsnitt som körs vid det givna tillfället och med den gina nivån av strömförbrukning. Funktionslistan innehåller den totala energiförbrukningen för varje funktion och dess procentandel av den uppmätta totalen för den övergripande tillämpningen. Om användaren vill analysera profileringsinformationen senare är det möjligt att exportera data till en fil och sedan importera den för ytterligare analys.
För att illustrera användningen av strömövervakningsverktygen i Simplicity Studio ska vi titta på ett exempel av en MCU som kommunicerar över en UART-port. Ett smidigt sätt att flytta data från Geckos LEUART-buffert till huvudminnet för senare behandling är att regelbundet avfråga kringutrustningen. Om data är tillgängliga indikerar en statusflagga (LEUART_STATUS_RXDATAV) att data kan hämtas.

Figur 2: Hög strömförbrukning under längre tid med serieportavfrågning.
Att köra koden på en aktiv processorkärna ger en konstant strömförbrukning på flera milliampere. Genom att klicka på kurvan kan funktionen som orsakar urladdningen markeras. För att spara energi måste MCU undvika att använda avfrågning för att kontrollera datatillgänglighet. Detta kan uppnås genom att försätta processorn i viloläge mellan datahämtningar och använda avbrott för att väcka processorn när mottagningsbuffertdata blir tillgängliga. Strömförbrukningen sjunker betydligt i viloläge och når toppar när avbrottsrutinen (ISR) körs. Det kan visas genom att markera ISR i energiprofileringsfönstret.

Figur 3: Implementering av avbrottssvar begränsar den höga strömförbrukningen till kortare tidsperioder.
När ett datamottagningsavbrott har hanterats kan andra delar av koden visa sig förbruka mer ström än förväntat genom att hålla processorn aktiv. Genom att klicka på de relevanta funktionerna visas att överföringsfunktionerna nu är ansvariga för den extra strömförbrukningen. Trots att ett enkelt sätt att programmera en överföringsfunktion är att ställa in en {}-slinga för att vänta på att överföringen av varje byte ska slutföras håller det igång processorn längre än nödvändigt. Precis som situationen med mottagningsporten kan slingan ersättas med ett avbrott som väcker processorn efter att varje byte av överföringen slutförs. Processorn går nu till viloläge mellan varje rambyte och sänker därigenom den genomsnittliga strömförbrukningen.

Figur 4: Viloläge mellan överföringar på bytenivå sänker strömförbrukningen ytterligare.
LEUART-modulen på Gecko MCU:erna kan fungera i djupt viloläge. I det här läget är högfrekvensoscillatorerna avstängda, men lågfrekvensoscillatorerna (RC eller kristall) fortfarande körs och klockar LEUART. Att använda ett sådant läge gör att strömförbrukningen kan sjunka till mikroampere mellan ISR-hanteringar.

Figur 5: Användning av djupa vilolägen förbättrar energieffektiviteten för tillämpningar med låga arbetscykler.
Ytterligare förbättringar kan göras genom att flytta mer av bufferthanteringen till den länkade DMA-motorn och låta den ansvara för att utlösa avbrott när hela ramar har skickats eller mottagits. En sådan strategi låter processorkärnan vila längre, med strömoptimering som fokuserar på dataanalysuppgifter på funktionsnivå.
Slutsatser:
Ovanstående exempel visar vikten av strömövervaknings- och felsökningsverktyg vid optimering av energieffektivitet i MCU-tillämpningar. Istället för att vänta till slutfasen i utvecklingen med att fokusera på energioptimering kan analyser utföras under hela utvecklingsstadiet med upprepade förbättringar som är tydligt synliga för utvecklaren. Tillsammans med avancerade vilolägen och smart maskinvara som kan fungera utan processorinblandning under längre perioder kan konstruktionsteam utan problem leverera betydande förbättringar av energieffektiviteten.
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.

