Dopo molti anni di marketing e aspettative finalmente ci siamo, l’Intenet of Things (IoT) è diventato una realtà. Ogni oggetto, che sia un elettrodomestico, un televisore o un semplice conta passi, contiene difatti dell’elettronica dedicata per la connessione ad un cellulare (BLE o NFC) o direttamente al Cloud (Lora, NB-IoT, Cellular IoT o WiFi). Sicuramente il processo di miniaturizzazione dell’elettronica è stato di grande aiuta per l’avvento dell’IoT, tuttavia questo processo non è stato seguito da un aumento della densità energetica nelle batterie che vengono spesso usate per alimentare i nodi dell’IoT.
Dal momento che le dimensioni delle batterie, a parità di contenuto energetico, sono rimaste bene o male le stesse, si pensi ha tutti i gadget connessi alimentati con le vecchie batterie a bottone CR2025 per esempio, per prolungare la durata di un device IoT il progettista deve ingegnarsi per ridurre il consumo energetico al suo minimo pur offrendo tutte le funzionalità richieste per il dispositivo.
Da questa situazione scaturisce la necessità di seguire delle metriche di progettazione atte a produrre un dispositivo ultra low power. Si parla di dispositivi ultra low power quando il consumo di corrente media del dispositivo è nell’ordine di 1-10uA. Per fare un calcolo rapido, una batteria CR2025 ha tipicamente una capacità di 170mAh, questo vuol dire che un dispositivo alimentato da una CR2025 per durare almeno 4 anni deve consumare mediamente meno di 5uA.
Generalmente un dispositivo ultra low power passa la maggior parte del suo tempo in uno stato di basso consumo (Sleep State), per poi svegliarsi ogni tanto, compiere qualche azione come acquisire dati da un sensore o trasmettere i nuovi valori alla rete a cui è connesso (Wake State), ed infine ritornare stato di basso consumo. Il rapporto tra il tempo trascorso in Wake State e la somma del tempo trascorso in Wake State e Sleep State è definito Duty Cycle operativo del dispositivo.
Da questo modello ne segue che i fattori contributivi al consumo di corrente medio sono fondamentalmente due:
Per ottenere la corrente media di consumo si deve sommare direttamente la corrente di Sleep State mentre quella di Wake State va moltiplicata per il Duty Cycle.
Vediamo di seguito come si possa indirizzare la riduzione di questi due contributi sia in hardware che firmware.
Ultra low power hardware design
Il ruolo dell’hardware in un ultra low power device è principalmente quello di ridurre al minimo la corrente dello stato di Sleep. Tuttavia, in alcune applicazioni, le scelte hardware possono ridurre il tempo trascorso in Wake State e quindi la corrente media di Wake. Ad esempio, in una applicazione in cui è necessario svolgere dei calcoli computazionali floating point sui dati provenienti da un sensore (DSP), optare per un microcontrollore a 32 bit con FPU potrebbe essere una scelta migliore rispetto ad un 8 bit, in quanto in grado di svolgere le operazioni nello stato di Wake in maniera più rapida.
Per ridurre invece la corrente di Sleep ci sono numerose accortezze che si possono seguire dal punto di vista della progettazione elettronica, partendo dall’alimentatore del dispositivo. Il power supply infatti dovrà avere una bassa quiescent current (corrente di funzionamento del PSU stesso in regolazione), generalmente nell’ordine di pochi uA. L’altra caratteristiche dell’alimentatore è che dovrà essere in grado di mantenere operativo il dispositivo anche quando la batteria inizierà a scaricarsi diminuendo il suo valore nominale di tensione. Riprendendo l’esempio della CR2025, la sua tensione nominale è 3V, ma la sua capacità di 170mAh è calcolata fino a quando la sua tensione nominale scende a 2V. Per utilizzare a pieno tutta la capacità della batteria il nostro dispositivo dovrà essere in grado di funzionare con un range di tensione dai 3V ai 2V, per questo potrebbe rendersi necessario l’utilizzo di un font end boost (step up) che mantenga un rail a 3V anche quando la batteria inizia a scaricarsi.
Molto spesso in un nodo IoT il microcontrollore sarà sempre alimentato, anche quando entra nello stato di Sleep, in quanto spesso viene utilizzato l’RTC interno del microcontrollore per risvegliare il sistema ed entrare nello stato di Wake. Tuttavia, potrebbero essere presenti altri circuiti nel sistema (periferiche) che non necessitano di essere alimentati durante lo stato di Wake. Per questi circuiti si potrebbe prevedere un alimentatore dedicato con possibilità di disabilitazione. In questo caso il parametro importante da tenere in considerazione è al shutdown current del power supply che dovrà essere nell’ordine di poche decine di nA. Altra opzione è quella di disconnettere la circuiteria dall’alimentatore principale con un High-Side Switch. La versione più semplice per carichi non richiedenti alte correnti è un PMOS usato come High-Side Switch ed un NMOS per pilotarne il gate tramite un GPIO del microcontrollore.
Quando si disconnette l’alimentazione da alcune sezioni di circuiteria, si deve prestare particolare attenzione; infatti se alcuni ICs della parte disconnessa si interfacciano con il microcontrollore si deve essere certi che nessuna connessione tra di essi presenti una tensione diversa da GND quando la periferica non è alimentata. Altrimenti si potrebbe violare l’absolute maximum rating di tensione sul pin della periferica. Questo potrebbe portare al danneggiamento del chip oppure ad alimentarlo tramite il diodo interno di protezione ESD, quindi ad aumentare il consumo. Qualora non si potesse ovviare a questo inconveniente (il pin in questione è su un bus condiviso anche da altre periferiche sempre alimentate, tipo SPI o I2C) si deve scegliere il chip periferica tale da avere una modalità ultra low power configurabile tramite il microcontrollore prima di entrare in Sleep State.
Ultra low power firmware design
Una volta ottimizzato l’hardware per ridurre al minimo i consumi nello stato di Sleep la palla passa la progettista firmware che dovrà caratterizzare ogni sua routine software dal punto di vista energetico. Lo strumento per svolgere questa attività si chiama power/current profiler; uno strumento in grado di misurare la corrente di consumo con risoluzione temporale nell’ordine delle centinaia di kHz e con ampia dinamica (si passa da pochi uA a centinaia di mA). Grazie al power/current profiler il progettista firmware può quindi stimare quanti Coulomb (o meglio micro Coulomb) verranno estratti dalla batteria ogniqualvolta il microcontrollore esegue una specifica ruotine software. Dal momento che parte del consumo energetico necessario per eseguire una routine software è dovuta al risveglio del microcontrollore dallo stato di Sleep, una buona idea potrebbe essere quella di unire diverse routine e mandarle in esecuzione una di seguito all’altra.
Una volta costruita una tabella con tutti i consumi energetici per le varie routine software si può definire quale è il Duty Cycle operativo del dispositivo al fine di ottenere la durata di vita voluta, considerando nel conto anche la corrente di Sleep.