Sfruttare le prestazioni e i bassi consumi di un microcontroller a 16 bit
Contributo di Editori nordamericani di DigiKey
2019-07-24
La durata della batteria è importante per la soddisfazione degli utenti di dispositivi consumer. Per gli endpoint Internet delle cose (IoT) alimentati a batteria, la lunga durata di quest'ultima riduce i costi di manutenzione e migliora l'affidabilità. Dato che il microcontroller utilizzato in questi dispositivi può assorbire molta energia, i progettisti devono scegliere e applicare l'architettura giusta per soddisfare le esigenze di queste applicazioni. In molti casi, i microcontroller a 16 bit si rivelano la scelta migliore.
Anche se i microcontroller a 8 bit stanno diventando più potenti, le loro prestazioni rimangono intrinsecamente limitate in termini di potenza di elaborazione e memoria indirizzabile. Questo li esclude pertanto dalle applicazioni a più alte prestazioni. D'altra parte, i sistemi basati su core a 32 bit sono spesso esagerati per un'applicazione, specie quando consumano più energia del necessario.
La soluzione sta nel mezzo, nei microcontroller a 16 bit, il punto giusto tra i core a 8 e quelli a 32 bit. Offrono i bassi consumi di un microcontroller semplice a 8 bit ad alimentazione singola ma, allo stesso tempo, in termini di prestazioni e memoria mettono a disposizione alcuni dei vantaggi dei core a 32 bit. Se un'applicazione non è intensamente multi-thread e se i requisiti di memoria non sono troppo elevati, un microcontroller a 16 bit può fornire il livello giusto di prestazioni con significativi risparmi energetici.
Questo articolo descrive l'architettura dei microcontroller a 16 bit e cosa li rende la scelta migliore per molte applicazioni endpoint IoT e consumer alimentate a batteria. Verranno quindi presentati alcuni esempi di microcontroller a 16 bit di Microchip Technology e Texas Instruments e verrà spiegato come iniziare a realizzare un progetto a 16 bit.
Come scegliere un microcontroller
La scelta del microcontroller appropriato per un'applicazione è uno dei primi passi del processo di progettazione, una volta definiti i requisiti pertinenti. La scelta si concentra principalmente tra i microcontroller a 8, 16 e 32 bit.
La diffusione dei microcontroller a 8 bit non viene tenuta nella giusta considerazione, eppure sono loro il punto di forza dei progettisti. Non esiste un lavoro troppo piccolo per un microcontroller a 8 bit a basso costo e a basso consumo energetico: hanno i consumi più bassi fra tutti i microcontroller mainstream, alcuni con correnti di standby inferiori a 100 nA.
Sono anche facili da usare. Il microcontroller a 8 bit si basa generalmente sull'accumulatore, anche se alcune architetture più moderne hanno un set di registri. Il modello di programmazione è semplice e limitato: accumulatori o un piccolo registro impostato con un singolo registro di stato, un puntatore allo stack e uno o più registri indice. Molto spesso lo stack può essere nell'hardware e il contatore dei programmi (PC) è inaccessibile al firmware.
Nonostante la sua diffusione, l'architettura a 8 bit raggiunge i suoi limiti quando tenta di gestire reti e comunicazioni. Quasi tutti gli stack di comunicazioni e i protocolli di rete sono a 16 o a 32 bit, per cui si rende necessario abbandonare un'architettura a 8 bit. Inoltre, anche i microcontroller a 8 bit di fascia alta tendono a limitarsi all'indirizzamento a 16 bit senza paging, riducendo le dimensioni e la complessità del firmware.
All'estremo opposto, i microcontroller a 32 bit sono diventati popolari per le applicazioni di qualsiasi gamma di prestazioni. Si tratta di architetture basate su registro che supportano facilmente connettività di rete e comunicazioni. In genere hanno 32 bit di indirizzamento, possono supportare operazioni matematiche in virgola mobile e algebriche di fascia alta, nonché frequenze di clock nel campo dei gigahertz. I core a 32 bit hanno un modello di programmazione più complesso che può includere più registri di stato, un PC esposto al firmware, una sofisticata gestione degli interrupt e due o più livelli di privilegi di esecuzione del firmware.
I microcontroller a 16 bit sono tutti basati su registri, con architetture semplici come quelle di un microcontroller a 8 bit. Tendono ad avere buone prestazioni anche a basso consumo, assorbimento di corrente molto più basso delle architetture a 32 bit e un consumo energetico quasi inferiore a quello dei core a 8 bit. Se l'applicazione richiede calcoli matematici di fascia alta, alcuni microcontroller a 16 bit vantano coprocessori matematici che, pur con la stessa velocità di clock interno, offrono alcune delle prestazioni matematiche di un core a 32 bit.
I microcontroller a 16 bit per la connettività di rete possono poi contare sul supporto di moltissimi stack di comunicazioni. Ethernet, CAN, USB e Zigbee sono alcuni esempi di stack di protocollo che possono operare alla stessa velocità su microcontroller sia a 16 bit che a 32 bit, a condizione che il codice dell'applicazione disponga di prestazioni sufficienti per servire lo stack.
Indirizzamento di grandi array di memoria Flash con un microcontroller a 16 bit
Una delle differenze più importanti tra architetture a 32 e a 16 bit è l'intervallo di indirizzamento della memoria. I microcontroller a 32 bit hanno un bus di indirizzamento a 32 bit che consente di accedere a un massimo di 4 Gbyte di memoria. I microcontroller tradizionali a 16 bit hanno 16 bit di indirizzamento che possono accedere solo a 64 kB. Tuttavia, molte moderne architetture a 16 bit ora dispongono fino a 24 bit di indirizzamento esteso, il che consente uno spazio di indirizzi di ben 16 MB.
Un buon esempio dell'approccio di indirizzamento esteso è rappresentato dalla famiglia di microcontroller PIC24F a basso consumo di Microchip Technology. Uno di questi è il microcontroller PIC24FJ1024GA, a 32 MHz e a 16 bit con 1 MB di memoria Flash su scheda e 32 kB di SRAM su scheda. Utilizza un modello semplice di programmazione simile a molti microcontroller a 8 bit (Figura 1).
Figura 1: Il modello di programmazione di PIC24F di Microchip è simile a quello di un microcontroller a 8 bit di fascia alta. Ha un'architettura basata su registri con sedici registri a 16 bit per uso generale, un puntatore allo stack, un PC e cinque registri di supporto. (Immagine per gentile concessione di Microchip Technology)
PIC24 ha un contatore del programma a 23 bit che può accedere a un massimo di 8 MB di memoria di programma Flash. Ha sedici registri a 16 bit chiamati Working Register (WREG), identificati da W0 a W15. I registri da W0 a W13 sono per uso generale (GP) e possono essere impiegati per memorizzare i dati sotto il controllo del firmware. W15 è un puntatore allo stack dedicato (SP). Anche se SP viene automaticamente incrementato e decrementato dalle chiamate di funzione e subroutine, dalle eccezioni di programmazione e dai ritorni di chiamata, può essere modificato dal firmware come avviene per i registri da W0 a W13.
W14 funge da puntatore allo stack frame (FP) con le istruzioni di assemblaggio LINK e UNLINK. Lo Stack Pointer Limit Register (SPLIM) è un registro indipendente e viene utilizzato con SP per impedire gli overflow dello stack.
PIC24 utilizza un'architettura Harvard con spazi di indirizzo e dati separati. Il registro Data Table Page Address (TBLPAG) e quello Program Space Visibility Page Address (PSVPAG) sono utilizzati con istruzioni speciali per accedere e trasferire i dati tra gli spazi di indirizzo e dei dati. Questa caratteristica è comune nelle architetture a 32 bit, ma rara nei core a 8 bit.
Il registro Repeat Loop Counter (RCOUNT) a 16 bit contiene il contatore di iterazioni per l'istruzione assembly REPEAT.
Il registro Core Control della CPU (CORCON) a 16 bit viene utilizzato per configurare le modalità operative interne del core di PIC24.
Infine, il registro di stato a 16 bit contiene bit sullo stato operativo del core di PIC24, incluso lo stato risultante dall'ultima istruzione eseguita.
Per le prestazioni di PIC24FJ1024GA606T Microchip Technology dichiara 16 MIPS a 32 MHz, un dato davvero impressionante per un core a 16 bit. Il core ha molte delle funzionalità presenti in un microcontroller a 32 bit, ad esempio un moltiplicatore hardware di 17 bit per 17 bit che supporta anche la matematica frazionaria e un divisore hardware di 32 bit per 16 bit. Queste funzionalità sono utili per gli endpoint IoT che devono eseguire calcoli sui dati del sensore. L'architettura è inoltre in grado di leggere e scrivere contemporaneamente dalla memoria dei dati senza che vi sia un decadimento delle prestazioni.
Anche se PIC24FJ1024GA606T ha un'ampia gamma di periferiche standard, incluso un USB On-the-Go (OTG), ha un consumo molto basso per le applicazioni alimentate a batteria. La tensione di alimentazione richiesta è compresa tra 2,0 e 3,6 V e alla massima velocità il microcontroller assorbe non più di 7,7 mA a 32 MHz, valori che un core a 32 bit ha difficoltà a raggiungere. Il firmware ha un buon controllo del core e dei clock periferici. Esistono due istruzioni assembly in modalità a basso consumo. L'istruzione IDLE arresta il core PIC24 consentendo però il funzionamento delle periferiche. L'istruzione SLEEP interrompe tutte le operazioni del dispositivo tranne il watchdog opzionale e il rilevamento di interrupt esterni. La corrente di riposo è di soli 2,8 mA (max), mentre quella massima di sospensione va da 10 a 45 µA, a seconda della configurazione delle periferiche. Nella sua modalità di risparmio energetico, quella di sospensione con mantenimento del contenuto della memoria ad accesso casuale (RAM), PIC24F arriva ad assorbire anche solo 190 nA.
Per prestazioni più elevate, Microchip Technology offre un microcontroller di fascia alta a 16 bit come parte della famiglia dsPIC®. Ne è un esempio dsPIC33EP512GP506T a 16 bit con 512 kB di Flash e prestazioni dichiarate da Microchip di 70 MIPS. dsPIC ha quasi gli stessi registri core di PIC24, più altri per supportare le istruzioni di elaborazione dei segnali digitali (DSP) tra cui due accumulatori a 40 bit e supporto della moltiplicazione a 32 bit. Quando si aggiorna un PIC24 in-system, per molti microcontroller PIC24 sono disponibili aggiornamenti dsPIC compatibili a livello di pin che offrono prestazioni migliori utilizzando la stessa scheda.
Va da sé che prestazioni superiori richiedono una potenza superiore. Questo dsPIC33 richiede un'alimentazione da 3,0 a 3,6 V e quando funziona a 70 MIPS consuma al massimo 60 mA.
Ridurre i consumi migliorando le prestazioni
La famiglia di microcontroller MSP430FR599x di Texas Instruments usa la memoria ad accesso casuale ferroelettrica (FeRAM) di programma per raggiungere prestazioni di lettura/scrittura più elevate con consumi inferiori a quelli dei microcontroller basati su Flash. Il microcontroller MSP430FR5994IPNR a 16 bit fa parte di questa famiglia, con un clock a 16 MHz e 256 kB di FeRAM.
Il core di questo microcontroller MSP430FR presenta prestazioni migliori, fra cui una cache associata bidirezionale con quattro linee cache di 64 bit per prestazioni della FeRAM migliori. Un moltiplicatore hardware a 32 bit migliora le prestazioni per operazioni che richiedono molti calcoli. Ha anche un coprocessore Low Energy Accelerator (LEA) che opera indipendentemente dal core MSP430 principale. Il coprocessore LEA può eseguire una trasformata di Fourier veloce (FFT) complessa a 256 punti, un filtro a risposta impulsiva finita (FIR) e una moltiplicazione della matrice che, secondo TI, è fino a 40 volte più veloce di un Arm® Cortex®-M0+. LEA aumenta le prestazioni per le operazioni di fusione sensoriale, migliorando le immagini e l'elaborazione dei dati dei sensori a ultrasuoni. Queste sono tutte applicazioni in cui uno sviluppatore di solito valuta prima l'uso di un core a 32 bit, non di un microcontroller a 16 bit a bassissimo consumo.
Il modello di programmazione per MSP430R è molto semplice (Figura 2). Vi sono sedici registri a 16 bit, da R0 a R15. R0 è il contatore del programma, R1 è il puntatore allo stack, R2 è il registro di stato e R3 è un generatore costante (utilizzato per operandi immediati). I registri da R4 a R15 sono per uso generale. Gli altri registri di configurazione sono mappati in memoria, in modo simile alla maggior parte dei core a 32 bit.
Figura 2: La configurazione del set di registri del microcontroller MSP430 è simile a quella di altri core a 16 bit basati su registri. Gli altri registri di configurazione sono mappati in memoria. (Immagine per gentile concessione di Texas Instruments)
Queste prestazioni non comportano un maggior assorbimento di corrente. In modalità standby, quando è in esecuzione il clock in tempo reale (RTC), MSP430FR5994 di TI assorbe 350 nA. In modalità di spegnimento l'assorbimento è di appena 45 nA, inferiore a qualsiasi microcontroller a 32 bit attualmente in commercio, e persino alla maggior parte di quelli a 8 bit.
MSP430FR5994IPNR può operare da 1,8 a 3,6 V. Con il firmware che per la sua esecuzione sfrutta la FeRAM, senza far intervenire la cache, MSP430FR richiede solo 3 mA. Se il codice viene eseguito dalla cache, l'assorbimento di corrente è di soli 790 µA. Abbinato al LEA, fornisce elevate prestazioni di elaborazione, con un assorbimento di corrente estremamente basso per un microcontroller a 16 bit.
Per sviluppare facilmente applicazioni a basso consumo per la famiglia MSP430FR5994 si può utilizzare MSP-EXP430FR5994 LaunchPad™ di TI. LaunchPad contiene tutto l'occorrente a uno sviluppatore per iniziare a scrivere e ad eseguire il debug del firmware per il microcontroller MSP-EXP430FR5994 (Figura 3).
Figura 3: MSP-EXP430FR5994 LaunchPad di TI contiene tutto l'occorrente a uno sviluppatore per iniziare a scrivere e ad eseguire il debug del firmware per il microcontroller MSP-EXP430FR5994 di TI con FeRAM a 16 bit. (Immagine per gentile concessione di Texas Instruments)
LaunchPad ha due pulsanti, due LED e uno slot per una scheda microSD. Per dimostrare le capacità di basso consumo del microcontroller MSP430FR5994, LaunchPad è dotato di un grande supercondensatore da 0,22 Farad in grado di alimentare LaunchPad. Il supercondensatore viene caricato collegando LaunchPad all'alimentazione esterna e impostando il ponticello J8 su "Charge". La ricarica completa richiede 2-3 minuti. Trascorsi tre minuti, il ponticello J8 viene messo sull'impostazione "Use" e l'alimentazione esterna viene tolta. A seconda dell'applicazione, MSP430 può avere un'autonomia di molti minuti.
LaunchPad può essere utilizzato anche per misurare l'assorbimento di corrente di MSP430 e dell'applicazione. Il blocco di isolamento J101 ha sette ponticelli, compreso uno di alimentazione a 3 V, 3V3. Il ponticello a 2 pin 3V3 può essere rimosso e la corrente dell'applicazione può essere misurata attraverso i due pin.
LaunchPad supporta anche la tecnologia EnergyTrace™ di TI e può collegarsi a un computer tramite la EnergyTrace Graphical User Interface (GUI) di Texas Instruments. Gli sviluppatori possono così osservare in tempo reale i dati sul consumo energetico del microcontroller MSP430 e dell'applicazione, e ottimizzare di conseguenza la propria applicazione.
Ad esempio, il monitoraggio e la registrazione della corrente in tempo reale possono mostrare i picchi di assorbimento di corrente a cui può essere soggetto il microcontroller MSP430. I picchi di corrente possono deteriorare la batteria, riducendone la durata. Possono essere causati dalla configurazione errata delle periferiche su chip, da un carico induttivo o capacitivo esterno, o anche dal tentativo del firmware di attivare tutto contemporaneamente. Il monitoraggio e la registrazione della corrente possono mostrare agli sviluppatori in che punto intervenire per regolare il firmware e tenere i picchi sotto controllo.
Conclusione
Per molte applicazioni embedded alimentate a batteria con prestazioni medie e basso consumo, gli sviluppatori possono scegliere un microcontroller a 16 bit appropriato al posto di un core a 32 bit. Come mostrato, per molte applicazioni un microcontroller a 16 bit può consumare molto meno di uno a 32 bit, pur garantendo le prestazioni richieste.

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.