Ridurre i consumi di potenza dei micro a 8 bit

MICROCONTROLLORI –

I progetti che utilizzano microcontrollori sono spesso alimentati tramite batterie o linee di segnale che vanno a sostituire componenti passivi o meccanici. In tali applicazioni è necessario garantire consumi minimi e disponibilità di potenza sufficiente a soddisfare le specifiche del prodotto.

La progettazione a basso consumo comporta numerosi vantaggi tra cui la possibilità di utilizzare alimentatori più piccoli e batterie meno costose, nonché di realizzare prodotti che possono essere alimentati dalle linee di segnale (come ad esempio i fili dell’allarme antincendio), con riflessi favorevoli sul costo del prodotto finale. Sebbene il consumo di potenza sia dato dal prodotto tra la tensione di funzionamento e il consumo di corrente, quest’ultimo è solitamente il solo parametro preso in considerazione nel momento in cui si descrivono le caratteristiche relative alla dissipazione di un chip. Si tratta di un errore perché la diminuzione della tensione operativa comporta una riduzione del consumo di corrente e quindi dell’assorbimento di potenza complessivo. Poiché il consumo di corrente aumenta direttamente con la frequenza, il fatto di riuscire a mantenere il clock di sistema a un valore più basso possibile rappresenta un elemento critico per limitare i consumi. La frequenza di clock è influenzata da un certo numero di fattori quali i circuiti posizionati nelle vicinanze dei microcontrollore e il set di periferiche, l’architettura e il set di istruzioni. Sebbene i microcontrollori in architettura Risc tipicamente eseguano un’istruzione per ciclo di clock, alcune architetture prevedono la suddivisione del clock, un’operazione del tutto simile a quella compiuta dalle architetture Cisc prima di inviare i dati alla Cpu. Una situazione di questo tipo genera confusione circa il valore di frequenza richiesta realmente per l’esecuzione dell’applicazione considerata. I progettisti devono porre molta attenzione all’architettura del set di istruzioni quando esaminano i numeri relativi al consumo di corrente contenuti nel datasheet di un microcontrollore. Parecchi datasheet forniscono le cifre dei consumi di un microcontrollori con le periferiche non in funzione. La corrente supplementare assorbita dalle periferiche deve essere presa in considerazione in quanto le Mcu sono dotate di periferiche e il loro contributo all’assorbimento di potenza può risultare significativo. Un altro elemento da valutare è la temperatura. Poiché temperature maggiori comportano consumi più elevati, i progettisti devono sempre prendere in considerazione le cifre relative ai consumi alle temperature previste nel caso peggiore.

Modalità attiva e sleep
In parecchie applicazioni, il processore non è in funzione su base continuativa e le periferiche restano nello stato di Idle (ovvero in attesa di comandi) per gran parte del tempo. E’ possibile ridurre il consumo di potenza complessivo sfruttando le diverse modalità di “sleep” disponibili su ciascun processore. Le modalità di sleep più comuni sono Pwd (Power Down), PS (Power Save) e Idle. Nella modalità Power Down è previsto l’arresto del funzionamento di tutti i circuiti, compresa la sorgente di clock. La seconda modalità prevede invece che rimanga attivo solamente un clock a 32 MHz che opera sotto il comando di un quarzo per tener conto del trascorrere del tempo. La modalità Idle si può considerare una sorta di modalità di “sleep” dove solamente una parte del dispositivo è inattivo mentre i circuiti principali del microcontrollore sono in funzione. La presenza di molteplici modalità di “sleep” garantisce la flessibilità necessaria per sospendere il funzionamento di qualsiasi porzione del microcontrollore che non risulti assolutamente necessaria all’espletamento della funzione corrente. Il risparmio di potenza ottenibile dipende dalla modalità che si sta utilizzando.
Per esempio in presenza di una tensione di alimentazione di 1,8 V e di una frequenza di funzionamento di 1 MHz a 25 °C, il controllore ATmega165P AVR di Atmel consuma 340μA (modalità attiva), 150 μA (modalità Idle), 0,65 μA (modalità Power Save) e 0,1 μA (modalità Power Down). Poiché un microcontrollore può trascorrere molto tempo senza svolgere alcuna attività, è importante prendere in considerazione il consumo di potenza sia nelle modalità “sleep” sia in quella attiva. Parecchi progettisti utilizzano un bilancio di potenza (power budget) per determinare il consumo di potenza medio e calcolare i requisiti della batteria. Sebbene si ponga parecchia attenzione ai consumi in modalità attiva, l’elemento da tenere nella massima considerazione è rappresentato dal duty cycle tra le diverse modalità attive e di “sleep”. In applicazioni quali termostati, sistemi di apertura senza chiavi o apparati di sicurezza il processore trascorre la maggior parte del tempo in attesa. Per applicazioni di questo tipo la modalità di “sleep” può essere quella che contribuisce in misura maggiore alla dissipazione e quindi rappresentare il parametro più importante da tenere in considerazione.

Ridurre i consumi in sleep mode
I moderni microcontrollori sono realizzati in tecnologia Cmos digitale che, almeno in teoria, consuma potenza nel momento in cui i segnali logici o di clock stanno cambiando stato. Un segnale commuta (toggle) quando avviene una transizione da “0” a “1” o viceversa. Di conseguenza, sempre dal punto di vista teorico, il consumo di corrente in modalità di “sleep” dovrebbe essere nullo. In realtà la situazione è più complessa. Sebbene il consumo di potenza in modalità sleep sia prossimo a zero, le perdite di corrente e le periferiche che rimangono attive possono contribuire in maniera significativa ai consumi.

Corrente di perdita
La temperatura, la tensione di alimentazione e la tecnologia di processo sono fattori che influenzano la corrente di perdita. Alcuni produttori di microcontrollori sfruttano processi di tipo proprietario espressamente sviluppato per il funzionamento a basso consumo frutto di anni di studi e ricerche. Processi di questo tipo possono garantire correnti di “sleep” inferiori a 10 nA grazie alle tecniche di ottimizzazione dei consumi adottate e alla capacità di operare a una tensione esattamente pari a 1,8 V. Infatti, alcuni microcontrollori che dichiarano una tensione di funzionamento di 1,8 V devono operare a tensioni fino a 2,2 V per far funzionare correttamente i moduli analogici o effettuare operazioni di scrittura in una memoria flash.

Periferiche attive
Gli elementi che contribuiscono in misura maggiore al consumo di potenza in modalità “sleep” sono le periferiche attive. L’abilitazione di moduli analogici o digitali interni può provocare un sensibile incremento del consumo di corrente complessivo che risulta difficile da valutare. Mentre nel caso di microcontrollori corredati da una documentazione completa e accurata questo consumo di corrente supplementare viene riportato nei datasheet, per altri controllori questo consumo viene considerato nullo. Si tratta di un’affermazione che solo raramente trova riscontro nella realtà, specialmente nel caso in cui si abbia a che fare con funzioni di natura analogica. Qualora questa affermazione risultasse vera, essa spesso è sinonimo di scarse prestazioni. Il consumo di potenza nelle logiche digitale è imputabile principalmente alla frequenza di commutazione, al carico capacitivo e alla tensione di commutazione (toggling frequency). D’altro canto, il consumo di potenza nei moduli analogici è statico. In questi moduli risulta spesso necessario ricercare un compromesso tra consumo di potenza e affidabilità, accuratezza, velocità e tempi di avviamento ridotti. La diminuzione del consumo di potenza spesso ha un impatto negativo sulla qualità del modulo analogico. Il modulo analogico sicuramente più importante dal punto di vista dei consumi durante la modalità “sleep” è il rilevatore di fenomeni di brown-out o Bod (Brown-Out Detector). Un dispositivo di questo tipo protegge il microcontrollore quando la tensione di alimentazione scende al di sotto della soglia operativa resettando il dispositivo. In questo modo il microcontrollore rimane in uno stato definito quando Vcc è al di sotto della propria soglia operativa. Il modulo Bod non è importante per il microcontrollore quando si trova in “sleep” mode, la lo è quando il micro entra nella fase di “wake-up” (ovvero quando si riattiva). Per questo motivo parecchi microcontrollori mantengono il modulo Bod attivo nella modalità di “sleep” ed esso contribuisce in modo sostanziale al consumo di potenza in tale modalità. Vi sono due modi per affrontare il problema legato al consumo di potenza del modulo Bod in modalità “sleep”: realizzare un modulo a consumo nullo oppure spegnere completamente il Bod. Poiché il modulo Bod deve essere in funzione quando il controllore si riattiva, la realizzazione di un modulo a consumo nullo può sembrare l’alternativa migliore. La riduzione della potenza può rendere il modulo molto lento e la sua risposta in presenza di una tensione di alimentazione che si trovi al di fuori dei valori prefissati potrebbe risultare troppo lenta. Siccome il microcontrollore in modalità “sleep” non fa girare alcun codice e neppure effettua scritture o cancellazioni nelle memorie flash o Eeprom, il modulo non è necessario. In ogni caso esso deve essere in funzione nel momento in cui il controllore riprende l’attività. Per risolvere questo problema è necessario che il microcontrollore arresti l’attività del modulo Bod quando esso entra in modalità “sleep” e lo riattivi immediatamente prima di uscire da questa modalità. Questo tipo di approccio assicura che il modulo sia in funzione quando è necessario senza alcuna penalizzazione in termini di consumi in modalità “sleep”.

Oscillatori a basso consumo e a 32 kHz: un confronto
In numerose applicazioni il tempo trascorso in modalità attiva è irrilevante rispetto a quello speso in modalità di risparmio energetico (Power Save) quando tutti i circuiti sono disattivati ad eccezione dell’Rtc (Real Time Clock) e del rilevatore di brown-out. In applicazioni di questo tipo la potenza consumata in modalità Power Save (somma della potenza dissipata dalla modalità Pwd, dal modulo Bod e dall’oscillatore a 32 MHz) rappresenta il contributo più significativo alla dissipazione complessiva. Di conseguenza, la diminuzione del consumo di corrente dell’oscillatore a 32 kHz contribuisce in modo sensibile alla riduzione del consumo di potenza del sistema complessivo. I progettisti dovrebbero essere molto attenti nella valutazione della corrente consumata quando l’oscillatore al quarzo è in funzione. In generale esistono due possibilità di temporizzare la ripresa dell’attività a partire da una modalità “deep sleep”: mediante un Rtc o un oscillatore a bassissimo consumo o Vlo (Very Low-power Oscillator). La differenza tra queste due metodologie riguarda principalmente l’accuratezza. Con un Rtc la temporizzazione risulta molto precisa grazie all’accuratezza dell’oscillatore a 32 kHz mentre un Vlo non risulta particolarmente preciso e quindi inadatto quanto sono presenti funzioni critiche dal punto di vista della temporizzazione.

Ridurre i consumi mediante la tecnica di clock gating
In teoria, i circuiti logici digitali Cmos consumano potenza solamente nel momento in cui i segnali logici o il clock commutano. Un segnale è commutato quando è soggetto a una transizione da “0” a “1” o da “1” a “0”. Quando tutti i segnali digitali sono statici, come accade nella modalità “Power Down” il consumo è imputabile alla corrente di perdita e a quella utilizzata per l’abilitazione dei moduli analogici. Il consumo di potenza in una Mcu può essere calcolata mediante la seguente equazione:

P = ½ * FToggle * CLoad * VDD2

Dove FToggle è la frequenza di commutazione (toggling frequency), CLoad è il carico capacitivo e VDD2 la tensione di alimentazione. A questo si dovrebbe aggiungere la corrente di perdita della logica digitale e la corrente consumata dai moduli analogici in modalità idle ma il loro contributo è relativamente modesto. La frequenza di commutazione per un dato dispositivo può essere considerata come il numero di gate che stanno commutando per espletare un determinato compito. Questa termine può essere ridotto minimizzando sia il numero di gate sia il numero di volte che ciascun gate deve commutare. La tecnica denominata “clock gating” (disabilitazione del clock nei circuiti non attivi) viene utilizzata per ridurre la frequenza di commutazione. Un segnale di clock può essere arrestato utilizzando un elemento di disabilitazione (gating). Ciascuna distribuzione del clock o dominio di clock disattivato resta “congelato” e non consuma potenza. L’elemento di gating deve poter gestire qualsiasi problematiche legate alla presenza di spike sul segnale di clock. Ad esempio i microcontrollori della serie AVR di Atmel prevedono tre livelli di clock gating principali. Queste e le altre tecniche menzionate nel presente articolo sono utilizzate dalla tecnologia picoPower messa a punto dalla società che viene usata per la realizzazione dei microcontrollori della linea AVR. Il primo livello di clock gating è rappresentato dalle modalità di “sleep”. Esse disabilitano la distribuzione del clock relativamente a gruppi di funzioni in modo da consentire di ottenere differenti livelli di funzionalità e “sleep”.

  • La modalità Idle disabilita il dominio di clock della Cpu e quello della flash mentre le periferiche e il sistema di interrupt continuano a funzionare
  • La modalità di riduzione del rumore dell’Adc consente il funzionamento dell’Adc mentre la maggior parte dei domini di clock delle periferiche, oltre al dominio di clock della Cpu e delle memoria flash sono disabilitati.
  •  La modalità “Power Down” disabilità tutti i domini di clock dei micro AVR e sono permesse solamente operazioni asincrone abilitate. In questa modalità anche l’oscillatore esterno è inattivo.
  • La modalità “Power save” è identica a quella “Power Down” ad eccezione del fatto che il timer asincrono può funzionare quando è abilitato.
  • La modalità “Standby” è identica a quella “Power Down” ad eccezione del fatto che l’oscillatore principale viene mantenuto in funzione.
  • La modalità “Extended Standby” è identica a quella “Power Down” ad eccezione del fatto che l’oscillatore principale viene mantenuto in funzione.

Il tempo di risposta per il risveglio dalla modalità “sleep” è di soli 6 cicli di clock quando come sorgente di clock viene scelto l’oscillatore RC interno o un clock esterno. Il consumo di potenza durante la sessione di “wake up” è inferiore rispetto a quello in modalità Idle. Ciò significa che il microcontrollore Avr può risvegliarsi dalla modalità di “sleep” e rientrare in questa modalità a fronte di un consumo di energia estremamente ridotto e trascorrere un periodo di tempo molto breve nelle fasi di risveglio e attiva.
Il secondo livello di clock gating è rappresentato dal registro Prr (Power Reduction Register). Parecchi moduli periferici sono impiegati per un breve periodo di tempo e non vengono utilizzati affatto. Il Power Reduction Register contiene bit di controllo per disabilitare i moduli periferici inutilizzati. L’intera distribuzione del clock per questi moduli è disabilitata. Si tratta di un modo più efficace rispetto alla disabilitazione del modulo mediante il proprio bit di abilitazione poiché i registri di I/O dei moduli sono disabilitati dal Prr. Quest’ultimo è controllato via software per consentire agli utenti di attivare e disattivare i moduli periferici in ogni momento. Lo stato attuale è congelato e tutti i registri di I/O sono inaccessibili quando il modulo periferico è disabilitato dal Prr. Quando nuovamente abilitato, il modulo periferico riprende la propria attività a partire dal medesimo stato in cui si trovava prima del processo di disabilitazione. La disabilitazione di un modulo periferico si traduce in una riduzione del consumo di potenza totale compresa tra il 5 e il 10% in modalità attiva e tra il 10 e il 20% in modalità Idle. Nei progetti che non prevedono l’adozione di tecniche di clock gating l’aggiornamento di tutti i registri si verifica a ogni ciclo di clock. Se non è avvenuto alcun cambiamento, il registro viene aggiornato al suo stato precedente, consumando inutilmente potenza. Il clock gating automatico (o clock gating a più livelli) abilita il clock solamente nel momento in cui è richiesto un aggiornamento (ovvero quando cambia un valore). Invece che aggiornare il registro al suo stato precedente, il clock relativo a quel registro viene disabilitato.

Pubblica i tuoi commenti