Gli strumenti di sviluppo ottimizzano il consumo energetico per gli MCU

Di Redattori europei

Contributo di Editori europei di DigiKey

Molti dispositivi che costituiranno l'Internet delle cose (IoT) sono accomunati da un aspetto: il requisito di basso consumo energetico. Per soddisfare questa esigenza è necessario ottimizzare a più livelli, nel quadro di una strategia olistica. Un progetto di successo comporta non solo la scelta di componenti a bassa potenza, ma anche l'uso di software per sfruttare la capacità disponibile della batteria facendo in modo che quei componenti lavorino insieme nel modo più efficiente. Persino cambiamenti impercettibili nell'implementazione hardware e software possono fare grandi differenze nell'uso complessivo di energia.

Il cuore della maggior parte dei dispositivi IoT è rappresentato da un microcontroller (MCU) progettato per l'alta efficienza energetica. Un tipico MCU a basso consumo include una serie di periferiche intelligenti che controllano I/O e le funzioni essenziali del sistema per conto del processore core. Spesso una porta seriale (UART) sarà in grado di inviare e ricevere i dati autonomamente, mentre al software in esecuzione nel core del processore viene richiesto solo di trasferire i byte dal buffer appropriato una volta terminato il ricevimento dei dati. Con trasferimenti del DMA collegato disponibili su dispositivi quali la gamma Gecko EFM32 di MCU di Silicon Labs, anche quell'interazione può essere ridotta al minimo. In questo caso, il core del processore deve solo riattivarsi per ispezionare il contenuto della memoria, una volta ricevuto l'intero messaggio.

Consentendo alle periferiche di gestire l'I/O, l'MCU può trascorrere molto del suo tempo in modalità di sospensione, ovvero molte sue parti saranno spente e non assorbiranno energia. Il ciclo di lavoro è il rapporto tra il tempo speso in modalità attiva e quello speso a riposo. Un ciclo di lavoro leggero è importante per applicazioni IoT alimentate a batteria, dato che le modalità di sospensione assorbono solo microampere, mentre quella attiva in genere assorbe diversi ordini di grandezza in più.

Un ciclo di lavoro leggero permette al core del processore di essere dormiente per la maggior parte del tempo, riattivandosi solo per raccogliere dati o per comunicare quando necessario. La chiave per implementare una strategia di ciclo di lavoro leggero è capire come il software interagisce con l'hardware. Occorre identificare le funzioni che tengono l'MCU sveglio troppo a lungo e sostituirle o riscriverle se possibile. Tradizionalmente era difficile ottenere questi risultati nelle prime fasi di sviluppo, perché questa identificazione si basa su hardware completo per i test.

Lo starter kit Pearl Gecko e schede di valutazione simili di Silicon Labs includono una funzione Advanced Energy Monitor (AEM). Quando usato assieme agli avanzati strumenti di Simplicity Studio della società, offre informazioni preziose sull'energia richiesta da un'applicazione già durante il ciclo di sviluppo del software. Le informazioni non solo mostrano l'efficacia delle modalità di sospensione, ma anche le ottimizzazioni a livello di funzione.

Schema del modulo AEM nella scheda dello starter kit Pearl Gecko di Silicon Labs

Figura 1: Implementazione del modulo AEM nella scheda dello starter kit Pearl Gecko.

La funzione AEM monitora il flusso di corrente da un LDO su scheda che assorbe alimentazione dal bus USB. In genere, l'USB viene usato per supportare il debugging e il download del software nell'MCU target. Come illustrato nella Figura 1, quando l'interruttore integrato è impostato sulla modalità operativa a batteria, le misurazioni della corrente non sono possibili.

Quando l'interruttore di alimentazione è impostato sulla modalità AEM, i dati raccolti dal controller della scheda vengono trasmessi agli strumenti di Simplicity Studio e possono essere visualizzati tramite Energy Profiler. AEM può misurare correnti tra 0,1 μA e 50 mA, una gamma dinamica di 114 dB. Questo consente un'analisi precisa dell'impatto dei diversi stati della modalità di sospensione, oltre che del consumo della modalità attiva.

Per misurare accuratamente l'assorbimento di corrente su una gamma così ampia, assieme a un doppio stadio di guadagno viene impiegato un amplificatore con rilevamento di corrente. L'amplificatore misura la caduta di tensione su un piccolo resistore in serie e lo stadio di guadagno amplifica ulteriormente questa tensione con due diverse impostazioni del guadagno, ottenendo due intervalli di corrente. La transizione tra questi due intervalli si ha attorno ai 250 μA. Il filtraggio digitale e il calcolo della media vengono fatti nel controller della scheda di valutazione prima che i campioni vengano esportati.

A ogni tic del timer, AEM campiona e converte la corrente e la invia, assieme alle informazioni su tensione e temporizzazione tramite USB, agli strumenti di sviluppo, generando fino a 6250 campioni di corrente al secondo.

Dato che il profilo energetico si basa sui dati di traccia per la correlazione, il codice in esecuzione nell'MCU deve essere compilato per contenere istruzioni che inviano dati DWARF (Debug With Arbitrary Record Format). I campioni del contatore di programma (PC) inviati al debugger vengono correlati con il file oggetto usando i dati di debug per trovare il file sorgente, la funzione e la linea di codice C pertinenti in esecuzione nell'MCU. Questo consente di correlare le misurazioni di corrente a funzioni e attività singole.

L'utente ha accesso a tre finestre, quando usa lo strumento di creazione di profili all'interno di Simplicity Studio. Queste finestre mostrano il codice pertinente, il grafico del consumo di corrente e una vista a livello di funzione. Facendo clic su un punto qualsiasi sul il grafico della corrente, una parte del codice nella finestra del listato sarà evidenziata. Questa parte corrisponde al pezzo effettivo di codice in esecuzione in quel determinato momento e con quel determinato livello di consumo di corrente. L'elenco delle funzioni mostra il consumo totale di energia di ognuna di esse e la relativa percentuale rispetto al totale misurato per l'applicazione complessiva. Se l'utente vuole analizzare le informazioni del profilo in un secondo momento, è possibile esportare i dati in un file e poi reimportarli per un'ulteriore analisi.

Per illustrare l'uso degli strumenti di monitoraggio della corrente disponibili in Simplicity Studio, daremo un'occhiata all'esempio di un MCU che comunica su una porta UART. Un modo semplice di trasferire i dati dal buffer LEUART di Gecko nella memoria principale per una successiva elaborazione consiste nell'interrogare regolarmente la periferica. Se sono disponibili dei dati, un flag di stato (LEUART_STATUS_RXDATAV) indicherà che possono essere recuperati.

Immagine di consumo energetico elevato a lungo termine

Figura 2: Consumo energetico elevato a lungo termine con polling della porta seriale.

L'esecuzione del codice sul core di un processore attivo comporta un consumo costante di corrente di diversi milliampere. Facendo clic sul grafico, la funzione che sta causando il drain può essere evidenziata. Per risparmiare energia, l'MCU deve evitare di usare il polling per controllare la disponibilità di dati. A tale fine, mettere il processore a riposo tra un'acquisizione e l'altra di dati e usare gli interrupt per risvegliarlo quando si rendono disponibili dati nel buffer di ricezione. Il consumo di corrente scende in modo significativo durante l'inattività e ha dei picchi mentre l'Interrupt Service Routine (ISR) è in esecuzione. Lo si può vedere individuando l'ISR nella finestra Energy Profiler.

Grafico dell'implementazione della risposta del servizio di interrupt

Figura 3: L'implementazione della risposta del servizio di interrupt riduce gli elevati consumi di corrente a periodi di tempo più brevi.

Tuttavia, una volta risolto il problema dell'interrupt dei dati di ricezione, altre parti del codice potrebbero risultare più energivore del previsto mantenendo il processore attivo. Un clic sulle funzioni pertinenti mostra che ora le funzioni di trasmissione sono responsabili del consumo energetico extra. Anche se un modo semplice di programmare una funzione di trasmissione consiste nell'impostare un loop while{} che attenda la fine della trasmissione di ogni byte, questo manterrà il processore in esecuzione più a lungo del necessario. Analogamente alla situazione con la porta di ricezione, il loop può essere sostituito da un interrupt che risveglia il processore al termine della trasmissione di ogni byte. Il processore ora va in modalità di sospensione tra ogni byte del frame, riducendo così il consumo medio di corrente.

Grafico della sospensione tra le trasmissioni a livello di byte

Figura 4: La sospensione tra le trasmissioni a livello di byte riduce ulteriormente il consumo energetico.

Il modulo LEUART negli MCU Gecko può essere funzionale in una modalità di sospensione profonda. In questa modalità, gli oscillatori ad alta frequenza sono spenti ma quelli a bassa frequenza (RC o a cristalli) sono ancora in esecuzione e temporizzano LEUART. L'uso di questa modalità consente di ridurre l'assorbimento di corrente fino al livello di microampere, tra un'ISR e l'altra.

Grafico delle modalità di sospensione profonda che migliorano l'efficienza energetica

Figura 5: L'uso delle modalità di sospensione profonda migliora l'efficienza energetica per applicazioni con ciclo di lavoro leggero.

Ulteriori miglioramenti possono essere realizzati spostando una parte maggiore della gestione del buffer sul motore DMA collegato, facendolo diventare responsabile dell'attivazione degli interrupt una volta che gli interi frame sono stati inviati o ricevuti. Questa strategia permette al core del processore di rimanere inattivo più a lungo, con un'ottimizzazione dell'energia, focalizzandosi sulle attività di analisi dei dati a livello di funzione.

Conclusione:

L'esempio sopra dimostra l'importanza degli strumenti di monitoraggio e debug della corrente nell'ottimizzare l'efficienza delle applicazioni MCU. Invece di attendere la fine dello sviluppo per eseguire l'ottimizzazione energetica, è possibile eseguire analisi lungo l'intera fase di sviluppo, rendendo chiaramente visibili allo sviluppatore i vari miglioramenti. Oltre a modalità di sospensione avanzate e ad hardware intelligente in grado di funzionare senza l'intervento del processore per lunghi periodi, i team di ingegneri possono produrre rapidamente importanti miglioramenti dell'efficienza energetica.

 
DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Redattori europei

Informazioni su questo editore

Editori europei di DigiKey