Il continuo aumento dei sistemi portatili a batteria, impone ai progettisti una costante ricerca di componentistica con un architettura più sostenibile. Molti prodotti richiedono alta autonomia, ma poche aziende dispongono nei loro cataloghi di microprocessori o microcontrollori a bassissimo consumo. Microchip nanoWatt XLP™ si propone come una tecnologia pronta, e facile da usare, impiegata in alcune famiglie di PIC, in grado di soddisfare le sempre più insistenti richieste di portabilità del mercato embadded.
Microchip Technology Inc., investe ingenti risorse per riuscire a mantenere uno dei primi posti della classifica dei produttori di microcontrollori, ma alte prestazioni non significano sicuramente “contenuto assorbimento energetico”. La maggior parte dei lettori sarà certamente a conoscenza degli sforzi svolti dall’azienda d’oltre oceano nella realizzazione di integrati generosi nei confronti delle sorgenti di alimentazione: ogni PIC dispone nella propria collezione di istruzioni del comando “Sleep”, un apposito accorgimento che spegne istantaneamente tutte le risorse non necessarie mettendo a “dormire” l’integrato.
INTRODUZIONE
Il consumo di corrente ha de sempre giocato un ruolo chiave nella scelta degli IC che equipaggeranno un circuito elettronico. Per la progettazione di qualsiasi sistema, gli ingegneri devono essere a conoscenza di tutte le caratteristiche di un microcontrollore, cercando di individuare il prodotto che, a ragion di impiego, sfrutta in maniera ideale l’alimentazione a sua disposizione.
IL CONSUMO ENERGETICO NEI PIC
Prima di addentrarci nelle tecniche di riduzione dell’assorbimento e capire realmente l’interazione tra hardware e software, risulta interessante menzionare quali sono i reali fattori che producono un consumo. Prendendo in esame la gestione dell’alimentazione di un PIC, questa viene suddivisa in due componenti: alimentazione dinamica e alimentazione statica. Con corrente dinamica si considera quel flusso che permette di passare da uno stato logico ad un altro. Risente enormemente dell’interazione del clock, della temperatura esterna, e della tensione d’alimentazione. Per questa ragione poiché i fattori ambientali sono, per ovvie ragioni, immutabili dal progettista, una delle tecniche per il controllo della corrente dinamica è appunto la riduzione della frequenza del clock. Con corrente statica invece si intende la potenza consumata quando il clock principale è disabilitato. Si tratta principalmente dall’assorbimento dovuto al numero di transistor interni al dispositivo, e nei sistemi provvisti di Watchdog Timer, comprende anche il timer per la gestione dell’unità di reset automatica. Anche la corrente statica è affetta dall’interazione della tensione di alimentazione e della temperatura, ma, la maggior parte del consumo, è dettato dalla disposizione interna dei semiconduttori. É importante notare come sia la corrente statica che quella dinamica siano determinate dal valore stesso della tensione di alimentazione, denotando un evidente risparmio energetico con l’impiego di voltaggi contenuti.
LA TECNOLOGIA NANOWATT XLP™
Nel 2003 Microchip cominciò ad adottare ogni proprio MCU con la rivoluzionaria tecnologia nanoWatt. Anche se questo standard era visibile all’utenza mediante l’aggiunta del comando “sleep” alla lista delle istruzioni, e la modifica di qualche registro significativo, la maggior parte degli utenti non era a conoscenza delle effettive revisioni all’hardware, necessarie per affrontare un considerevole miglioramento in ambito energetico-prestazionale.
COME SI RIDUCE L’ASSORBIMENTO?
La prima richiesta fondamentale affinché un microcontrollore possa essere definito nanoWatt compatibile, è che gli assorbimenti siano appunto nell’ordine dei nanoWatt. “nanoWatt XLP™ Technology” va a riscrivere tutte le precedenti direttive di Microchip, definendo un sistema più reattivo e versatile, in grado di adattare le proprie caratteristiche ai sistemi più disparati. Le tre richieste fondamentali per cui un PIC rientri nella cerchia dei micro a basso assorbimento sono:
- Corrente di Power-Down (IPD) minore di 100nA
- Corrente di alimentazione del Watchdog Timer (IWDT) minore di 800nA
- Corrente per il mantenimento in funzione del Real-Time Clock (IRTCC) minore di 800nA
Entrambe le versioni di nanoWatt utilizzano dei criteri architetturali interni per riuscire ad abbattere l’effettiva corrente richiesta. Ruolo importante è svolto dalla continua ricerca nell’ambito dei materiali: semiconduttori con minor resistenza influiscono, anche con decine di nano Ampere, nella somma totale dell’assorbimento del singolo integrato.
LE VARIE MODALITÀ UTILIZZABILI
Come si accennava precedentemente, risparmio energetico e migliori prestazioni non sono sinonimi. Durante la realizzazione di un progetto, spesso ci si trova di fronte a delle situazioni in cui si necessita di contenere il consumo della batteria, senza intaccare la velocità di gestione da parte del MCU stesso. Per questo motivo, nanoWatt XLP™ rende disponibili cinque modalità differenti, riuscendo quindi a raggiungere un compromesso tra risparmio e calcolo ottimale.
LA MODALITÀ DOZE E IDLE
Utilizzate in ambiti differenti, Doze e Idle sono molto simili: entrambe riducono l’assorbimento riducendo le prestazioni, ed interagendo quindi nella corrente dinamica stessa del controllore. Esse si utilizzano quando non è richiesto l’intervento del core dell’MCU, bensì quando una periferica sta comunicando o svolgendo un’operazione. Entrambe agiscono sul clock della CPU: leva il clock e la Control Process Unit si spegne. Disponibili per i PIC24, PIC32 e PIC33, Doze e Idle si differenziano solamente in un particolare: la modalità Idle rimuove completamente il clock dalla CPU, mentre Doze, sfruttando un apposito registro, diminuisce solo il fattore di oscillazione, riducendo la velocità del sistema. Idle e Doze riducono dinamicamente la corrente utilizzata, consumando meno della modalità di esecuizione stessa. Solitamente si utilizzano quando non sono necessarie tutte le risorse del microcontrollore, come per esempio:
- Instaurazione di una comunicazione seriale
- Avvio di una conversione A/D ad alta velocità
- Attesa di un evento da un comparatore esterno
- Attesa di un segnale di sincronizzazione
Si tratta, quindi, di tutte quelle situazioni in cui si attende un interrupt, ma il tempo di uscita dalla modalità Sleep del MCU è troppo elevato rispetto l’istante di cattura dell’evento stesso. Queste modalità vanno a sopperire al sistema di attesa ciclica di un avvenimento: infatti nei microcontrollori più datati, quando per ragioni di velocità non si poteva sfruttare il sistema Sleep, si lanciava una routine ridondante interrompibile solamente mediante un interrupt. Il metodo era efficace e versatile, ma poco prestazionale, in quanto oltre ad utilizzare molta corrente impegnava la CPU in calcoli inutili.
LA MODALITÀ SLEEP
Mentre Idle, Doze e Deep Sleep sono presenti solamente in alcune specifiche famiglie di PIC, Sleep è uno standard Microchip: tutti i microcontrollori in tecnologia nanoWatt prodotti dall’azienda ne sono provvisti. In questo stato il clock della CPU e la maggior parte dell’hardware vengono disabilitati, facendo entrare il dispositivo in uno stato di ibernazione, in cui il consumo d’energia è molto limitato. Gli ultimi dati contenuti nella RAM, nel SFR e nel Program Counter vengono conservati, pronti all’uso al successivo ripristino. Quando “dormiente”, la “sveglia” avviene mediante le periferiche configurate nel listato, e solitamente le possibilità dipendono da famiglia a famiglia di PIC. Il tempo di Wake-Up dipende dal modello del MCU, ma mediante apposite configurazioni è possibile avviare il microcontrollore in tempi più contenuti. Tra tutte le modalità risulta solitamente quella preferita dai programmatori, in quanto fornisce un ottimo compromesso tra prestazioni e risparmio energetico, essendo la più flessibile tra tutte le disponibili. Non presenta tempi di ripresa estremamente elevati, e risulta indispensabile per dispositivi che integrino momenti di latenza a momenti di processazione di informazioni. Si usa principalmente in:
LOOP CONTINUI CON FREQUENZA INFERIORE AL SECONDO
Gestione di eventi, applicazioni che non richiedono interventi del MCU fino a che non viene soddisfatta una determinata situazione. Conversioni ADC e comparazioni più performanti.
LA MODALITÀ DEEP SLEEP
La modalità Deep Sleep viene riconosciuta come l’applicativo Hardware/Software che provvede a mantenere il minor consumo di corrente possibile senza togliere alimentazione all’integrato. Questo punto viene raggiunto disattivando la maggior parte dei blocchi interni: il Core, il regolatore di tensione (se presente) e in alcuni casi anche la RAM. Deep Sleep, traducibile con “sonno profondo”, permette consumi estremamente contenuti, ma solamente negli integrati che non sfruttano a pieno i regolatori. In aggiunta, la rimozione della corrente da alcune parti del circuito integrato, crea un abbattimento delle potenza dissipata, permettendo al microcontrollore di affrontare temperature esterne anche molto elevate. Conseguenza della rimozione dell’alimentazione dalla maggior parte dei sistemi interni, e quindi anche dal Core, sono:
- Concreta diminuzione delle fonti di Wake-Up
- Reset del Program Counter, dell’SFR, e di alcune parti della RAM
- Ripristino dell’esecuzione del firmware dal punto di reset
Contrariamente alle aspettative però, gli stati degli ingressi e delle uscite, il clock del Timer1 e gli eventi RTCC vengono mantenuti, garantendo la prosecuzione delle eventuali operazioni in atto. Mediante la modifica dei registri dedicati, è possibile gestire anche alcune porzioni di RAM, comunicando eventualmente al software che il reset appena avvenuto consisteva in un Wake-Up ricevuto da un Deep Sleep Interrupt. Considerata come la vera rivoluzione importata da nanoWatt XLP™, Deep Sleep definisce una nuova tipologia di applicazioni, in cui la durata della batteria regna sovrana su ogni altra caratteristica. Il reset nel momento della “sveglia” però, restringe il campo dei dispositivi che possono permettersi tale prerogativa, infatti risulta ideale per:
- Sistemi che richiedono un tempo di inattività superiore a un secondo
- Sistemi operanti in ambienti con alte temperature
- Circuiti che non richiedono tutte le periferiche interne al microcontrollore per operare.
SCEGLIERE TRA SLEEP E DEEP SLEEP
Secondo le caratteristiche descritte precedentemente, pare che Deep Sleep goda di vantaggi prestazionali rispetto a Sleep. Ciò è vero, ma solamente in alcune situazioni e con alcuni parametri. Trovandosi nel caso in cui un PIC debba fare un campionamento con invio dei dati ogni mezzo secondo, entrambe le modalità effettivamente indurrebbero una riduzione consistente della corrente utilizzata, ma quale delle due garantirebbe una vita più lunga dell’eventuale batteria connessa? Il primo passo è determinato dal calcolo della carica consumata rispettivamente in modalità Sleep (QSLP, formula [1]) e in modalità Deep Sleep (QDS, formula [2]). Per una maggiore comprensione del testo seguente è importante definire le seguenti variabili:
- TPOR: è il lasso di tempo che intercorre dalla generazione di un evento di power-up all’esecuzione della prima istruzione.
- IPOR: è la corrente assorbita durante il POR, varia da un microcontrollore all’altro, e anche se spesso disponibile nei datasheet è sempre meglio misurarla
- TINIT: è il tempo di inizializzazione del dispositivo, comincia solitamente dopo il POR o con la prima istruzione, e finisce con l’inizio del programma prin-
- IDD: la corrente impiegata durante l’inizializzazione.
Come si vede da [1], ogni microcontrollore quando entra in Sleep ammette solamente una corrente (IPDSLP), altre sì conosciuta anche come corrente statica di riposo. Moltiplicata per il tempo in cui l’MCU resta in questa modalità (TPD) da la possibilità di calcolare la quantità di carica utilizzata (QSLP).
QLSP=TPD x IPDSLP
La formula [2] ci fa capire come per Deep Sleep le cose si complichino leggermente, infatti, per il calcolo dell’energia utilizzata (QDS), si sfrutta la somma delle tra componenti fondamentali che vanno a ricreare l’andamento energetico in questa fase: il power-up (IDD), l’inizializzazione delle variabili (IPOR) e la corrente di riposo (IPDDS), ognuna moltiplicata per l’effettivo istante di tempo adoperato (TINIT, TPOR e TPD).
QDS=TINIT x IDD + TPQR x IPQR + TPD x IPDDS
Ora non resta che definire il punto di breakeven (TBE), come l’istante di tempo in cui QDS e QSLP sono uguali. Così facendo, e uguagliando le rispettive formule per il calcolo dell’energia di Sleep e Deep Sleep, si arriva all’estrapolazione di TPD.
TBE=TPD=( TINIT x IDD + TPQR x IPQR)/( IPDSLP - IPDDS)
Ora, sostituendo i valori numerici, e calcolando [3], si arriva alla generalizzazione dei due casi disponibili:
TBE < Tempo di inattività Deep Sleep
TBE > Tempo di inattività Sleep
CONCLUSIONI
In un mondo all’insegna della ricerca di fonti energetiche alternative, dove le novità in ambito elettronico godono di assoluta importanza, l’arrivo nel mercato di tecnologie ad altro risparmio energetico, non può essere che accolta che con un occhio di riguardo. Ora come ora è importante riuscire a creare applicazioni, portatili, efficienti e poco costose, ivi per cui la portabilità, l’efficienza e il costo della materia prima giocano un ruolo fondamentale nell’effettiva competitività del prodotto finale.
Bellissima parola “NanoWatt”.
Il bassissimo consumo di corrente dei microcontrollori non solo consente di risparmiare energia elettrica e di poterli alimentare con batterie anche in posti critici, ma permette di usare fonti di alimentazione alternativi e diversi dalla norma .
In questo modo l’energy harvesting viene sempre più 🙂