In questo articolo affronteremo delle considerazioni di base sui microcontrollori, volte a confrontare e scegliere tra i diversi modelli disponibili sul mercato. Il risparmio energetico è diventato ormai uno dei requisiti essenziali in molte applicazioni, sia nell’ottica di una riduzione dei consumi che consenta di realizzare applicazioni eco-sostenibili sia per l’impiego in sistemi ed apparecchiature battery-powered che stanno trovando sempre maggiore impiego in diversi campi, da quello mobile a quello medicale, fino alle reti di sensori wireless ed al remote monitoring.
Uno dei settori dell’elettronica dove l’attenzione al risparmio energetico è sentita in maniera pressante è quello dei microcontrollori. Tutte le principali case produttrici dispongono a catalogo di soluzioni low power. Scegliere quella più adatta alla propria applicazione può non sempre essere facile. Di seguito proviamo a passare in rassegna i fattori che determinano il consumo di una MCU (MicroController Unit) e le considerazioni principali da tenere d’occhio nel confronto tra dispositivi di case e famiglie diverse.
CONSUMO IN STAND-BY
Quando si considerano applicazioni battery-powered o in generale low power, il primo parametro da tenere in considerazione non è il consumo attivo della MCU ma quello in stand-by, dal momento che nella maggior parte dei casi, il sistema sarà inattivo per la maggior parte del tempo, risvegliandosi periodicamente o in corrispondenza dell’occorrenza di definiti eventi. Tipicamente, considerando il rapporto della potenza dissipata in condizioni di stand-by ed in funzionamento normale, si trova che il consumo di potenza in stand-by incide sul consumo complessivo per una percentuale che varia tra il 5% e fino all'85% quando il tempo di inattività varia dal 90% al 99.9%, ovvero quando il rapporto tra tempo attivo e tempo inattivo passa da 1:10 a 1:1000. Nelle condizioni in cui la potenza dissipata in stand-by pesa maggiormente, un errore nella stima di questa o, da altro punto di vista, una differenza di consumo in stand-by tra diversi dispositivi, comporta una differenza nella durata della batteria fino all'8.5%, il che si può tradurre in differenze di autonomia del sistema dell’ordine dei mesi o più. Un primo aspetto che incide sicuramente sulla potenza in stand-by è la tecnologia costruttiva in cui è realizzato il dispositivo. Questa determina, infatti, direttamente la corrente di leakage del dispositivo. Ad esempio, un tipico MCU in package a 20 pin che sia caratterizzato da corrente di leakage di 100 nA per pin può arrivare ad assorbire fino a 2 uA di corrente in condizioni di stand-by per i soli effetti di leakage. L’impiego di una tecnologia costruttiva a 0.25 μm o 0.35 μm consente di ridurre tali correnti; di contro, le tecnologie di nodo più recenti, come ad esempio quella a 0.18 μm o inferiori, soffrono di un incremento di questo parametro (nella pratica poi compensabile mediante tecniche mixed signals di controllo ultra-low-power), ma di contro consentono di migliorare le prestazioni e ridurre, nel contempo, tensione di core e potenza attiva dissipata. Oltre alla tecnologia costruttiva, un altro parametro che incide significativamente sulla potenza in stand-by di un MCU è il numero di periferiche che sono ancora alimentate in questo stato. In applicazioni "temporizzate", come quelle di remote sensing, ad esempio, è necessario che il Real Time Clock sia sempre attivo, così da poter risvegliare autonomamente il microcontrollore dal suo stato di ibernazione. In altri casi il risveglio può avvenire mediante comunicazione su porta dedicata (SPI, CAN o simili) o a seguito di interrupt esterno (il che richiede che l’interrupt controller sia in funzione), ed il consumo attivo di tali periferiche deve quindi essere incluso in quello di stand-by del MCU. In molti casi è richiesto che il sistema sia in grado di mantenere validi i dati in memoria interna (data retention) e, quasi sempre, è necessario che continuino a funzionare i circuiti di power monitoring (Brown Out Reset e Supply Voltage Supervisor). Nel confrontare la potenza di stand-by indicata nel datasheet da diversi produttori è, quindi, opportuno sincerarsi sempre delle condizioni nelle quali questa è specificata, dal momento che potrebbero variare da costruttore a costruttore ed anche da dispositivo a dispositivo.
CONSUMO ATTIVO
Anche se, come abbiamo notato in precedenza, nelle applicazioni tipiche low energy o battery powered il consumo attivo di un microcontrollore non è il parametro che pesa maggiormente sull’assorbimento medio, è chiaro che è pur sempre un aspetto di rilievo, soprattutto nella misura in cui, ad esempio, una riduzione dell’assorbimento in condizioni attive permetterebbe "facilmente" di estendere il tempo di "disponibilità" del sistema a parità di potenza media dissipata. Il consumo attivo dipende proporzionalmente dal prodotto della frequenza di clock per il quadrato della tensione di alimentazione o, in altro modo, è dato dal prodotto della tensione di lavoro per quella che è definita "corrente dinamica" (ovvero, a sua volta, il prodotto della tensione di lavoro per la frequenza di clock, moltiplicato per la capacità del circuito). Tipicamente la corrente dinamica viene fornita normalizzata alla frequenza di 1 MHz e riferita ad una certa tensione di lavoro. Bisogna tenerne conto nel confrontare le specifiche di diversi dispositivi. E’ chiaro, infatti, che se due dispositivi sono specificati per la stessa corrente dinamica ma a tensioni di lavoro che sono per l’uno il doppio dell’altro, a parità di tensione di funzionamento, la dissipazione di potenza del primo sarà metà di quella del secondo. Ma bisogna tenerne conto anche per calcolare correttamente la potenza dissipata in condizioni attive nell’arco di vita del sistema, dal momento che la corrente attiva è specificata nelle condizioni tipiche di lavoro del dispositivo. In alimentazione a batteria, infatti, tale tensione di lavoro varia da un massimo (all’inizio di vita della batteria) ad un minimo (alla fine). Così, all’inizio, a tensione più elevata, il consumo attivo sarà maggiore, dal momento che è maggiore la corrente dinamica. Per fare un esempio, se il dispositivo è specificato per una corrente di 160 μA a 1.8 V, consumerà in queste condizioni circa 302 μW. Se però inizialmente la tensione di batteria è di 3.2 V, la corrente dinamica sarà di 284 μA e quindi il consumo di potenza salirà a 908 μW. Proprio per questo, del resto, molti microcontrollori dispongono di regolatori LDO integrati che consentono di regolare la tensione interna di lavoro a partire dalla tensione applicata in ingresso. In questo modo la corrente dinamica rimarrà costante al valore specificato nell’intero intervallo di tensione esterna di lavoro; all’interno di questo varierà soltanto la potenza dissipata da LDO per la regolazione di tensione ma tale dissipazione di potenza incide decisamente meno sulla potenza attiva del microcontrollore (rispetto al caso in cui si modifica la corrente dinamica stessa). Altra cosa da tenere ben presente è che la corrente dinamica dipende, come dicevamo, dalla frequenza di lavoro. Questa si riferisce però alla frequenza interna, che può essere diversa dalla frequenza dell’oscillatore in ingresso, in particolare nei casi in cui il microcontrollore impiega un PLL interno per derivare i vari clock per la CPU e le periferiche. E’ piuttosto ovvio che il consumo di potenza attivo dipende anche dalla capacità di elaborazione del microcontrollore. Un dispositivo che abbia una velocità di esecuzione più elevata, in termini di numero di istruzioni per secondo, ad esempio, a parità di corrente assorbita avrà un consumo complessivo in fase attiva minore di quello di un dispositivo più "lento" in quanto impiegherà meno tempo a svolgere i compiti assegnati.
CONSUMO IN WAKE-UP
Nei due paragrafi precedenti abbiamo parlato dei due parametri che determinano, per la maggior parte, la potenza dissipata da un microcontrollore, ovvero il suo assorbimento nelle condizioni di stand-by ed attiva. In realtà nel passaggio tra stand-by ed active, il microcontrollore si trova in una condizione che viene tipicamente definita di wake-up e che può portare anch’essa un contributo significativo. Nella fase di wake-up il sistema deve sostanzialmente inizializzare le periferiche tenute spente e stabilizzare i segnali di clock interni derivati dall’oscillatore esterno prima di poter avviare la propria attività. Valutare il consumo in questa fase di wake-up può non essere semplice. I produttori forniscono, infatti, il tempo di wake-up intrinseco del dispositivo, che non tiene conto (ma non potrebbe farlo in ogni caso, dal momento che dipende dalla specifica applicazione), del tempo di wake up dei circuiti esterni. Nel caso di applicazioni di campionamento, ad esempio, bisogna tenere conto del settling time delle catene di condizionamento del segnale analogico. In generale saranno da considerare il tempo di on dei regolatori di tensione (che può essere anche dell’ordine delle decine di millisecondi od oltre) o quello di startup di eventuali oscillatori esterni (per sistemi che richiedano elevata accuratezza temporale e quindi non possano funzionare con l’oscillatore integrato) presenti a bordo scheda. In realtà alcuni modelli più recenti come quelli della serie nanoWatt o nanoWatt XLP disponibili presso PIC supportano una modalità di esecuzione di tipo "twospeed start-up" che permette di eseguire il codice anche durante il periodo di attesa del lock del circuito interno di condizionamento di clock. Maggiore è il tempo di wake-up dei circuiti esterni, maggiore è la potenza dissipata dal microcontrollore "inutilmente".
UN SEMPLICE ESEMPIO
Di seguito riportiamo un semplice esempio che mostra il calcolo della potenza dissipata da un microcontrollore per derivare la vita tipica della batteria. L’esempio può anche essere utile per dare l’idea di come i progressi della tecnologia abbiano ormai consentito di ridurre drasticamente il consumo dei dispositivi elettronici, anche se, a dire il vero, come in ogni altro ambito, molto si potrà ancora fare, soprattutto nell’ottica delle applicazioni self-powered mediante energy harvesting. Il microcontrollore preso come riferimento appartiene alla famiglia MNPS430 di TI. Si tratta di un dispositivo ultra low-power con architettura RISC a 16-bit e disponibilità di periferiche mixed-signal, così da segnalarsi come Elettroshop senza soluzione interessante per applicazioni di remote sensing. Il consumo complessivo viene in questo caso calcolato come somma di diversi fattori tra cui la potenza in standby, la potenza attiva, la potenza dissipata dalle periferiche e quella della memoria FRAM per la memorizzazione dei campioni acquisiti. I consumi sono stimati nell’ipotesi di un campionamento di 256 campioni a frequenza di 200 Ksps e supponendo che il microcontrollore impieghi 1000 cicli di clock per ogni singola scansione (di tutti i 256 campioni). I valori stimati sono 0.4995 μA per la corrente in stand-by e 0.032 μA, 0.029 μA e 0.0036 μA per, rispettivamente, quelle relative all’assorbimento delle periferiche, al funzionamento in condizioni "attive" e per la memorizzazione dei dati in FRAM. Come accennato inizialmente, è immediato osservare che il contributo dominante è quello dell’assorbimento in standby. Il risultato complessivo è un assorbimento medio di corrente per il sistema di 0.5641 μA che corrisponde ad una vita di una tipica batteria CR2032 di capacità 230 mAh (acquistabile sul mercato al costo inferiore ad 1 dollaro) di oltre 46 anni. Nella pratica, una volta installato il sistema, non ci si dovrà più preoccupare di dover intervenire sul campo per sostituire la batteria.
Per ulteriori dati e informazioni su microcontrollori ed altri componenti elettronici visita il sito tme.eu.
Grazie per l’articolo,
spesse volte si trascura il fatto degli assorbimenti inutili di corrente da parte di un microcontrollore durante il funzionamento della scheda , che non sempre e’ necessario, ma che rivestono un ruolo fondamentale quando entra in gioco il risparmio energetico del sistema.
Sto iniziando a valutare la cosa per alcune applicazioni che permettono di inserire in sleep la CPU per risvegliarla solo quando necessario o a periodi prestabiliti e che nel complesso sono ininfluenti sul funzionamento generale.
Dovendo ad esempio effettuare una campionatura dello stato di un sensore intelligente wireless utilizzato come antifurto ….per un applicazione che sto realizzando , il quale deve trasmettere
all’unita’ centrale il suo stato e la cui alimentazione e’ una piccola batteria a ricarica solare,
ho optato per un campionamento di pochi millisecondi ed altrettanti millisecondi di ” sleep ” a Duty_cycle variabile.
la cpu del sensore in pratica campiona in maniera alternata il suo stato, inserendo anche l’ali per porzioni di circuito necessarie in quell’istante e se interviene nella segnalazione all’unita’ centrale, dopo la trasmissione e la conferma di ricezione dell’unita’ viene riposta in sleep dopo aver disattivato i componenti usati per il rilevamento .
Il Duty_cycle si puo’ cambiare a seconda delle esigenze riducendo a piacimento il consumo.
saluti
Negli ultimi anni si è avuto un notevole aumento di microcontrollori ed ognuno con una propria scheda di sviluppo, facilitando così l’utilizzo di essi. Io personalmente, ho iniziato a divertirmi con quelli più alla mia portata ma trascurando quanto essi potessero consumare in potenza. L’articolo è interessante proprio per questo, mette in rilievo il consumo per ciascun pin anche quando il micro è in stand-by. Una ulteriore attenzione viene data nella fase particolare di wake-up. L’autore ha fatto l’esempio dei pic, sarebbe interessante se potesse dare informazioni sui consumi di qualche altro microcontrollore in particolare. Grazie