La gestione del Brown-out reset

Dopo aver introdotto il fenomeno del brown-out, l’articolo presenta una serie di circuiti con cui è possibile gestirlo e prevenire il malfunzionamento del sistema.

Per i microcontrollori e le CPU in generale è importantissimo, per arrivare a decodificare ed eseguire correttamente le istruzioni, che la tensione di alimentazione non scenda al di sotto del minimo valore consentito in relazione anche alla frequenza operativa del processore. Nel caso questo fenomeno si verifichi gli effetti non sono facilmente prevedibili ne sui dati interni ne sulle linee di controllo che raggiungono le periferiche esterne. Le conseguenze più frequenti di tutto ciò sono la corruzione dei registi interni della CPU, delle periferiche e delle

Cosa è il Brown-Out

Il brown-out è un fenomeno che si manifesta come visualizzato in figura 1 con la diminuzione temporanea della tensione di alimentazione che scende al di sotto del limite minimo consentito per il corretto funzionamento della logica.

Figura 1: Fenomeno del brown-out.

Figura 1: Fenomeno del brown-out.

Solitamente il fenomeno si manifesta per brevi periodi dopodiché la tensione di alimentazione si riporta al proprio valore nominale. Le cause del brown-out possono essere malfunzionamenti o un inadeguato stadio di regolazione di tensione. Il fenomeno del brown-out è solitamente insidioso poiché raramente si presenta in fase di sviluppo del sistema, ma solamente quando si arriva alla fase produttiva e puntualmente si manifesta nei modi più disparati. Può capitare che livelli logici non siano correttamente interpretati o che situazioni di elevate correnti producano livelli non validi per gli stadi di ingresso CMOS. Molto frequente è la corruzione dei dati contenuti nella memoria interna dei microcontrollori che può causare i più impensabili problemi in qualunque parte del sistema ed in un periodo di tempo difficilmente predicabile. In questo ultimo caso neppure con l’ausilio di emulatori e debugger è facile scovare la causa dei problemi. Il fenomeno del brown-out non è da confondere con il black-out dove la tensione di alimentazione è completamente assente per certo periodo di tempo.

Come gestire  il Brown-Out

Per impedire malfunzionamenti di un sistema in seguito al fenomeno del brown-out è necessario monitorare costantemente la tensione di alimentazione ed evitare che venga eseguito del codice durante queste fasi. La soluzione più utilizzata è quella di controllare la tensione di alimentazione con un circuito esterno di LVD, ossia Low Voltage Detection. Al di sotto di una determinata tensione di soglia VT  il circuito di LVD forza il reset della CPU, questa immediatamente interrompe l’esecuzione del codice finché la situazione non si ripristina. Quando la tensione di alimentazione risale oltre la tensione di soglia il segnale di reset si disattiva dopo un adeguato intervallo di sicurezza in cui non ci sono stati ulteriori fenomeni di brown-out. La CPU riprende ad eseguire  il codice dal Reset Vector ripartendo quindi da uno stato certo. Come tensione di soglia viene solitamente scelto un valore pari ad una diminuzione compresa tra il 5% e il 15% della tensione nominale di alimentazione, questo per poter gestire situazioni in cui la tensione di alimentazione è fluttuante ma tale da non generare malfunzionamenti del sistema. Ovviamente la scelta della tensione di soglia deve inevitabilmente considerare anche alla componentistica presente nel sistema.

Come generare un segnale di Brown-Out reset

Per interrompere l’esecuzione della CPU in seguito ad un evento di brown-out viene generato un segnale che viene detto sinteticamente di BOR (ossia di Brown-out reset). Tale segnale insieme alle altre cause più comuni che richiedono un reset della CPU va a generare un unico segnale di reset globale del sistema. In figura 2 viene evidenziato lo schema a blocchi del modulo di reset del PIC24F, sono visibili tutte le possibili cause di reset a partire dal reset comandato dal software, dal reset disposto attraverso un pulsante esterno, al reset comandato dal timer di watchdog.

Figura 2: Schema a blocchi del modulo di reset del PIC24F.

Figura 2: Schema a blocchi del modulo di reset del PIC24F.

In evidenza anche il POR, ossia il Power On Reset che mantiene la CPU nello stato di reset fino al completamento della procedura di power on del sistema ed ovviamente  il blocco di BOR che si vuole realizzare. Se non si ha la fortuna di lavorare con microcontrollori che integrano la gestione del brown-out reset come il PIC considerato in precedenza, le alternative a disposizione per realizzare un circuito di BOR sono suddivisibili in tre tipologie. La prima è quella che privilegia il consumo di potenza del circuito, ovviamente questa soluzione risulta la più indicata per i dispositivi portatili alimentati a batteria, dove la durata di quest’ultima è un fattore importantissimo. La seconda soluzione applicabile è quella di privilegiare  il costo e di conseguenza minimizzare anche il numero di componenti utilizzati per realizzare il circuito. Ovviamente questa soluzione va bene per applicazioni sensibili al fattore costo e dove il consumo di potenza non è determinante. Infine la terza soluzione, finalizzata a massimizzare l’accuratezza, è quella di utilizzare circuiti integrati realizzati appositamente  con l’intento di individuare il brown-out. In figura 3 abbiamo un circuito che rientra nella prima tipologia di soluzione descritta in precedenza.

Figura 3: Soluzione a basso consumo per la generazione del BOR.

Figura 3: Soluzione a basso consumo per la generazione del BOR.

Il consumo di potenza è ridotto, all’incirca di 0,5uA per un alimentazione a 3V e di 1uA per una alimentazione a 5V. Il costo della componentistica non è sicuramente elevato, tuttavia si contano tre transistor, cinque resistenze e tre condensatori che non sono pochi. In figura 4 è mostrata la risposta del circuito in seguito alle variazioni della VCC.

Figura 4: Forme d’onda sull’oscilloscopio del segnale di reset al variare della VCC per il circuito di figura 3.

Figura 4: Forme d’onda sull’oscilloscopio del segnale
di reset al variare della VCC per il circuito di figura 3.

Il rivelatore di brown-out è composto di due stadi il vero e proprio rilevatore e l’amplificatore. Attraverso le resistenze R1 e R2 viene determinata la tensione di soglia. R1 solitamente viene selezionata con un valore elevato tipico di circa 10Mohm per minimizzare le correnti coinvolte.  Il transistor Q1 è normalmente in conduzione e passa in interdizione quando si verifica una diminuzione della tensione di alimentazione al di sotto della tensione di soglia. L’uscita del rivelatore è amplificata con uno stadio a bassa potenza, nel funzionamento normale Q2 è interdetto e R5 mantiene alto il segnale di reset. In una situazione di brown-out il segnale  di reset passa al livello basso. Il transistor  Q3 e le resistenze R3 e R4 realizzano un feedback con isteresi quando il reset è al livello basso. In particolare la resistenza R4 determina l’isteresi applicata alla tensione di soglia ed il suo valore è inversamente proporzionale all’isteresi che si vuole ottenere. Ovviamente  il tempo di risposta di questo circuito non è dei più rapidi tuttavia la presenza di una isteresi abbondante e di un tempo di commutazione ridotto del segnale di BOR lo rendono molto accurato. Per ottenere una accuratezza ancora più marcata R1 e R2 e bene che siano scelte con una precisione dell’1% e che i condensatori siano a basso ESR per migliorare l’immunità ai disturbi.  Il circuito in figura 5 è ottimizzato per esigenze di costo, infatti utilizza pochi componenti consentendo anche un risparmio di spazio sulla scheda.

Figura 5: Soluzione a basso costo per la generazione del BOR.

Figura 5: Soluzione a basso costo per la generazione del BOR.

 

Figura 6: Forme d’onda sull’oscilloscopio del segnale di reset al variare della VCC per il circuito di figura 5.

Figura 6: Forme d’onda sull’oscilloscopio del segnale di reset al variare della VCC per il circuito di figura 5.

La corrente assorbita da questo circuito è abbastanza elevata rendendolo inutilizzabile per circuiti alimentati a batteria. La velocità di risposta del segnale di reset in seguito ad una diminuzione sotto soglia della tensione di alimentazione è bassa, inoltre, il circuito è estremamente sensibile alle variazioni dei componenti. Per questi motivi la tensione di soglia per il brown-out reset va scelta solitamente almeno un 15% al di sotto della tensione di alimentazione. Il transistor è normalmente attivo e mantiene la tensione di reset a VCC. Quando la tensione scende al di sotto del valore di soglia determinato da R1 e R2 il transistor  si in terdice e R3 porta basso il segnale di reset. Per migliorare i tempi di risposta del circuito il transistor deve essere selezionato con un hFE elevato, R1 deve essere scelta di un valore non superiore a 200K ohm per impedire che la corrente di base del transistor non influenzi  il partitore resistivo. La resistenza R4 serve per un possibile inserimento di un pulsante per il reset manuale, in ogni caso l’accoppiata R3+R4 è bene non superi i 50K ohm. Come detto in precedenza R1 e R2 vanno selezionate con un accuratezza sul valore dell’ 1% perché sono determinanti nell’impostare  il valore della tensione di soglia come si vede dalla formula che segue.

Una possibile ottimizzazione consiste nel sostituire R1 con un diodo zener, in tal caso il reset scatta quando la tensione di alimentazione scende sotto la tensione di zener più una VBE. Una soluzione con diodo Zener permette una accuratezza di ±100mV sulla tensione di soglia. Una soluzione ottimale per generare il segnale di brown-out reset prevede l’utilizzo di un circuito integrato dedicato. Questa scelta, schematizzata in figura 7, permette un ottima accuratezza sulla tensione di soglia, un consumo di corrente bassissimo e uno spazio occupato sul PCB ridotto.

Figura 7: Soluzione a circuito integrato per la generazione del BOR.

Figura 7: Soluzione a circuito integrato per la generazione del BOR.

Inoltre questa soluzione gode dei benefici di avere solitamente già integrati nel generatore del segnale di reset anche la gestione del POR e eventuali timer aggiuntivi per il watchdog. Sul mercato i dispositivi di questo tipo sono molteplici, per la maggior parte l’accuratezza sulla tensione di soglia è del ±1% e il consumo di corrente nell’ordine dei microampere. Le principali differenze tra i dispositivi disponibili sul mercato consistono nella tipologia del driver di uscita che può essere push-pull o open-drain. I  driver opendrain consentono di inserire più agilmente un eventuale reset manuale a pulsante (figura 7-B) o di gestire un programmatore in-system. Nulla vieta di poter fare la stessa cosa anche per le uscite pushpull ma è necessario inserire una resistenza supplementare (figura 7-A).

Conclusioni

L’utilizzo di un circuito in grado di rilevare il fenomeno del brown-out può proteggere un sistema a microprocessore da un considerevole numero di problemi legati alla tensione di alimentazione. Se avete avuto esperienze con fenomeni che sembravano inspiegabili sulle vostre schede ed eravate privi di un circuito di supervisione delle tensioni di alimentazione, allora è proprio il caso di aggiungere questo importantissimo ingrediente per la buona riuscita del progetto.

 

 

Scrivi un commento

EOS-Academy

Ricevi GRATIS le pillole di Elettronica

Ricevi via EMAIL 10 articoli tecnici di approfondimento sulle ultime tecnologie