L’uso del micro nei grandi sistemi di elaborazione

Un grande sistema di elaborazione è basato normalmente su uno o più processori avanzati, su un gate array e su dei DSP o dei SOC adatti all'applicazione. Questi dispositivi spesso richiedono una complessa infrastruttura di supporto: i binari di alimentazione devono attivarsi e disattivarsi secondo una ben precisa sequenza; la temperatura deve essere controllata; l'ambiente in cui opera il processore deve essere monitorato per gestire le eccezioni o le potenziali anomalie. La Fig. 1 riporta una tipica configurazione di sistema.
Attualmente, per realizzare queste funzioni periferiche e di supporto, vengono utilizzati due differenti approcci, in funzione dei volumi di produzione del sistema.
Due approcci differenti
Per i volumi più bassi i progettisti ricorrono a componenti singoli, per esempio un dispositivo di power-sequencing, un clock real-time, dei sensori di temperatura, dei dispositivi di gestione termica, EEPROM seriali, ADC (convertitori analogico-digitale), reset, watchdog timer e così via. Questi prodotti sono spesso connessi attraverso un bus seriale - per esempio un bus I2C o SMBus. Nei sistemi prodotti in grandi volumi gli sviluppatori lavorano invece con fornitori di ASIC o di semiconduttori per dare vita a dei progetti dedicati.
Questi due approcci hanno però dei limiti in termini di versatilità, complessità e costi. Il primo metodo può comportare grandi problemi per quanto riguarda interconnessioni e comunicazioni. Oltre a questo può risultare difficile progettare certe interazioni tra i componenti. Per esempio, durante un shutdown dovuto a cause termiche la possibilità di memorizzare i dati diagnostici in EEPROM implica che il processore principale attivi la scrittura nella memoria attraverso un bus I2C bus prima dello spegnimento completo. Dal punto di vista dei costi, questo richiede il ricorso a un'ampia varietà di differenti componenti.
Il secondo metodo ha senso solo se il numero di sistemi venduti giustifica gli oneri iniziali associati allo sviluppo di un dispositivo dedicato. Questi dispositivi inoltre sono carenti sotto il profilo della versatilità e non consentono di introdurre nuove dotazioni o di variare le funzionalità a meno di un re-design completo del silicio.
L'alternativa vincente
Un'alternativa a questi due approcci è di ricorrere a un piccolo microcontrollore per eseguire e integrare alcune task. Per eseguire queste funzioni molti microcontrollori a 8 bit non richiedono praticamente quasi nessun componente esterno. La maggior parte delle soluzioni attualmente disponibili sfrutta invece dei componenti discreti per fissare parametri operativi quali ritardi o livelli di tensione. Con un microcontrollore, queste opzioni diventano totalmente programmabili.
Tale approccio rende inoltre più semplice adattare il sistema all'evoluzione delle specifiche. Oltre a questo, concatenare una sequenza di eventi diventa molto più facile. Per esempio, una condizione di sovracorrente può essere tamponata nell'arco dei primi millisecondi, quando i condensatori di bypass si caricano, quindi può essere regolata durante il normale funzionamento. Il microcontrollore consente anche l'implementazione di algoritmi di controllo più complessi quali dei loop digitali Proportional Integral Derivate (PID) utili, per esempio, per migliorare la risposta dinamica di una ventola di raffreddamento.

Un ruolo importante nel power management

Le prestazioni sempre maggiori dei processori avanzati comportano dei sistemi di alimentazione più complessi. Questo può richiedere la generazione di più binari di alimentazione, i quali devono essere gestiti in modo attivo.
Lo startup è un periodo di grande stress per la sezione di pilotaggio di un alimentatore switching. La tensione di uscita è inizialmente pari a zero, condizione che comporta un errore di feedback massimo. Questo pilota il filtro di loop al suo limite, condizione che permette di portare i transistor di potenza della sezione driver al loro valore massimo. Tale condizione persiste fino a quando la tensione di uscita dell'alimentatore non si approssima al suo valore nominale. In presenza dei grossi carichi capacitivi, tipici dei grandi sistemi, il problema è ancora peggiore a causa delle notevoli correnti transitorie richieste per pilotare il carico stesso. Tale condizione può essere facilmente gestita da un circuito di soft-start. Qualora però fossero richiesti più binari di alimentazione per i vari componenti del sistema il compito può complicarsi. In tal caso infatti è necessario sia prevedere la loro attivazione secondo un ordine preciso sia controllare che la rampa al valore nominale sia corretta.
Un microcontrollore può essere interfacciato a un converter DC-DC in vari modi (Fig. 2). Il più semplice prevede il collegamento all'ingresso di shutdown disponibile nella maggior parte di questi dispositivi. Applicando un segnale PWM in salita al pin di shutdown del converter, il microcontrollore può essere programmato per controllare la velocità di start up dell'alimentatore. Questa configurazione può essere facilmente replicata su più di una sorgente, consentendo al microcontrollore di controllare qualsiasi tipo di sequenza o di rampa, anche di tipo complesso o non lineare. Un'alternativa può essere fare transitare il PWM in un filtro passa basso per generare un riferimento analogico programmabile di tensione che - attraverso un'opportuna regolazione - permette di variare il valore di uscita.
Oltre alla gestione attiva di condizioni quali il soft start, il microcontrollore può monitorare le condizioni di salute dell'alimentatore e riportare periodicamente lo stato al processore principale. Questa attività può essere svolta prevedendo un ADC o dei comparatori che si attivano su determinati livelli.
Il reporting e gli aggiornamenti di stato sono supportati da protocolli di comunicazione seriale comuni. In tal modo il processore principale può ricevere degli avvisi preliminari circa un guasto potenziale, indicare l'avvio di una sequenza di power-down, disattivare le parti interessate per risparmiare energia e nel frattempo eseguire molte altre funzioni.

La sfida nella gestione termica

Quasi tutti i sistemi di elaborazione ad alte prestazioni richiedono una forma di gestione termica. Ciò implica una misura di temperatura in vari punti dello chassis, della scheda o del processore, nonché adeguato controllo delle ventole di raffreddamento del sistema.
L'interfaccia verso la ventola normalmente prevede una configurazione a 2, 3 o 4 fili. L'interfaccia a 4 fili è costituita da alimentazione, massa, comando di velocità e feedback tacometrico. Il controllo della velocità per le ventole a 2 fili è ottenuto variando l'alimentazione DC. Le ventole a 3 fili accettano un segnale PWM con cui è possibile controllare - attraverso la variazione del duty-cycle - i giri del motore, o un segnale tacometrico che attiva in controllo simile a quello della ventola a 2 fili.
La sfida associata alle ventole di raffreddamento deriva dal fatto che la risposta in velocità ai vari metodi di controllo è di tipo non lineare. Per esempio, un comando PWM a una ventola a 3 fili con duty cycle del 50 percento dovrebbe indicare che la ventola deve girare al 50 percento della sua velocità massima. In realtà la ventola può trovarsi a girare anche a più dell'80 percento della sua velocità massima, generando del rumore indesiderato.
Nelle ventole a 4 fili, la linea aggiuntiva genera un feedback da un sensore a effetto Hall che consente un controllo a loop chiuso della velocità. Questo permette di monitorare meglio la ventola ma implica ancora l'uso di un dispositivo di gestione termica.
I piccoli microcontrollori offrono una soluzione efficace per gestire la velocità e la temperatura della ventola. La possibilità di programmare e variare l''algoritmo di controllo termico garantisce l'opportunità di ottimizzare il sistema in base al tipo di chassis o di scheda, senza alterare il progetto hardware di base. I progettisti possono inoltre implementare dei loop digitali di tipo PID per migliorare la risposta dinamica del controllo di velocità e di temperatura della ventola. Vari nodi di temperatura possono confluire all'interno dello stesso microcontrollore il quale può calcolare - se richiesto - una risposta appropriata per varie ventole.
L'interfacciamento al sensore di temperatura può basarsi su soluzioni sia analogiche sia digitali: entrambi possono essere facilmente implementati attraverso un piccolo microcontrollore. L'uscita del termistore o l'uscita analogica del sensore possono essere connesse direttamente a un ADC onboard. I sensori con uscita digitale possono essere collegati a una porta seriale onboard o a qualsiasi altra porta standard di input/output del microcontrollore.
L'interfacciamento con le ventole a 3 o 4 fili può avvenire attraverso la connessione a comando di velocità PWM generato dall'uscita PWM del microcontrollore o a una linea standard di I/O che può essere programmata per generare il segnale PWM. Il segnale di feedback tacometrico può essere connesso direttamente a un ingresso del microcontrollore, per esempio una linea standard di I/O.

La gestione delle funzioni periferiche
I risparmi più significativi associati all'uso di un piccolo microcontrollore in questo tipo di applicazione derivano della possibilità di integrare funzioni periferiche extra a fronte di un costo aggiuntivo molto limitato.
Molti microcontrollori dispongono - per esempio - di una EEPROM integrata che può sostituire la memoria stand-alone spesso utilizzata per immagazzinare numeri seriali, dati di diagnosi e altre informazioni importanti nei grandi sistemi. Il microcontrollori può anche essere codificato per emulare un dispositivo EEPROM standard I2C o SPI, in modo che il software d'interfacciamento alla EEPROM non debba essere variato.
Un altro componente comune nei grandi sistemi è il clock real-time. Anche questa funzione può essere integrata nel microcontrollore per emulare i dispositivi di temprorizzazione real-time esistenti, senza variare il software che s'interfaccia col clock. In questo contesto, l'ampio range operativo del microcontrollore garantisce un ulteriore beneficio: esso può infatti essere alimentato direttamente da una batteria al litio a 3V utilizzabile come fonte di back-up.
Il microcontrollore può rilevare quando l'alimentazione principale viene rimossa e passare di conseguenza a una modalità operativa low-power. Questo è possibile mantenendo attivo il timer che s'interfaccia a un oscillatore a 32 kHz, mentre la parte rimanente del microcontrollore entra in modalità "sleep". Il microcontrollore si "risveglia" solo ogni secondo per pochi microsecondi per aggiornare il timer, e successivamente torna in modalità sleep.
Tra le funzioni periferiche che possono essere integrate in un microcontrollore rientrano anche il rilevatore di intrusioni e vari blocchi general-purpose quali ADC, interfacce utente, reset e watchdog timer.

L'importanza del progetto software

Se da un lato la programmabilità del microcontrollore offre molti benefici, dall'altro pone al progettista qualche vincolo.
Poiché nelle architetture di sistema alternative il microcontrollore è spesso l'unico dispositivo a girare, e questo può avvenire per l'intera vita del prodotto (se è clock real-time con back-up di batteria), la chiave per ottenere un sistema affidabile è il firmware.
In questo caso è raccomandata una scrupolosa pianificazione del firmware e delle risorse da dedicare a ciascuna task. L'obiettivo è integrare varie task in un unico dispositivo. Questo richiede un firmware capace di eseguire più task, apparentemente in simultanea, con tempistiche prevedibili e ripetibili. La prima tentazione sarebbe di prendere in considerazione un sistema operativo in tempo reale. Nel nostro caso però l'obiettivo è di ridurre i costi, pertanto la memoria programma deve essere ridotta al minimo.
Un sistema semplice basato su macchine a stati permette di superare facilmente il problema. Le funzioni software compatibili possono essere raggruppate insieme e codificate nelle macchine a stati. Queste vengono quindi richiamate in sequenza dall'interno di un loop infinito. Il tempo di avvio del loop è fissato da un timer hardware, così la singola macchina a stati può implementare dei timer software basati sul numero di volte che viene chiamata..
Le comunicazioni tra le varie macchine a stati e le periferiche sono gestite attraverso delle variabili RAM e dei semplici protocolli. La parte di gestione delle priorità richiesta dal sistema è eseguita attraverso semplici funzioni che ritardano o differiscono l'esecuzione delle macchine a stati di priorità inferiore a favore delle macchine a stati che eseguono task ad alta priorità.
È anche possibile implementare facilmente funzioni legate all'affidabilità. Per esempio, configurare il timeout del watchdog timer a un valore più lungo del tempo di loop consentirà al sistema di rispondere prontamente all'eventualità di un program counter corrotto, nonché di identificare una macchina a stati anomala dopo il reset.
Oltre a questo, tale approccio consente al sistema di riavviare qualsiasi macchina a stati non corrotta al timeout. La natura multi-tasking di questo sistema permette di eseguire nella RAM dati, in modo trasparente, operazioni di check sum o di "CRC," garantendo l'immediata individuazione dei dati corrotti. Al tutto è possibile associare task di rilevamento errori e di recovery, consentendo il rilevamento e il rientro coordinato da condizioni di guasto o errore.
La capacità del microcontrollore di scrivere nella propria memoria programma consente al sistema discaricare aggiornamenti in caso fossero stati rilevati bug o qualora fosse necessario un update delle funzioni.
La Fig. 4 riporta uno schema a blocchi in cui il microcontrollore sostituisce molte delle funzioni viste nella Fig. 1. È utile notare un'unica connessione I2C che emula molti degli altri componenti, senza che il processore centrale si avveda della differenza. In funzione del sistema è possibile integrare nel microcontrollore anche un'interfaccia utente. Nel nostro esempio, l'interfaccia utente è ancora esterna.
L'approccio illustrato in questo articolo non è in grado di eseguire sempre tutte le funzioni periferiche. A tale proposito possono infatti essere necessari dei dispositivi specializzati. Utilizzare però un piccolo microcontrollore in un grosso sistema permette di garantirsi un'alternativa che offre costi ridotti, maggiori funzionalità e doti di programmabilità.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome