• Non ci sono risultati.

5 Unità di elaborazione

N/A
N/A
Protected

Academic year: 2021

Condividi "5 Unità di elaborazione"

Copied!
10
0
0

Testo completo

(1)

5 Unità di elaborazione

In questo capitolo viene presentato il lavoro svolto sulla parte di elaborazione, che si basa sul microcontrollore ATmega16, prodotto dalla Atmel e appartenente alla famiglia dei microcontrollori AVR con architettura RISC a 8 bit.

Poiché il sistema non necessita di particolare potenza di calcolo, dato che l’aggiornamento della misura viene fatto ogni 3 s, per la logica di controllo si è ritenuto sufficiente utilizzare un microcontrollore che ha il pregio di un basso costo, elevata flessibilità e facilità di programmazione.

Inoltre un microcontrollore mette a disposizione in un unico package blocchi circuitali dedicati allo svolgimento di particolari funzioni che altrimenti andrebbero aggiunti esternamente.

La scelta è caduta sul modello ATmega16, perché mette a disposizione 1 Kbyte di ram e 16 Kbyte di Flash EEPROM a un costo contenuto, oltre che a tre timer interni di cui uno a 16 bit (gli altri due sono a 8 bit), utilizzabili in varie modalità di funzionamento.

5.1 Unità di elaborazione

I compiti assegnati alla parte digitale sono sia di elaborazione pura (calcolo velocità dai dati ricavati dai sensori), sia di generazione del segnale di pilotaggio per la parte analogica di trasmissione che di ricezione di segnali dalla parte analogica di ricezione.

(2)

risoluzione: poiché risulta necessario adottare un timer con una frequenza di clock maggiore o uguale a circa 1,4 MHz (per maggiori dettagli si veda il paragrafo 2.7), si è utilizzata una frequenza di clock del contatore di 2 MHz, più semplice da ottenere, rispetto a 1,4 MHZ, dividendo la frequenza di clock del microcontrollore con un opportuno prescaler.

Il numero di bit del contatore, affinché non presentasse un traboccamento durante il conteggio22, è stato scelto in accordo alla (5.1).

[

]

[

]

(

)

max min max max 2 min max 2 1 log 1 12, 968 13 T R n T R clk clk d t c v t T f d n c v n → → = − < − ⋅ →  ⋅  > − = → −   ≥ (5.1)

Pertanto un contatore a 16 bit risulta più che adeguato per i nostri scopi; con tale contatore, volendo aumentare la risoluzione, ci si potrebbe spingere fino a una frequenza di clock di 16 MHz senza il rischio di eventuali traboccamenti.

A causa della variabilità della velocità di fase dell’onda acustica con la temperatura, espressa analiticamente nell’equazione (2.9), si è adottato un sistema di misura della temperatura ambientale e un adattamento della velocità di fase

22

Per semplificare la parte software si è evitato l’uso di un timer con un numero di bit limitato e tale da generare un traboccamento; tale situazione potrebbe comunque essere gestita abilitando il timer in questione a generare una opportuna interruzione in caso di traboccamento, con conseguente incremento di una variabile di appoggio.

(3)

dell’onda alla temperatura misurata. Il sensore utilizzato è un MAX6631, un sensore di temperatura digitale con interfaccia seriale a 3 fili compatibile SPI, che permette di essere interfacciato con una logica senza la necessità dell’utilizzo di convertitore ADC aggiuntivo.

L’utilizzo dell’ATmega16 ha permesso di avere a disposizione, integrati nel dispositivo, tre timer, due a 8 bit e uno a 16 bit, un’interfaccia SPI e una seriale USART, utile soprattutto in fase di debug.

Il quarzo che si è utilizzato per fissare la frequenza di clock, presenta una stabilità con la temperatura compresa fra -25 ppm e +25 ppm; ciò significa che, per una frequenza di clock del contatore di 2 MHz, si ottiene un errore massimo sul tempo di volo, causato dalla variabilità della frequenza di clock con la temperatura, pari a 100 ns. Tale errore sul tempo di volo comporta un errore sulla velocità di circa 0,014 m/s, inferiore di qualche ordine di grandezza rispetto ad altri tipi di errore esistenti, in special modo l’errore dovuto al rumore acustico e l’errore dovuto al moto turbolento dell’aria.

5.2 Report firmware e implementazione metodo di calcolo

L’implementazione del firmware è avvenuta secondo i diagrammi di flusso riportati in figura 5.1 e in figura 5.2.

La figura 5.1 rappresenta il diagramma di flusso principale, ovvero è l’evoluzione della macchina dall’avvio fino al funzionamento ciclico, mentre la figura 5.2 rappresenta il diagramma di flusso della sezione più critica, ovvero del calcolo della media di vari tempi di volo per una misura di un campione di velocità.

(4)
(5)

figura 5.2: diagramma di flusso dell’algoritmo dedicato al calcolo della media dei tempi necessari per una misura (si tratta della specificazione dell’istruzione “CALCOLO MEDIA DEL TEMPO PER UNA

(6)

Riferendoci al diagramma di flusso di figura 5.2, ovvero all’algoritmo dedicato al calcolo della media dei tempi necessari per una misura, si consideri che il riferimento temporale principale è rappresentato dal timer a 16 bit (“16-bit Timer/Counter1”), che serve sia da contatore vero e proprio per il rilevamento dei campioni del tempo di volo, sia come base dei tempi più in generale, rispetto alla quale viene ad esempio riferito il periodo temporale che separa l’invio di due treni di impulsi distinti.

In particolare il 16-bit Timer/Counter1 viene abilitato a generare un’interruzione quando il contatore raggiunge il valore impostato nel registro OCR1A (che corrisponde al periodo temporale che separa due distinti treni di impulsi). A tale tipo di interruzione è ovviamente associata una specifica routine di interruzione, all’interno della quale viene dato il via alla generazione del singolo treno di impulsi.

In dettaglio, la generazione del singolo treno di impulsi avviene a sua volta attraverso l’utilizzo del timer “8-bit Timer/Counter2”, che genera i riferimenti temporali rispetto ai quali vengono messe alte o basse le porte di I/O collegate con i gate dei MOSFET del ponte. Questa ultima operazione si realizza sempre grazie al meccanismo dell’interruzione, ovvero i riferimenti temporali del “8-bit Timer/Counter2” fanno sì che esso generi, grazie alle sue impostazioni, una specifica richiesta di interruzione che manda in esecuzione la relativa routine di interruzione, ovvero quella associata al tipo di interruzione generata dal “8-bit Timer/Counter2” in quelle condizioni, routine che gestisce le porte di I/O in modo

(7)

che sia generato correttamente il segnale di pilotaggio del ponte H.

Riferendoci alla sequenza temporale delle istruzioni (si tenga presente che, a questo punto dell’elaborazione, il programma principale ha già provveduto a configurare le porte nello stato iniziale, ovvero a impostare la direzione dei pin di I/O e a mettere a 0 il valore di quelli collegati ai gate dei MOSFET), viene prima impostato e abilitato il “16-bit Timer/Counter1” e poi viene impostato lo “8-bit Timer/Counter2”.

A questo punto il programma torna nel ciclo principale, che sarà interrotto via via dalle varie interruzioni. Quando va in esecuzione la routine di interruzione lanciata dal “16-bit Timer/Counter1”, viene abilitato il timer 2 a generare il treno di impulsi.

Una volta generato il treno di impulsi, il timer 2 viene fermato. A questo punto vengono abilitate le interruzioni esterne (in questa versione preliminare si è evitato di abilitare le interruzioni esterne solo dopo il tempo minimo di volo possibile, preferendo abilitarle subito dopo la fine del treno di impulsi per utilizzare lo stesso riferimento temporale e quindi la solita interruzione). Quando arriva un’interruzione esterna, attesa sulle porte corrispondenti, si va a leggere il valore del contatore a 16 bit, a validare tale istante di arrivo e, se è valido, si aggiunge il dato alla media e si incrementa di uno la variabile di controllo “numero di impulsi ricevuti duranti la misura della media di un tempo di volo”. Se l’interruzione non arriva, oppure arriva, ma la routine di interruzione non valida il dato, non si aggiunge alcunché alla media e non si incrementa la variabile

(8)

di controllo “numero di impulsi ricevuti duranti la misura della media di un tempo di volo”.

Quando è stato inviato il numero stabilito di treni di impulsi per una misura, si torna alla sequenza di istruzioni principali descritta nel diagramma di flusso di figura 5.1, restituendo la variabile “numero di impulsi ricevuti duranti la misura della media di un tempo di volo”, e la media del tempo di volo fatta con i campioni disponibili (tale variabile contiene 0 se non è stato validato nessun campione del tempo di volo).

Riferendoci al diagramma di flusso di figura 5.1, relativo alla sequenza di istruzioni principale, il sistema compie le elaborazioni seguenti: dopo la fase di avvio e le varie inizializzazioni e abilitazioni, il programma principale provvede a calcolare il tempo di riferimento (se si esclude la correzione con la temperatura, è il tempo che sarà utilizzato come riferimento per tutte le misure fino alla successiva accensione).

Dopodiché passa in un ciclo infinito dove provvede a svolgere le seguenti azioni, nell’ordine in cui sono riportate.

1. Viene calcolata una media di campioni del tempo di volo (i campioni sono in numero adeguato a fornire un dato attendibile), utilizzando l’algoritmo, descritto poco sopra, dedicato al calcolo della media dei tempi necessari per una misura;

2. si esaminano le variabili di controllo;

(9)

utilizzare tale misura, oppure restituire un messaggio di errore; 4. si eseguono istruzioni di controllo e eventuale aggiornamento; 5. si ritorna al punto 1.

Si accenna al fatto che alcuni parametri del software possono essere stabiliti solo dopo una fase di collaudo sul campo; ad esempio, per quanto riguarda l’accuratezza, bisogna vedere quanti campioni del tempo di volo servono per aver una misura attendibile, in particolare per mediare gli effetti dovuti al moto turbolento; oppure, sempre in base alle risposte del collaudo sul campo, si può decidere di aumentare l’intervallo temporale fra l’invio di un treno di impulsi e il successivo (infatti, con un treno di impulsi ogni 4 ms, si ha ogni 3 s, corrispondenti all’intervallo temporale ogni quanto viene aggiornata la misura, l’invio di 750 treni di impulsi ecc.).

5.3 Possibili miglioramenti e direzione di lavoro

Nello sviluppo del software, per motivi di semplicità e rapidità di sviluppo, non si è potuto realizzare un algoritmo troppo “raffinato”, e pertanto alcune funzioni possono essere migliorate in modo da aumentare l’efficienza generale.

La prima cosa da migliorare, è rendere possibile la ricezione di una commutazione da parte dei comparatori solo nella finestra temporale in cui l’impulso può ragionevolmente essere ricevuto (rispettivamente un tempo minimo e massimo, corrispondenti ai valori limite assumibili dalla velocità); questo può essere fatto abilitando le interruzioni esterne, provenienti dai comparatori, non dopo la fine del treno di impulsi in trasmissione, ma solo nella finestra temporale prevista.

(10)

Miglioramenti vanno introdotti nell’algoritmo di elaborazione e di validazione dell’istante di arrivo, nel sistema di acquisizione dati dai comparatori, nel sistema di filtraggio numerico (qui se ne è adottato uno che semplicemente esegue la media fra i campioni di un intervallo di misura).

Non sono poi state affrontate le problematiche relative all’utilizzo di una misura valida (visualizzazione dei dati, memorizzazione dei dati ecc.); in base alle necessità in tal senso, la scalabilità della famiglia di microcontrollori AVR con architettura RISC a 8 bit, permette di adottare unità più performanti mantenendo (o almeno con poche modifiche) la compatibilità del software.

Figura

figura 5.1: diagramma di flusso principale
figura 5.2: diagramma di flusso dell’algoritmo dedicato al calcolo della media dei tempi necessari per  una misura (si tratta della specificazione dell’istruzione “CALCOLO MEDIA DEL TEMPO PER UNA

Riferimenti

Documenti correlati

L’efficienza della convezione esterna, trattata con il formalismo della mixing lenght 11 , `e stata calibrata, come gi`a detto, in modo da riprodurre il colore delle ramo delle

4.7 il range d’et`a stimato per il bulk della popolazione dell’ammasso sembrerebbe essere 11 ÷ 13 Gyr ed il modulo di distanza corrispondente stimato dal fitting del ramo

Geometria per

Se pensiamo alla realizzazione di una tipica struttura a telaio in calcestruzzo armato e sup- ponendo di lavorare con un software agli elementi finiti partiremo inserendo una serie di

Possiamo infine

Man mano che i libri si spostano online, si rendono sempre più necessari sistemi simili, per connettere tra loro i molteplici riferimenti tra libri

Il carattere impulsivo di una forza è la caratteristica fondamentale degli urti: durante un urto, per esempio tra due biglie d'acciaio, le forze interne che governano

Come si può osservare inizialmente viene prodotto un campo di vento bidimensionale orizzontale di primo tentativo, che può essere costante, variabile o