• Non ci sono risultati.

Capitolo 3

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo 3"

Copied!
27
0
0

Testo completo

(1)

Capitolo 3

Interfaccia di pilotaggio AD/DA

3.1 Introduzione

Analizzeremo in questo capitolo l’interfaccia di pilotaggio per il sensore di portata CH365A basata su microcontrollore, in particolare vedremo come schematicamente è costituito il sistema che la implementa, studieremo singolarmente i vari blocchi che la costituiscono e come sono connessi e comunicano tra loro. Illustreremo quale è il principio di funzionamento incominciando dalle specifiche di progetto imposte dalle caratteristiche del sensore e come è stato sviluppato il lavoro per arrivare ad un funzionamento stand-alone del sistema; quali sono stati i vari passi che mettendo a punto funzionalità parziali hanno poi portato alla realizzazione completa del progetto. Infine sarà anche analizzato il software che permette al microcontrollore di gestire tutti i dispositivi ad esso collegato (ADC, DAC e display LCD) prendendo in considerazione non solo in programma principale ma anche le singole sub-routine che vengono utilizzate per implementare le singole funzionalità dei vari dispositivi.

(2)

3.2 Funzionamento del sensore

Il chip CH365A è un sensore che funziona a temperatura costante ( CTA, Constant Temperature Anemometry ): mediante un circuito in reazione la temperatura viene mantenuta costante e la potenza dissipata sarà legata alla portata del fluido. Per eliminare la dipendenza dalla temperatura del fluido si esegue una doppia lettura della potenza a due distinte temperature del sensore. Per pilotare il sensore avremo dunque bisogno di fornirgli alternativamente due tensioni corrispondenti a due distinte temperature del sensore. Per ciascuno dei due valori di temperatura, sarà necessario leggere i valori della tensione rappresentativi della potenza dissipata, la quale sarà proporzionale alla conduttanza termica del sensore che sua volta sarà una funzione nota alla portata. La strumentazione necessaria al pilotaggio sarà quindi costituita da un generatore di forma d’onda che fornirà il segnale rettangolare al sensore ed un multimetro per poter leggere i valori di tensione corrispondenti alla potenza dissipata. Calcolata la differenza di tensione otterremo la portata tramite l’utilizzo di una tabella che implementa la legge non lineare che lega la portata alla resistenza termica (vedi fig. 3.1).

Cc P Cp RAD Tf Rp TS

Fig 3.1 conduttanza termica in funzione della portata Fig. 3.2 – Circuito equivalente termico.

Quello che rallenta il funzionamento di questo tipo di misura è il transitorio termico che si origina ogni volta che si ha il salto di tensione in ingresso al sensore che provoca la variazione di temperatura di funzionamento del sensore. Nel nostro caso la schematizzazione elettrica equivalente del circuito termico chip-cilindro-fluido

(3)

(rappresentata in fig. 3.2) evidenzia due poli e uno zero. Si può dimostrare che essendo i due poli molti distanti in frequenza possiamo considerare il polo relativo a Cc dominante. Siccome il sistema lavora ad anello chiuso, la risposta in frequenza che lega le tensioni Vs (set point) e Vth (proporzionale alla potenza) risulta notevolmente diversa da quella ad anello aperto ricavabile dal circuito in figura 3.2. In particolare, se non vi fosse lo zero, la frequenza del polo si sposterebbe a frequenze molto elevate, con grandi benefici in termini di transitorio. A causa dello zero, quello che accade in realtà è che , per elevati guadagni di anello, il polo e lo zero si scambiano. Si ha lo stesso un beneficio in quanto lo zero è a frequenze maggiore o uguale a tre volte la frequenza di polo. Tuttavia i tempi del transitorio restano di alcuni secondi, come dimostrato dalla figura 3.3. Per ottenere ulteriori benefici occorrerebbe cancellare lo zero del sistema.

0 4 8 1 2 1 6 2 0 2 4 2 8 3 2 3 6 4 0 4 4 4 8 3 ,5 4 ,0 4 ,5 5 ,0 5 ,5 6 ,0 6 ,5 0 4 8 1 2 1 6 2 0 2 4 2 8 3 2 3 6 4 0 4 4 4 8 0 ,9 9 9 1 ,0 0 0 1 ,0 0 1 1 ,0 0 2 1 ,0 0 3 1 ,0 0 4 1 ,0 0 5 1 ,0 0 6 VS [V ] Vre f [V ] t [ s ] t [s ] Fig. 3.3

Una forte complicazione per questo tipo di soluzione nasce però dal fatto che lo zero dipende dalla portata, quindi il filtro dovrà di volta in volta essere regolato per cancellare lo zero in funzione del valore della portata letto.

Per funzionamento stand-alone dovremo poter eliminare l’utilizzo del generatore di forma d’onda e del multimetro, automatizzare il calcolo della portata e renderla leggibile all’esterno, tutto questo lo faremo con l’utilizzo di un microcontrollore, due convertitori (A/D e D/A) ed un display. Un ulteriore miglioria potrebbe essere apportata mediante la realizzazione di un filtro regolabile controllato anch’esso dal microcontrollore.

(4)

3.3 Interfaccia di pilotaggio

L’interfaccia di pilotaggio è costituita sostanzialmente da un microcontrollore che comanda una scheda AD/DA e un display LCD e contemporaneamente ha la possibilità di poter colloquiare con il computer. Lo schema di principio è rappresentato in figura 3.4 tramite dei diagrammi a blocchi. Vediamo ora come è stato progettato l’intero sistema, quale sono state le specifiche di progetto e come è stata fatta la scelta dei componenti usati. Le specifiche di progetto da rispettare sono quelle imposte dalle caratteristiche del sensore analizzato nel capitolo precedente, infatti il DAC dovrà essere in grado di fornire le due soglie che servono al sensore e l’ADC dovrà leggere i valori in uscita dal sensore.

Figura 3.4 Schema a blocchi dell’interfaccia di pilotaggio

Il funzionamento dell’intera interfaccia sarà gestito dal microcontrollore che piloterà i due convertitori ed il display: l’ADC e il DAC sostituiscono rispettivamente il multimetro ed il generatore di forma d’onda che precedentemente venivano utilizzati per il funzionamento del sensore. Il calcolo della portata sarà effettuato in modo autonomo dal microcontrollore che imporrà tramite il DAC, alternativamente, le due soglie al sensore e leggerà tramite l’ADC i rispettivi valori in uscita dal sensore, a questo punto il microcontrollore avrà i dati necessari per calcolare periodicamente il salto in uscita

Scheda Microcontrollore STK500 Scheda AD/DA Display Scheda sensore Portata 10 l/h Comunicazione seriale

(5)

dovuto alle commutazione della soglia in ingresso al sensore e quindi la media tra due salti successivi. Il valore medio di due salti successivi è proporzionale, come analizzato nel capitolo precedente, alla portata che potrà quindi essere calcolata dal microcontrollore ed inviata al display per essere visualizzata; il tutto nel funzionamento stand-alone sarà eseguito ciclicamente e quindi il valore di portata sul display sarà aggiornato periodicamente ad ogni nuovo valore acquisito. Vediamo ora, analizzandoli singolarmente, quali dispositivi (µC, ADC e DAC) sono stati scelti e come è stata progettata la scheda A/D-D/A.

3.3.1 Microcontrollore

L’intero funzionamento dell’interfaccia di pilotaggio del sensore è basato sul microcontrollore che dovrà essere in grado di gestire i due convertitori (analogico/digitale e digitale/analogico) ed il display ed essere in grado di calcolare il valore della portata da misurare in base ai valori letti tramite l’ADC.

Il microcontrollore utilizzato è l’AT90S8515 dell’ATMEL, è un microcontrollore basato su architettura AVR® RISC ad 8 bit le cui caratteristiche principali sono:

● 4 porte di ingresso-uscita ciascuna costituita da 8 bit ● 32 registri ad 8 bit general-purpose

● un’unità aritmetica logica (ALU) operante in connessione diretta con i registri ● una memoria flash per immagazzinare il programma

● una RAM interna di 512 byte ● 2 timer (uno a 8 bit l’altro a 16 bit)

● un collegamento seriale con protocollo UART

Può essere alimentato con una tensione compresa tra un massimo di 6V ed un minimo di 2.7V, la frequenza del suo clock interno è di circa 4MHz (esiste anche la possibilità di fornire il clock dall’esterno), è provvisto di watchdog, comparatore analogico, protocollo SPI, memoria Eeprom per conservare i dati e la possibilità di espandere la ram collegando fino a 64K byte di memoria esterna.

(6)

Figura 3.5 microcontrollore AT90S8515

La scheda utilizzata sia per la programmazione che per l’utilizzo del microcontrollore è l’STK 500 dell’ Atmel collegata al computer tramite collegamento seriale.

(7)

L’ambiente di sviluppo utilizzato per il software è stato l’AVR® Studio 3.53 tramite il quale è stato scritto il programma per il microcontrollore, il codice è stato prodotto usando il linguaggio assembler ed in particolare l’avr-assembler. È stato scelto questo dispositivo perché avendo 4 porte d’ingresso/uscita è in grado di supportare la comunicazione con i convertitori ed il display e, contemporaneamente mantenere dei bit liberi per future espansioni. Inoltre avendo, come già detto prima, la possibilità di colloquiare semplicemente con il computer fornisce uno strumento utile in fase di sviluppo e debugging, cioè quello della gestione dei singoli convertitori direttamente dal pc (su questo ritorneremo più avanti).

Importante è anche la presenza del timer (viene utilizzato quello a 16bit) per la temporizzazione delle soglie. Unica difficoltà dovuta alla scarsità di operazioni della ALU è stato il calcolo della portata una volta calcolata la media tra due salti successivi, cioè l’implementazione di un algoritmo di conversione che come visto nel capitolo precedente dovrebbe realizzare una funzione simile ad una radice quadrata.

3.3.2 Scheda A/D-D/A

Lo schema elettrico della scheda analogico/digitale-digitale/analogico è quello riportato in figura 3.7 in cui possiamo evidenziare due linee di condizionamento del segnale analogico, di cui una agisce sul segnale in ingresso alla scheda prima che esso arrivi al convertitore analogico digitale e l’altra condiziona il segnale in uscita dal convertitore digitale analogico prima che esso arrivi all’uscita della scheda. Entrambe le linee di condizionamento agiscono sul segnale in modo da adattare i range di utilizzo ai range di funzionamento del DAC e dell’ADC traslando e amplificando (o attenuando) i segnali, per farlo sono utilizzati 6 amplificatori operazionali i quali, in varie e semplici configurazioni, con l’utilizzo di resistenze intercambiabili (montate su appositi zoccoli) permettono di poter fissare al meglio ed in maniera stabile i valori desiderati per i range (un trimmer avrebbe potuto dar luogo spostamenti non voluti del valore di resistenza).

(8)

Figura 3.7 Schema elettrico della scheda di pilotaggio Vo ut 3 Vin 2 GN D 1 U1 REG OLA TO R E-Vo ut 3 Vin 1 GN D 2 U2 REG OLA TO R E+ Vo ut 3 Vi n 1 GN D 2 U3 R EG OLA TO R E+ Vout 3 Vin 1 GN D 2 U4 RE G OL A TO R E+ 1 2 U5 A SN 74 04 3 4 U5 B SN 74 04 5 6 U5 C SN 74 04 9 8 VC C 14 U5D D GN SN74 7 04 +V cc 8 CL K 7 DA TA 6 CO N V 5 Vr ef 1 +I n 2 -In 3 GN D 4 AD C AD S7 81 8 B U RR -B RO W N U6 ADC Vs s 8 Vo ut 7 GN D 6 /L D A C 5 Vd d 1 SC LK 2 SD IN 3 /S Y N C 4 DAC ANAL OG DE V IC E AD 72 33 U7 DAC 3 2 1 VC C 4 U8 S VS 11 A LT 1114 5 6 7 U8 B LT 11 14 10 9 8 U8 C LT 1114 12 13 14 U8 D LT 11 14 3 2 1 VC C 4 U9 S VS 11 A LT 11 14 5 6 7 U9 B LT 1114 10 9 8 U9 C LT 11 14 V+ 15 m assa V-15 J3 CON 3 V-12 V+ 9 V+ 12 V+ 5 VS S VDD VD D VS S R1 RES1 R2 RES1 GN D R3 RES1 GND R4 RES1 rif + 5 V rif -5 V rif + 2. 5 V R5 RES1 R6 RES1 4 1 5 8 R1 3 C O NN 2 R ES 4 1 5 8 R1 4 C O NN 2 R ES GND R7 RES1 R8 RES1 GN D GN D R9 RES1 12 13 14 U9 D LT 11 14 R1 0 RE S1 R1 1 RE S1 R1 2 RE S1 GN D GN D GND GND VS S VD D C1 5 C1 6 VS S VD D VS S VD D GN D 1 2 3 4 5 6 7 8 9 10 +9 V rif + 5V rif -5 V Vin AD Vo ut DA +5 V VDD VSS GND a CO N 1 CO N N ET TO RE 10 1 2 3 4 5 6 7 8 cl k D A da ti D A SY N C co nv A D da ti A D cl k D A GND m CO N 2 C O N DI G I C1 C2 GN D GND GND C3 C4 GND GN D C5 C6 GN D GND C7 GND C8 GN D C9 GN D C1 0 C1 1 C1 2 C1 3 GN D GND GN D GN D 4 3 1 2

(9)

Oltre ai due convertitori e alle catene di condizionamento dei segnali sono presenti sulla scheda tre regolatori di tensione (+12V, -12V, +9V) che serviranno ad alimentare i dispositivi della scheda ma anche altre schede esterne (es. STK500), un integrato con all’interno 6 inverter (utilizzato per creare buffer per ripulire i segnali dell’ADC) e due distinti connettori su cui sono suddivisi i segnali in analogici e digitali. Il circuito stampato e a doppia faccia e il disegno e’ riportato nella figure 3.8a e 3.8b.

Particolare attenzione è stata posta nella progettazione del circuito stampato per quel che riguarda la disposizione del piano di massa, questo aspetto comporta dei possibili problemi essendo presenti nel circuito sia componenti analogici che digitali. Fondamentali nel caso di circuiti misti (analogico/digitali) è la separazione tra le masse (massa analogica e massa digitale) che saranno collegate solo in un punto e di conseguenza la disposizione dei componenti sulla basetta sarà realizzata in base a questo vincolo.

Figura 3.8a Bottom

Seguendo questo criterio sono stati disposti più vicino al punto in cui la massa verrà dal circuito portata all’esterno i componenti digitali, più lontani gli altri e il confine tra i due piani di massa il convertitore A/D (componente a cui arrivano sia segnali analogici che

(10)

digitali); in questo modo le correnti impulsive assorbite dai componenti digitali non creeranno disturbi ai componenti analogici in quanto le correnti stesse si richiuderanno subito verso l’alimentazione all’esterno della scheda senza attraversarli.

Figura 3.8b Top

3.3.3 Convertitore analogico digitale

Il convertitore utilizzato è un ADS7818 della Burr-Brown che consiste in un convertitore a 12 bit seriale con sample/hold e riferimento interno a 2.5V. Si basa su un SAR (successive approximation register) ad alta velocità, il clock con cui può essere pilotato varia tra 200kHz (cui corrisponde un throughput di 12.5kHz) e 8MHz (throughput di 500kHz).

La scelta di una risoluzione pari a 12 bit è stata fatta in base alle caratteristiche del sensore che, funzionando in condizioni ottimali, genera un segnale d’uscita che varierà tra due valori corrispondentemente alla variazione della soglia d’ingresso.

(11)

Figura 3.9 Convertitore ADS7818

Le prove effettuate hanno preso in considerazioni varie coppie di valori per le soglie d’ingresso cui corrispondono diversi valori d’uscita dal sensore in ingresso quindi al convertitore analogico/digitale. I valori delle soglie in ingresso utilizzati durante i test oscillavano intorno ad un valore di un volt e la differenza tra la soglia bassa e quella alta era di qualche decina di millivolt, con questi valori si ottengo in uscita al sensore, al variare della portata misurata, tensioni comprese tra 1.3V e 2.3V circa mentre la differenza relativa al salto tra le soglie d’uscita alta/bassa per una stessa portata sarà inferiore al volt (circa 700-800mV). Per valutare quale deve essere la risoluzione del convertitore dobbiamo stabilire quale è il range d’ingresso e quale è la sensibilità della tensione d’uscita alla variazione della portata, in questo modo fissata la minima variazione di portata che desideriamo venga apprezzata dal sensore calcoliamo quanti bit sono necessari per soddisfare le nostre specifiche.

(12)

Il range d’ingresso è di circa un volt (come già visto la tensione in uscita dal sensore varia da 1.3V a 2.3V circa) per quanto riguarda la sensibilità della tensione in uscita (più precisamente del salto di tensione in uscita) la complicazione è data dal fatto che questa non è costante ma varia con la portata e precisamente diminuisce all’aumentare della portata. Come vedremo nel capitolo successivo, in cui analizzeremo i risultati ottenuti dalle prove sperimentali, la scelta di 12 bit per dimensionamento del convertitore è sovradimensionata data l’effettiva risoluzione del sensore. Questa scelta è stata fatta infatti in base ad un’altra specifica cioè quella di poter acquisire tramite il convertitore tutto l’andamento dell’uscita del sensore, nel caso in cui non fossimo stati interessati a tale monitoraggio avremmo potuto utilizzare un convertitore con un numero di bit notevolmente più ridotto. Su consideri che l’escursione del segnale durante il transitorio è notevolmente più grande di quello del valore a regime. Un aspetto non considerato infatti finora è quello della presenza nel transitorio nei salti tra le due soglie di due picchi di tensione, un overshoot ed un undershoot rispettivamente, nel momento in cui commuta basso/alto e alto/basso. Per poter monitorare questo andamento transitorio è necessario predisporre un range d’ingresso per l’ADC molto più ampio di quello considerato in cui cade il valore di regime delle soglie (di circa un volt). Per poter osservare tutto l’andamento della tensione d’uscita, analisi necessaria in fase di sperimentazione ma non solo, il range sarà dell’ordine di una decina di volt; l’analisi del transitorio è importante in fase di test per la rilevazione dei tempi d’assestamento a regime della tensione e la definizione quindi del periodo di commutazione delle soglie in ingresso al sensore. La scelta dei 12 bit come risoluzione del ADC ci permetterà inoltre anche nella fase successiva alla sperimentazione iniziale di poter acquisire il transitorio della tensione d’uscita del sensore, questo perché come vedremo la nostra scheda di controllo del sensore non è progettata per il solo funzionamento stand-alone ma anche per una modalità in cui è previsto un interfacciamento tramite connessione UART allo scopo di ricavare dati intermedi o impartire comandi (questa parte la analizzeremo più approfonditamente nei paragrafi successivi). Analizzando ora nello specifico il convertitore scelto vediamo quali sono le connessioni di cui è provvisto (vedi figura 3.9) e qual’è il protocollo per gestire la conversione (vedi figura 3.10). Le connessioni dell’ADC che gestiscono la conversione sono direttamente collegate al microcontrollore.

(13)

I segnali CLOCK, CONV e DATA sono pilotati dalle porte ingresso/uscita del microcontrollore e precisamente :

• CLOCK – porta B pin 6 • CONV – porta B pin 2

• DATA (dati seriali in ingresso) – porta B pin 4

Il piedino tramite il quale è fornita l’alimentazione all’ integrato ha la necessità del montaggio di due capacità che assicurino la stabilità della tensione rispetto ad eventuali sbalzi dovuti ad assorbimenti di corrente improvvisi o disturbi alla stessa linea di alimentazione; stesso accorgimento è utilizzato sul piedino Vr che è connesso ad una

tensione di riferimento prodotta internamente dall’ADC (nella nostra applicazione non si è sfruttata la possibilità di fornire dall’esterno una tensione di riferimento tramite lo stesso piedino). Il piedino dell’ingresso analogico è connesso alla linea di condizionamento del segnale, questa farà in modo di adattare, traslando e amplificando (o attenuando), il range d’ingresso del convertitore che è di 0V-5V a quello definito dalle nostre specifiche (range di 1.3V / 2.3V nel caso di funzionamento esclusivamente stand-alone oppure range di -4V / 6V per poter leggere tramite pc l’andamento del transitorio). Per quel che riguarda il collegamento di massa sono predisposti due diversi terminali: la massa relativa all’alimentazione e quella del segnale analogico da convertire; questo permette di poter evitare errori di lettura della tensione analogica da rilevare dovuti alle cadute di tensione lungo il piano di massa. Nel nostro caso i due piedini sono stati collegati in corto circuito tra loro.

Il diagramma di temporizzazione fornito dalle specifiche di funzionamento del dispositivo (Figura 3.10) prevedono che il segnale di inizio conversione vada basso (segnale CONV pin 5), il campionatore all’ingresso del convertitore manterrà per tutta la conversione il valore di tensione letto e i dati seriali in uscita si sincronizzeranno con il clock fornito dall’esterno. I bit saranno forniti sul piedino serial DATA dal più significativo al meno significativo (D11…D0), il clock sarà fornito dal microcontrollore il quale dovrà contemporaneamente leggere e memorizzare i dati in uscita, il software che svolge tale compito lo vedremo più avanti.

(14)

3.3.4 Convertitore digitale analogico

Il convertitore utilizzato è un AD7233 della Analog Device, un convertitore a 12 bit seriale basato su tecnologia CMOS.

Figura 3.11 Convertitore AD7233

Analizziamo ora i criteri di scelta utilizzati e le specifiche da rispettare per il suo pilotaggio. La scelta di una risoluzione pari a 12 bit è stata fatta considerando che nel nostro caso le tensioni da dover fornire al sensore dovranno poter variare in un range di circa 1V (massimo 2V), in questo caso con una risoluzione di 12 bit si otterrebbe un ∆V di:

12 bit → 212 = 4096 → ∆V= 1V/4096 = 0.24 mV

Essendo il salto di tensione tra le due soglie che pilotano il sensore dell’ordine di 50 mV , il ∆V ottenibile con 12 bit è pari a meno dello 0.5% del salto che possiamo ritenere una buona precisione per quel che riguarda il nostro sistema.

Il pilotaggio del convertitore è implementato da una routine del microcontrollore (che analizzeremo in seguito)che rispetta la seguente temporizzazione:

(15)

Figura 3.12 Diagramma di temporizzazione del DAC

I segnali SCLK , /SYNC e SDIN sono supportati dalle porte d’uscita del microcontrollore e precisamente :

• SCLK – porta A pin 7

• SYNC (attivo basso) – porta A pin 3 • SDIN linea dati – porta A pin 5

Il piedino /LDAC nel nostro circuito è invece collegato direttamente a massa abilitando così l’update mode, modalità nella quale il nuovo valore analogico in uscita dal DAC è aggiornata automaticamente all’arrivo dell’ultimo bit; il pilotare il piedino /LDAC in maniera diversa per comandare l’aggiornamento del valore in uscita indipendentemente dall’arrivo dei dati può essere utile per sincronizzare circuiti in cui ci sono vari DAC, ma non è questo il nostro caso. Questo dispositivo ha bisogno di alimentazione duale (che può variare tra 10.8V e 16.5V) che gli viene fornita tramite i piedini VDD e VSS, altri

piedini oltre a quelli riservati a segnali digitali già analizzati sono quello di massa e quello tramite il quale il convertitore fornisce la tensione analogica convertita che può raggiungere una frequenza massima di aggiornamento di 300kHz, più che sufficiente per i nostri scopi.

(16)

Figura 3.13 Struttura R-2R

Il principio di funzionamento di questo convertitore si basa su una conversione che sfrutta la struttura R-2R (figura 3.13) implementata con resistori molto precisi realizzati a film sottile, switch a due posizioni ad alta velocità, realizzati con n-MOSFET. L’uscita è bufferizzata tramite un amplificatore operazionale CMOS.

3.3.5 Display LCD

Il display usato è un Densitron LCD da 32 caratteri disposti su due linee retro illuminabile. Il display è molto versatile e prevede un controllo tramite l’invio dei codici ascii dei caratteri da visualizzare (dati) e l’invio di codici di comando che stabiliscono il modo di visualizzazione (riga, scorrimento, lampeggio, cursore ecc..), tali codici sono inviati in modo parallelo sui pin DB0-DB7. Un segnale analogico costante infine è necessario per fissare il contrasto.

Le caratteristiche principali del display sono:

• Possibilità di utilizzo di un ampio set di caratteri ascii (192) • Capacità di creare 8 caratteri nuovi

• Bus bidirezionale utilizzabile a 4 oppure 8 bit • Ram che può contenere fino ad 80 caratteri • Reset automatico all’accensione

(17)

Figura 3.14 Schema interno display LCD Figura 3.15 Display LCD

Quest’ultima caratteristica permette tramite il controller di determinare quali sono, quando e dove devono comparire sul display i dati inviati sotto forma di codice ascii. Il software che lo gestisce si occupa direttamente di pilotare sia le linee di controllo che quelle dei dati, in questo modo questo dispositivo è connesso solo al microcontrollore e non alla scheda come gli altri precedentemente esaminati.

3.4 Software microcontrollore

Lo sviluppo del software è avvenuto nel ambiente intergrato AVR studio 3.53 dell’ATMEL. Questo ambiente permette di effettuare una fase preliminare del debugging senza l’utilizzo della scheda tramite una simulazione del microcontrollore in tutte le sue parti (registri,memoria,porte,processore) anche se il suo utilizzo si riduce infondo ad un scopo quasi puramente didattico (per imparare le varie funzionalità del microcontrollore) in quanto nel momento in cui si scrivono programmi appena più articolati che utilizzano timer o porte esterne non si è più, tramite questo strumento, in grado di effettuare alcuna simulazione significativa ma è necessario utilizzare il microcontrollore scaricandoci il programma da testare e usare la scheda STK500 per il debugging.

La filosofia con il quale è stato scritto il programma per il microcontrollore è quella della maggior modularità e versatilità possibile, in modo da ottenere i vari moduli, che implementano le singole funzioni (conversione A/D, conversione D/A, visualizzazione

(18)

sul display, calcolo portata ecc..), facilmente analizzabili sia in fase di debugging che in successive fase di modifica. Inoltre la modularità permette di ottenere facilmente una visione schematica di tutto il funzionamento e, caratteristica molto importante nel funzionamento in connessione con il pc, di ottenere immediatamente dati intermedi che quindi non siano solo quelli finali della portata.

I moduli principali da cui programma è costituito sono gestisco singolarmente le seguenti azioni:

● gestione canale UART

● conversione digitale/analogica ● conversione analogica/digitale ● visualizzazione dati tramite display ● media sul valore d’uscita dell’DAC ● calcolo portata

● conversioni binario-ascii

Il modulo che si occupa di gestire la comunicazione tramite UART è quello principale in quanto il microcontrollore, tramite questa procedura, è sempre in ascolto premettendo quindi in qualsiasi momento di passare dal funzionamento stand-alone a quello slave (in cui il pc pilota il microcontrollore tramite appositi comandi.

Esamineremo di seguito i vari moduli nel dettaglio.

3.4.1 Canale di comunicazione tramite Uart

La parte di codice che riguarda la gestione del protocollo UART per l’invio di comandi al microcontrollore è stata sviluppata in un lavoro di tesi precedente ed in questo è stata utilizzata apportandoci le modifiche necessarie per meglio adattarla agli scopi per i quali la si voleva utilizzare.

Tramite questo programma e’ possibile far eseguire determinate azioni al microcontrollore (ad esempio leggere dall’ADC, impostare il valore del DAC ecc..) questo viene fatto mediante l’invio del nome del comando in formato ascii tramite il

(19)

protocollo di comunicazione Uart di cui è provvisto il microcontrollore. Il programma che gestisce questa comunicazione (che è sempre in esecuzione sul microcontrollore ) registra in un buffer tutti i codici ascii che gli arrivano, riconosce il carattere di ritorno carrello e, nel momento in cui lo trova, fa partire la routine di confronto. Questa routine confronta la stringa che ha riempito con i caratteri provenienti dalla Uart con una serie di stringhe che ha in memoria e nel momento in cui il confronto ha successo manda in esecuzione la sub-routine relativa a quel comando. Le routine utilizzate nel programma di gestione dell’interfaccia per il nostro sensore saranno analizzate di seguito in modo dettagliato.

3.4.2 Software DAC

La sub-routine che gestisce la comunicazione con il DAC (AD7233) deve implementare l’hand-shake richiesto rispettando il timing specificato nelle caratteristiche (già illustrato in figura 3.9). Per far ciò utilizza i collegamenti delle porte esterne secondo le seguenti connessioni: segnale di clock (SCLK) al piedino 7 della porta A, segnale di sincronismo (SYNC) sul piedino 3 della porta A, linea dati (SDIN) sul piedino 5 della porta A. Tutti i piedini utilizzati saranno settati come piedini d’uscita (ricordiamo che tutti i piedini delle quattro porte del microcontrollore possono singolarmente essere settati come ingressi o uscite) essendo tutti segnali in ingresso al convertitore. Questo sotto-programma legge i 12 bit (tale infatti è la risoluzione del convertitore) da convertire a partite dalla locazione di memoria bin2dac in cui sono memorizzati gli 8 bit meno significativi. Della successiva locazione si considera solo il nibble basso che conterrà i 4 bit più significativi. La procedura adottata consiste nel generare, dopo aver messo basso il segnale di inizio conversione (SYNC), alternativamente un segnale di clock (inviandolo al pin SCLK) e un segnale che implementa la sequenza dei 12 bit da convertire (inviandolo al pin SDIN), il tutto è realizzato mediante dei semplici cicli con contatore. I periodi utilizzati per i segnali sono fissati tramite l’utilizzo di istruzioni nop, in questo modo è stata regolata la durata pari a circa 20 clock, essendo la frequenza di lavoro del microcontrollore di circa 4MHz in secondi avremo 5 microsecondi.

(20)

3.4.3 Software ADC

L’ADC prevede per il suo funzionamento tre segnali digitali che nel nostro caso saranno connessi al microcontrollore (clock - piedino 6 della porta B, start-convert – piedino 2 della porta B, dati seriali – piedino 4 della porta B) di cui due saranno in uscita dal µC mentre la linea dati essendo in uscita dal convertitore (infatti l’ADC genera 12 bit con cui codifica il valore analogico in ingresso) sarà un input. Nella fase di montaggio sono stati evidenziati, in particolare per i segnali dati e start-convert, dei problemi di accoppiamento rumoroso con il µC ma questo aspetto, e la relativa soluzione adottata, lo approfondiremo nei paragrafi successivi. La sub-routine dopo aver dato inizio alla conversione tramite il reset dello start-convert (attivo basso) provvede a generare due periodi di clock per permettere al ADC di sincronizzarsi (come richiesto dai data-sheet) e quindi ad acquisire i 12 bit e contemporaneamente a generare ancora il clock per il convertitore. Al termine dell’acquisizione dei dati seriali la memoria del microcontrollore conterrà due locazione di memoria (CONVL, CONVH) in cui saranno stati registrati man mano i vari bit. Un altro sottoprogramma distinto da quello che gestisce direttamente il convertitore è quello che serve per filtrare disturbi provenienti dalla rete elettrica (quindi alla frequenza di 50 Hz), compiendo 16 letture nell’arco di 20 m sec e poi effettuandone la media ottiene un valore meno affetto da eventuali disturbi dovuti alla rete.

3.4.4 Software display LCD

Il display è il dispositivo, tra quelli che sono presenti nell’interfaccia, che impegna il maggior numero di pedini delle porte d’ingresso/uscita del microcontrollore avendo bisogno di 11 connessioni (ENABLE piedino 0 della porta A, R/W piedino 1 della porta A, RS piedino 2 della porta A, DB7-DB0 piedini 0-7 della porta C). Inoltre anche i due collegamenti per l’alimentazione sono collegati al microcontrollore (la tensione per la regolazione del contrasto essendo un valore inferiore a quello di alimentazione la si ottiene da quest’ultima con un partitore resistivo; il suo valore è quindi fisso e non regolabile nel nostro caso). Il pilotaggio del display inizia con le operazioni di settaggio

(21)

della modalità di funzionamento, numero righe, posizione cursore e cancellazione schermo. I dati che utilizza questo sotto programma sono i codici ascii delle cifre che indicheranno il valore della portata in litri per ora che saranno visualizzate e il valore della variabile virgola che indicherà il numero di cifre decimali. Questo sottoprogramma andrà in esecuzione periodicamente aggiornando il valore dalle portata con periodo pari a quello di durata della misurazione.

3.4.5 Sottoprogrammi aggiuntivi

Altre sub-routine che vengono utilizzate dal microcontrollore sono: Modifica_periodo

Permette di modificare il valore del periodo delle soglie che saranno fornite al sensore. Modifica_soglie

Permette di modificare le soglie che il DAC fornirà al sensore. Stand-alone

Gestisce la modalità in cui in sensore effettua la misurazione in modo autonomo e periodico. Invia i valori delle soglie alta e bassa alternativamente al DAC e regola il timer secondo la durata impostata, acquisisce i dati dal ADC, calcola la portata e invia il risultato al display (si avvale a sua volta di altri sottoprogrammi già descritti).

Slave

Serve a commutare dalla modalità di funzionamento stand-alone alla modalità slave, questa servirà soltanto nel momento in cui sarà necessario modificare i parametri di funzionamento del dispositivo (le soglie e il tempo di durata della singola soglia in ingresso al sensore) o si vorrà monitorare l’intera evoluzione del segnale d’uscita del sensore.

(22)

Portata

E’ il sotto programma che dato il valore ottenuto dalla differenza delle tensioni uscita del sensore (relativi alle due soglie in ingresso), mediata su due salti consecutivi fornisce il valore della portata in litri per ora. La legge che lega la portata alla potenza è fortemente non lineare, la spezzata che la approssima è stata estratta sperimentalmente tramite diverse prove effettuate con l’ausilio di due flussimetri di estrema precisione (uno per le portate più basse, l’altro per quelle più alte) con le modalità che analizzeremo nel successivo capitolo. Quello che da questi dati sperimentali è stato tirato fuori è una tabella in cui sono riportati per diversi valori della portata i valori ottenuti dal DAC (in particolare la differenza mediata tra due salti d’uscita che indicheremo con N out) e la pendenza del tratto della spezzata che approssima la caratteristica dal punto considerato al punto successivo. In questo modo è facile, partendo dal valore di N out ottenere con buona approssimazione il valore della portata dato dalla spezzata. E’ molto importante, nel nostro caso, che questo sia fattibile con semplici operazioni (si tratta solo di somme, sottrazioni e moltiplicazioni) data la potenzialità estremamente ridotta dell’unità ALU del nostro microcontrollore. La tabella non è scritta direttamente nel programma del microcontrollore ma viene caricata in memoria all’avvio, questo permette di poter variare facilmente la tabella al variare del sensore o delle condizioni di misura.

TABELLA

N out Portata Pendenza

x0 y0 P0 x1 y1 P1 x2 y2 P2 … … …

(23)

Bin_ascii

Implementa un algoritmo che interpretando i 16 bit in che rappresentano il valore di portata da visualizzare come numero binario calcola la codifica ascii delle cifre della corrispondente codifica decimale.

Sotto_ range/fuori_scala

Nel caso in cui il flusso avesse una portata minore di quella minima misurabile dal sensore o superiore alla massima farà comparire la scritta “LOW” o “HIGH” sul display .

3.5 Realizzazione pratica

Di seguito saranno illustrati quelli che sono stati nella pratica i passi seguiti per arrivare alla realizzazione finale del progetto. Inizialmente il montaggio dei singoli dispositivi è stato realizzato, provvisoriamente, su delle bread-board in modo da testare il funzionamento sia del dispositivo che dell’eventuale elettronica di supporto necessaria per i nostri scopi. Questo è stato fatto sia per ADC che il DAC ma in qualche modo anche per il display. Per quanto riguarda l’ADC questo primo passo si è rivelato fondamentale in quanto ci ha permesso di capire che per il suo funzionamento necessitava di un blocco che lo separasse dal microcontrollore in modo che non fosse disturbato da eventuale rumore ad alta frequenza proveniente dal microcontrollore stesso. Questo blocco separatore è stato realizzato con una catena di due inverter in cascata. Questa soluzione è stata adottata sia sul piedino dell’ADC che supporta i dati in uscita (quindi in ingresso al microcontrollore) sia sul piedino che supporta lo start convert in ungresso all’ADC, per questo si e’ utilizzato un circuito integrato (SN7404 della Texas Instrument) che contiene sei inverter. Una volta che il funzionamento corretto dei vari dispositivi è stato verificato è stato possibile dimensionare l’elettronica di supporto per i singoli dispositivi e quindi anche progettare il relativo circuito stampato. Il circuito stampato è stato realizzato litograficamente con l’utilizzo di un bromografo e successivamente con sviluppo a freddo ed attacco in bagno caldo di cloruro ferrico (per la rimozione del rame superfluo). Montato il circuito elettronico, ed effettuato un primo test di controllo sulle tensioni, si è testata per prima la parte riguardante l’ADC. Questo

(24)

lo si è fatto collegando all’ingresso dell’ADC una tensione e leggendo tramite il microcontrollore i dati in uscita E’ stato così possibile mettere a punto il programma ottimale per la gestione dei segnali per pilotare l’ADC e successivamente è stato possibile estrarre la caratteristica ingresso uscita del ADC stesso. La caratteristica dell’ADC ricavata in questo modo è quella illustrata in figura.

Fig. 3.18 Caratteristica ingresso uscita dell’ADC

Come si vede dalla caratteristica l’ADC considerato ha un’ottima linearità e un bassissimo errore di offset. Un procedimento simile è stato utilizzato anche per quel che riguarda il DAC, in questo caso tramite il microcontrollore venivano inviati i dati in seriale al DAC e con un multimetro si misurava la correttezza del valore che forniva l’uscita del circuito. Questi due test (sull’ADC e sul DAC) sarebbe stato possibile anche realizzarli insieme, cioè utilizzando l’ADC per leggere il valore in uscita dal DAC, in questo modo non sarebbe stato però possibile distinguere gli errori di offset e non linearità dei singoli dispositivi. La caratteristica ingresso-uscita estratta per il DAC è riportata il figura.

(25)

Fig. 3.19 Caratteristica ingresso-uscita del DAC

Anche per il DAC si è riscontrata un buona linearità anche se l’errore di offset non è piccolissimo, c’è però da dire che, se necessario, questo potrebbe essere compensato in maniera abbastanza semplice ma per quanto riguarda l’applicazione che stiamo analizzando nell’ambito dell’interfaccia per il sensore non ha alcuna conseguenza dato che i valori che prenderemo in considerazione saranno sempre delle differenze tra due successive letture dell’ADC, questo ovviamente ci cancellerà automaticamente l’offset. Per quel riguardava il display si è solo trattato di studiarne il funzionamento e testarne le modalità di visualizzazione. Dopo queste fasi preliminari si è passati al primo test sul sensore, in questa fase si è utilizzato il PC in quanto permette un debugging molto più efficiente e veloce. Il collegamento tra PC e microcontrollore avviene tramite uart; per rendere semplice e veloce la gestione del microcontrollore dal PC è stata realizzata un’interfaccia grafica tramite la quale inserire il valore delle soglie per il sensore, scegliere il tempo di durata delle stesse e disegnare in tempo reale l’andamento della tensione di uscita del sensore. Inoltre l’interfaccia grafica mostra anche la differenza

(26)

delle tensioni corrispondenti alla variazione delle soglie in ingresso mediata sugli ultimi due salti, i valori considerati sono quelli letti dopo un certo tempo t1 (anche questo valore di ritardo è gestito dall’interfaccia) in modo da essere sicuri che il transitorio sia terminato e quello letto sia il valore stabile (zona piatta del segnale come si vede dalla fig. 3.20).

Fig. 3.20

3.6 Chip integrato

Tutta la trattazione finora affrontata si riferisce al sensore CH365A che può essere pilotato dal microcontrollore solo grazie ad una scheda intermedia realizzata a componenti discreti su cui, come già descritto nel precedente capitolo, sono presenti il circuito di pilotaggio per i riscaldatori presenti sul sensore ed un amplificatore

(27)

differenziale che insieme al sensore costituisce l’anello di misura per la potenza. Il sensore citato è stato ulteriormente sviluppato (nel lavoro di tesi di Alberto Maccioni) fino ad arrivare ad un unico chip in cui è stata integrata tutta quell’elettronica di controllo per il sensore che prima era presente sulla scheda che si trovava direttamente a monte del sensore CH365 e che gli permetteva di interfacciarsi con il microcontrollore. In questo modo è il sensore stesso ad essere direttamente collegato alle porte d’ingresso/uscita del microcontrollore. Il principio di funzionamento di tutto il sistema rimane lo stesso, le uniche cose che, rispetto alla versione precedente, cambiano sono i valori delle soglie da impostare in ingresso. Rispetto al precedente sensore quello integrato ha una maggiore sensibilità, di circa due volte superiore. In questa nuova versione è stato anche previsto, ed integrato, un filtro regolabile controllabile esternamente per la cancellazione dello zero. Quest’ultimo non e’ stato preso in considerazione in questo lavoro ma in successivo sviluppo non sarebbe difficile migliorare il sistema per fare in modo che ci possa essere il controllo in automatico del filtro. Questo potrebbe essere fatto aggiungendo un secondo DAC (o più semplicemente utilizzando un DAC a più canali anziché un ad un solo canale come è stato fatto) in modo da poter pilotare in tensione il filtro regolabile presente sul chip. Il controllore potrebbe infatti, conoscendo la portata, calcolare la tensione opportuna per il filtro e fornirgliela pilotando il DAC; questa procedura porterebbe ad una significativa riduzione del tempo di misura totale della portata.

Figura

Fig 3.1 conduttanza termica in funzione della portata  Fig. 3.2 – Circuito equivalente termico
Figura 3.4 Schema a blocchi dell’interfaccia di pilotaggio
Figura 3.6 STK500
Figura 3.7    Schema elettrico della scheda di pilotaggio Vout3Vin2GND1U1 REGOLATORE-Vout3Vin1GND2U2 REGOLATORE+Vout3Vin1GND2U3REGOLATORE+Vout3Vin1GND2U4REGOLATORE+12U5ASN740434U5BSN740456U5CSN740498VCC14U5DDGNSN74704+Vcc8CLK7DATA6CONV5Vref1+In2-In3GND4ADC
+7

Riferimenti

Documenti correlati

Altri studiosi, pur concordando che sia necessario apportare dei miglioramenti alla metodologia, hanno invece osservato che tali critiche possono essere superate

Competenze comunicative in classe e cura della relazione educativa Nella progettazione e nella conduzione dei vari interventi educativi e di- dattici, occorre tenere sempre a mente

2. Sommare i coefficienti dei monomi simili applicando la proprietà distributiva 4. Il prodotto di due o più monomi è uguale un monomio che ha per coefficiente il prodotto

So considered, the field of pattern recognition intersects a number of different issues, which may go from engineering to philosophy, and combines the design of data analysis

Oggi esistono nel territorio del DSM sette Cooperative di tipo B che si occupano dell’inserimento lavorativo per le persone in carico ai servizi della Salute Mentale e protocolli

• I due valori logici vengono associati a intervalli di tensione che variano a seconda della tecnologia utilizzata per la costruzione del circuito... segnali analogici –

Segnali analogici : variano in modo continuo nel tempo e possono assumere tutti i valori compresi in un certo

Per comprendere il motivo di ci`o, si deve notare, innanzi tutto, che le differenze di energia tra tutti i livelli in esame corrispondono a frequenze nel campo ottico; dalla