Come utilizzare un circuito di supervisione hardware usando l’ADM1232
L’architettura dei microcontrollori ha raggiunto ottimi livelli di affidabilità con elevati livelli prestazionali. Solitamente, quando si parla di affidabilità, si intende la capacità del micro di funzionare in ambienti critici, dove gli intervalli di temperature sono estesi (-40°C +85°C) o dove la presenza di rumori elettromagnetici o altri elementi fisici non deve certamente bloccare il funzionamento del microcontrollore.
Nella maggior parte dei casi i blocchi software sono ancora causati da errori di scrittura del firmware che gira sul micro. Questi blocchi sono tipicamente dovuti a loop infiniti o deadlock; errori che aumentano all’aumentare della complessità del codice.
Quando non possiamo permetterci nessun tipo di blocco vengono impiegati sistemi di supervisione hardware che, tramite sistemi integrati all’interno del micro stesso (Watchdog Timer) o con specifici moduli esterni, possono eseguire un reset del micro appena ‘si accorgono’ che l’esecuzione del codice del micro è bloccata.
Alcuni moduli permettono anche di controllare la qualità della tensione di alimentazione, e di eseguire un reset non appena si verificano abbassamenti di tensione.
Il dispositivo che ho utilizzato per questo tutorial è l’integrato ADM1232 prodotto da Analog Device, molto semplice da utilizzare e dal costo contenuto (circa 2 €).
L’idea di base è quella di controllare la presenza di uno strobe, un segnale impulsivo, generato dal microcontrollore, che deve presentarsi costantemente entro certi valori di tempo.
Se questo segnale dovesse mancare (indice di un blocco di funzionamento del microcontrollore), il circuito di supervisione ADM1232 eseguirà un reset del microcontrollore.
La figura seguente mostra il tipico collegamento tra il circuito di supervisione ed il microcontrollore:
Il diagramma a blocchi è rappresentato nella figura seguente:
Il dispositivo genera un impulso di reset ad intervalli che possono variare tra 150ms, 600ms e 1200ms. Questi tre valori sono impostabili tramite il pin TD (Time Delay), per selezionare 150ms il TD va collegato a massa, per selezionare 600ms il pin TD va lasciato appeso (senza collegarlo ne a Gnd ne a Vcc), per selezionare 1200ms va collegato alla Vcc.
Per evitare la generazione dell’evento reset, dobbiamo inviare un impulso negativo al pin STROBE.
Questo impulso deve essere inferiore del tempo di reset impostato, quindi se ad esempio abbiamo selezionato il tempo di 1200ms, al pin STROBE dovrà arrivare un segnale impulsivo con un periodo inferiore ai 1200ms.
I grafici seguenti mostrano l’andamento dei segnali:
Mentre il seguente grafico mostra la generazione dell’impulso di reset quando il segnale di strobe supera i 1200ms:
Affrontiamo la parte pratica realizzando il circuito seguente utilizzando un ATMEGA328P Stand Alone:
Ho impostato il TD a 1200ms, portando a +5V il pin TD dell’integrato supervisore ADM1232.
Lo sketch di test esegue una commutazione del pin 9, per generare il segnale di STROBE che permette di interdire la generazione del segnale RESET. Ho inserito un ritardo software di 500ms per simulare l’esecuzione di altro codice.
In questa condizione il segnale di STROBE è generato ogni 100ms circa e quindi essendo inferiore al tempo di 1200ms, il segnale di RESET non viene generato.
void setup() { //pin 9 in uscita pinMode(9, OUTPUT); } void loop() { //condizione per la quale non viene //generato il reset poichè il tempo di //esecuzione è inferiore ai 1200ms //segnale STROBE digitalWrite(9,HIGH); digitalWrite(9,LOW); //simulazione ritardo esecuzione delay(500); }
Invece nello sketch seguente viene simulato un ritardo maggiore di 1200ms, in questo caso il chip ADM1232 non ricevendo il segnale di STROBE entro i 1200ms produrrà il segnale di RESET per riavviare l’esecuzione del codice sulla ATMEGA328P.
void setup() { //pin 9 in uscita pinMode(9, OUTPUT); } void loop() { //condizione per la quale non viene //generato il reset poichè il tempo di //esecuzione è inferiore ai 1200ms //segnale STROBE digitalWrite(9,HIGH); digitalWrite(9,LOW); //simulazione ritardo esecuzione delay(2000); }
Attenzione il circuito supervisore ADM1232 può essere usato solo su dispositivi privi di bootloader. Infatti la presenza del bootloader renderà l’esecuzione del codice, al primo avvio molto lenta, circa 1,5 secondi. Dato questo tempo il circuito supervisore non potra mai ricevere, entro la soglia di 1,2 secondi, l’impulso di strobe, di conseguenza resetterà perennemente il microcontrollore.
Quando il vostro progetto è particolarmente complesso o richiede sicurezze aggiuntive, avere un circuito di supervisione permetterà di utilizzarlo in situazioni dove è richiesta una maggiore affidabilità ad esempio di definendo nel blocco setup() delle impostazioni di default di sicurezza, come il posizionamento iniziale di motori o la diseccitazione dei relè.
Related posts
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test