1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

31
1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2

Transcript of 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

Page 1: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

1

Progetto di

Luigi Nardi

in collaborazione con

 

 

Doppio visualizzatore di temperatura:

2µS1T2

Page 2: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

2

Progettazione e sviluppo di uno strumento elettronico digitale di utilizzo industriale.

Tramite un sensore si rileva una grandezza fisica, una temperatura, trasformandola in un segnale elettrico. Il segnale viene acquisito da un microcontrollore che provvede a linearizzarlo ed elaborarlo per poi inviarlo a un display che consente di leggere la misura di grandezza in questione.

Misura di temperature positive.

Obiettivi

Page 3: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

3

Campo di applicazione dello strumento:

misurare la temperatura raggiunta dagli avvolgimenti di un motore elettrico per attivare una ventola di raffreddamento qualora la temperatura superi i valori limite.

misurare la temperatura in forni per la sterilizzazione dei contenitori a uso farmaceutico.

misurare la temperatura in apparati di frenatura come ruote di autocarri per prevenzione inneschi incendi.

Sono tutte applicazioni che riguardano temperature positive comprese nel range della Pt100.

Page 4: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

4

Strumenti utilizzati:

Turbo C++. Prototipo in linguaggio C per analizzare, in un ambiente al quale sono avvezzo, le problematiche concettuali del programma e non distogliere l’attenzione con le peculiarità di un nuovo linguaggio.

Pt100. La sonda utilizzata è la Pt100: Pt sta per platino, e 100 sta per 100 Ω che è la resistenza a 0 °C. La Pt100 è una resistenza che varia rispetto alla temperatura R(T). A –200 °C si ha una resistenza 18,52 Ω, a 0 °C si ha 100 Ω e a 660 °C si ha 332,79 Ω. La funzione R(T) individuata dalla Pt100 è non lineare il che dà luogo allo sviluppo di una parte apposita del programma e di una serie di accorgimenti in più.

Page 5: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

5

ISOTECH PRT. Per ottenere, dato un valore di temperatura o di resistenza, il corrispondente valore di resistenza o di temperatura, si utilizza un programma della ISOTECH chiamato PRT(dove P sta per Pt100, R sta per resistenza e T per temperatura).

L’ulteriore potenzialità: si può fissare un passo X di temperatura o di resistenza e ottenere tutti gli equivalenti valori, rispettivamente di resistenza o di temperatura dati due valori, iniziale e finale. Il valore iniziale verrà incrementato di X ogni volta e verrà calcolato il corrispondente valore.

Questo dà luogo alla creazione di una tabella che lega R a T, dato il passo X.

Page 6: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

6

L’ADuC816. L’elevata scala di integrazione raggiunta dai moderni processi tecnologici permette attualmente di disporre di single chip microcomputer.

Questi integrati dispongono, al loro interno, di un sistema completo oltre alla CPU: dispositivi di I/O,memoria interna RAM e memoria interna ROM o EPROM.

L’8051 è un single chip microcomputer della Intel.

L’ADuC816 ha come base l’8051 con dei componenti aggiunti: ADC e generatori di corrente interni.

Page 7: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

7

Oltre la completa compatibilità con l’8051 e il suo successore l’8052, l’integrato contiene dei componenti fondamentali per il nostro scopo il che ci permette di ottimizzare il nostro problema in termini di: spazio, numero di componenti quindi affidabilità, minore onere per gestire ordini di magazzino, costo sviluppo schede e montaggio, manutenzione più semplice, tutte risorse fondamentali del progetto.

A parte alcune cose specifiche, l’ADuC816 contiene le unità essenziali di un sistema a microprocessore: ALU, registri fondamentali (program counter, accumulatore, stack pointer, registro di stato), RAM, ROM, I/O.

L’ADuC816 utilizza memorie Flash/EE per i dati e per i programmi, memorie non volatili e riprogrammabili.

Page 8: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

8

IAR Systems. Il programma che viene utilizzato per sviluppare il codice si chiama IAR Embedded Workbench, un potente ambiente di lavoro integrato, per lo sviluppo di applicazioni in C o Assembler, per la famiglia di microprocessori 8051.

Molto simile al C ANSI ma aggiunge una serie di istruzioni e variabili ambiente che ci permettono di pilotare da software i singoli piedini dell’ADuC816 e le altre risorse disponibili tramite l’inclusione di una libreria ADuC816.h che permette al compilatore di riconoscere le istruzioni e i parametri ambiente.

Linguaggio ad alto livello ma che permette di sfruttare le potenzialità del processore a basso livello.

Si genera il file eseguibile con estensione .hex che va caricato direttamente nell’8051 per programmarlo.

Page 9: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

9

Interfaccia seriale. Connessione fisica e una piccola scheda che gestiscono la comunicazione tra il computer e lo strumento. E’ l’interfaccia hardware che serve per programmare l’8051. Allo strumento l’interfaccia seriale viene collegata tramite un connettore appositamente previsto nel progetto hardware.

WSD. Programma della Analog devices che serve per programmare ed eventualmente far eseguire il programma caricato. Per fare questo l’unica operazione che il programma chiede è di selezionare il file eseguibile .hex generato dal programma della IAR.

Page 10: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

10

2μS1T2. Il prodotto finale è il 2µS1T2. La sigla è una composizione di lettere ognuna delle quali ha un significato ben preciso.

E’ formato dai seguenti componenti hardware:

1)      Pt100;

2)      Involucro contenitore di plastica con display;

3)      Scheda alimentatore;

4)      Scheda display;

5)      Scheda CPU;

Page 11: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

11

La scheda CPU contiene i componenti più importanti dello strumento.

Acquisizione del segnale tramite la sonda Pt100 e trasformazione in un segnale digitale N.

Il circuito intero della scheda include il microprocessore e alcuni altri circuiti collegati ad esso: quarzo, alimentazione, filtri passa basso e altri dispositivi per ripulire il segnale dal rumore.

VREF=costante

N

5,6kΩ

Pt100

1kΩ

200µA

Vad

Page 12: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

12

La scheda display permette la visualizzazione dell’elaborato.

Per risparmiare dei collegamenti che renderebbero più caotica la scheda, si utilizza la politica del multiplexing: linee fisiche comuni vengono multiplexate tra i 4 digit con un notevole risparmio di fili

Utilizzo di digit a 7 segmenti:

Per accendere il singolo segmento bisogna mettere a 1 il relativo bit del numero a 8 bit che identifica quel particolare led.

a

b

c

d

f

edp

g

Page 13: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

13

I segmenti sono così associati:

La variabile ambiente P2 contiene il numero a 8 bit che viene visualizzato sul display.

Il digit si seleziona settando uno dei bit del parametro ambiente P3. Per scrivere su uno dei digit del display: inizializziamo, al valore che si vuole visualizzare la variabile ambiente P2 e settiamo in modo appropriato P3 (P3.4 seleziona il digit 1).

Alcune delle codifiche che associano al numero P il simbolo effettivo che noi vediamo sul digit a sette segmenti:

0x3F = “0” ; 0x77 = “A” ; 0x06 = “1” ;

0x00 = “ “ = BLANK ; 0x5B =”2” ; 0x1F = “b“

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

dp g f e d c b a

Page 14: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

14

Fasi e problematicheLinearizzazione

A partire dalla resistenza, stabilendo un passo, si genera una tabella con PRT.

Vogliamo associare al numero esadecimale N a 16 bit in uscita dal convertitore, biunivocamente, un numero reale di temperatura. Per associare N a R e T basta aggiungere un’altra colonna alla tabella generata con PRT: la colonna contiene valori crescenti di N ai quali i valori di T risultano associati direttamente.

Il nostro range di valori di N va da 8000h a FFFFh perché abbiamo scelto una rappresentazione bipolare.

Page 15: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

15

Quello che si memorizza della tabella è soltanto la colonna delle temperature, solo le temperature positive.

Dobbiamo cercare di ridurre al minimo le righe della tabella per la scarsità di memoria .

Tecnica per la memorizzazione di elementi di numero inferiore con un margine di errore impercettibile. Si sceglie un passo esadecimale X e si prendono dalla tabella N/T solo gli n elementi dati da 8000 + n*X per ogni n naturale fino a che non si raggiunge il limite superiore FFFFh.

La struttura della tabella è: N

8000

8000 + x

8000 + 2x

-

-

8000 + (n - 1)x

FFFF

T

0

T1

T2

-

-

T(n-1)

660

Page 16: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

16

Nel caso vogliamo sapere quanto vale la temperatura in Nx possiamo fare una approssimazione di linearità tra il valore precedente e il valore successivo di N e T per sapere il valore di T in corrispondenza di uno degli N scartati: interpolazione lineare.

Formula di interpolazione:

Tx = Ti + * (Nx – Ni)Tf - Ti

Nf - Ni

Page 17: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

17

ESEMPIO di interpolazione lineare:Qual è la temperatura per N = 8026h?

 

Dai dati abbiamo:

Ni = 8000h con Ti = 0°C

Nx = 8026h Tx = ?

Nf = 9000h con Tf = 20°C

Basta sostituire i dati alla formula di interpolazione per ottenere la temperatura cercata.

Abbiamo diminuito drasticamente la memoria occupata utilizzando una tabella con dimensioni più modeste: n+1 righe e 2 colonne.

N

8000

8000 + x

8000 + 2x

-

-

8000 + (n - 1)x

FFFF

N

8000

9000

-

-

-

T

0

20

-

-

-

Page 18: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

18

Prototipo baseRealizzazione di un programma che, a partire da un numero esadecimale a 4 cifre Nx, ci permette di ottenere la temperatura Tx tramite la formula di interpolazione.Funzionalità:1)  - esadecimale N_precedente(esadecimale Nx);2)  - reale T_relativo(esadecimale N);3)  - reale calcola_Tx(esadecimale Nx);Il programma si può strutturare in diversi modi ma bisogna utilizzare il minor numero di istruzioni, costanti e funzioni perché la risorsa importante per noi è la memoria. Il programma va integrato con le altre informazioni importanti: generazione della tabella, la scelta del passo e altre considerazioni.

Page 19: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

19

Il numero di righe dell’array può essere compreso tra 50 e 150. Il passo X deve essere tale che il numero di elementi sia compreso in quell’intervallo e che sia un multiplo di 2 (perché in questo modo X viene intero).Scegliamo di memorizzare 64 elementi, il passo X viene calcolato distribuendo sui valori di temperatura (da 8000h a FFFFh), i 64 elementi cioè dividendo questi due numeri. Otteniamo X = 512.A partire dal numero X calcolo il passo della resistenza Xr da dare in ingresso al programma PRT per generare la tabella che viene utilizzata dal programma.  

Page 20: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

20

Gestione dei pulsanti sulla mascherina. Nel prototipo simuliamo la funzionalità del pulsante.

Lo strumento quando viene messo in funzione legge continuamente i segnali di temperatura dall’esterno che vengono convertiti in tanti numeri esadecimali dall’ADC. Per ognuna di queste misure, bisogna controllare le variabili boolean per vedere se un pulsante è stato premuto. Algoritmo del prototipo:ciclo infinito con una serie di controlli su cosa deve essere visualizzato, cioè sui pulsanti, e per ogni ciclo una conversione da N a T secondo il programma precedente.

Page 21: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

21

Visualizzazione sul display e timerNei prototipi base abbiamo simulato il funzionamento dello strumento interagendo direttamente con il monitor tramite librerie standard del C (conio.h e stdio.h) Il programma diventa molto grande perché il preprocessore sostituisce interamente, agli header file, il codice completo delle librerie.Costruiamo un programma che ci permette di gestire le stampe sul display.Dallo schema della scheda CPU si vede che parte della porta P3 viene usata per abilitare uno dei 4 digit. Gli 8 bit della porta P2 vengono utilizzati per accendere o spegnere i diodi led che compongono il digit. Tramite il linguaggio C della IAR si può accedere direttamente ai singoli pin del microprocessore tramite l’utilizzo di alcune variabili ambiente.

Page 22: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

22

Esempio di scrittura su display:Per accendere il digit 1 bisogna settare il pin 22 tramite il comando P3.4=1, P3.4 è una variabile ambiente.P3.5, P3.6 e P3.7 identificano rispettivamente il 2°, il 3° e il 4° digit del display. L’istruzione software P2.0=1 accende il diodo led “a” del digit a 7 segmenti selezionato dalla porta 3 (come si vede dal grafico della scheda CPU).

Scriviamo una procedura, “digit”, che abilita in continuazione il digit secondo il multiplexing e visualizza il numero su quel digit.Definiamo un array di 4 elementi che contiene i valori esadecimali rappresentanti il numero relativo dell’i-esimo digit. Visualizziamo copiando in P2 il valore i-esimo dell’array. La stampa sul display equivale a scrivere nell’array.

Page 23: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

23

Il file “visualizzazione” gira in background include la procedura “digit” e l’inizializzazione del timer. Il timer genera l’interrupt che serve per gestire il passaggio da un digit all’altro. Nel file includiamo la libreria AduC816.h che fa riconoscere al nostro programma i parametri ambiente.Inizializzazione del timer settando alcuni registri: TR0, TMOD, ET0, PT0, EA.Funzione imposta_array che prende in input un reale e realizza la stampa.

Page 24: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

24

La funzione imposta_array serve, dato un numero reale r, a scomporre r nelle cifre che lo compongono e memorizzare queste all’interno di un array di 4 elementi.

In imposta_array è definito un array di 10 elementi che contiene la conversione delle dieci cifre decimali.

Per ottenere il numero esadecimale, che rappresenta la conversione del numero decimale, basta utilizzare il numero decimale come indice e accedere all’array di 10 elementi.

Page 25: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

25

Convertitore ADC

Impostiamo dei parametri ambiente relativi al convertitore. Il convertitore va prima inizializzato e poi gestito: 2 funzioni.

Nella fase di inizializzazione del convertitore dobbiamo settare 4 parametri ambiente: ADCMODE, ADC0CON, ICON, SF.

Facciamo funzionare l’ADC in single conversion mode invece che in modo continuo; scegliamo la referenza esterna cioè la VREF viene impostata dall’esterno e scegliamo l’organizzazione bipolare.

SF stabilisce la velocità con cui lavora il convertitore: una conversione ogni 186,77 ms.  

Page 26: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

26

Fase di gestione:

Il bit RDY0 del registro ADCSTAT (status register) del convertitore ci indica che la conversione è stata effettuata. Nel programma facciamo un test su questo bit se si vuole sapere quando è disponibile un nuovo Nx (polling).

Nx è il numero in uscita al convertitore. La funzione “leggi_Nx”, legge da due registri a 8 bit: ADC0M e ADC0H.

Modifichiamo il programma in modo da richiamare le 2 funzioni: la prima “inizializza_convertitore” fuori dal ciclo infinito, la seconda “leggi_Nx” invece dentro.

Page 27: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

27

Calibrazione

L’ADuC816 mette a disposizione una memoria Flash/EE per i dati e una per i programmi. La memoria dati è divisa in 160 pagine ognuna contenente 4 byte.

Per gestire la memoria Flash/EE l’AduC816 ci sono 3 registri:

In ECON mettiamo il tipo di operazione che vogliamo fare sulla memoria: lettura, scrittura, verifica, cancellazione.

EADRL contiene l’indirizzo della pagina di memoria sulla quale si vuole attuare il comando.

Le operazioni che si vogliono fare sulla memoria passano sempre per 4 registri: EDATA1-4.

Page 28: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

28

Calibrare uno strumento significa farlo funzionare nel range di valori corretto. Bisogna posizionare la retta N/R correttamente rispetto all’OFFSET e all’inclinazione perché altrimenti non potremmo sapere se alla resistenza equivale esattamente quel numero. Si fissano i 2 estremi 8000h e FFFFh ai corrispettivi valori di resistenza. Lo strumento di calibrazione genera 2 numeri che rappresentano la calibrazione per quel particolare strumento.

I 2 numeri vengono memorizzati alla prima pagina della memoria dati Flash/EE.

I primi 2 byte contengono il risultato della calibrazione all’estremo inferiore del nostro range di temperature, cioè 0°C, mentre gli altri 2 byte contengono il risultato all’estremo superiore, cioè 660°C.

Page 29: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

29

Quando lo strumento viene acceso i due valori vengono caricati nei registri dell’ADuC816 che riguardano il coefficiente di calibrazione dell’ADC.

I registri sono: OF0M/H (OF sta per OFFSET) e GN0M/H (GN sta per GAIN).

La calibrazione dell’ADuC816 è già stata fatta dalla casa costruttrice ma non si può utilizzare quella perché le schede e i componenti aggiunti la falsano. La calibrazione tiene conto, infatti, di tutte le componenti dello strumento e in base a questa opera l’aggiustamento.

Nella funzione che inizializza il convertitore ci sarà anche la parte relativa alla calibrazione: basta fare una lettura alla prima pagina e salvare i dati nei registri.

Page 30: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

30

Prova pratica dello strumento

Programmazione del microcontrollore: colleghiamo, tramite l’interfaccia seriale, le schede con il computer, eseguiamo il programma WSD caricando il codice nella memoria programmi Flash/EE.

Facciamo delle prove dalle quali emergono errori.

Non consideriamo le Pt100 e impostiamo da software quello che vogliamo visualizzare. Facciamo visualizzare, per esempio, i valori estremi del nostro range di temperature e alcuni valori intermedi simulando la lettura da parte dell’ADC.

Una ottimizzazione è quella di non visualizzare gli zeri a sinistra del numero.

Page 31: 1 Progetto di Luigi Nardi in collaborazione con Doppio visualizzatore di temperatura: 2µS1T2.

31

Colleghiamo le sonde ed eliminiamo la parte di codice che simulava l’acquisizione. Ricarichiamo il programma con WSD e analizziamo quello che viene visualizzato.

Appena lo strumento inizia la conversione quello che si deve osservare sullo schermo, se non si toccano le sonde, è la temperatura ambiente. In alcuni casi, anche se le sonde sono alla stessa temperatura, le temperature visualizzate non sono identiche, questo è dovuto alla precisione delle sonde.

Test dei 3 tasti. L’ultimo bug trovato faceva parte del codice che gestisce il tasto di visualizzazione della temperatura minima.

Visualizzazione di trattini quando la sonda è scollegata.

Modifica per testare il corretto funzionamento di tutti i led dei digit.