ESAMI DI MATURITÀ PROFESSIONALE
EX PROGETTO 92
Indirizzo : TECNICO DELLE INDUSTRIE ELETTRONICHE
TEMA 1996:
Si vuole sviluppare un sistema che renda confortevoli
le condizioni ambientali in un edificio.
Il sistema si compone di una unità centrale collegata a una
serie di unità periferiche, una per ogni stanza.
Le unità periferiche devono svolgere i seguenti compiti :
1) Regolazione della temperatura allinterno della stanza, tramite un sistema di condizionamento in grado di riscaldare e di raffreddare lintero ambiente.
La temperatura di riferimento viene predisposta allunità centrale, che la invia come dato alle periferiche.
La temperatura attuale viene valutata mediante i valori rilevati da due sonde posizionate allinterno della stanza.
Lunità periferica
- attiva il sistema di riscaldamento se la temperatura scende di 1.5 C al di sotto della temperatura di riferimento ;
- attiva il sistema di raffreddamento se la temperatura sale di 1.5 C al di sopra della temperatura di riferimento ;
- invia allunità centrale ogni 2 secondi il valore della temperatura media e il valore del massimo scarto dalla media rilevato alla misura.
Il trasduttore lineare temperatura - corrente utilizzato ha la caratteristica :
I = K * T, con K= 1 micro A / °K
2) Misura e invio allunità centrale ogni due secondi della quantità di umidità relativa (U)
presente allinterno delle stanze, rilevata con risoluzione minore o uguale all1% mediante un traduttore capacitivo in cui la dipendenza della capacità C in funzione di U è data da :
C =(150 + 0.5 *U) pF
Il candidato, formulate le necessarie ipotesi aggiuntive :
indichi quali soluzioni e quali specifiche funzionali ritiene adeguate per unità centrale, e per le periferiche, definisca un opportuno sistema di collegamento tra le unità periferiche e la centrale, disegni lo schema a blocchi dellintero sistema, inoltre, a sua scelta, sviluppi almeno uno dei due punti seguenti
d.1) realizzazione e dimensionamento delle interfaccie di condizionamento e conversione A/D dei segnali analogici,
d.2) illustrazione della struttura algoritmica dei programmi di gestione della unità periferiche e di acquisizione dei dati ; codifica di un segmento a piacere di un linguaggio di programmazione conosciuto.
SOLUZIONE DEL PROBLEMA
Come unità centrale si ritiene idoneo luso di un semplice personal computer con un adeguato software per gestire la comunicazione con le unità periferiche, memorizzare i dati ricevuti, fissare le temperature di riferimento (anche diversificate nellarco della giornata) e visualizzare dati e/o grafici. Il sistema di comunicazione fra centrale e periferiche è preferibile sia del tipo ad anello con una unica fibra ottica da 3 mm che parte dallunità centrale va alla prima periferiche esce da questa va alla seconda e così via per ritornare alla fine alla centrale. In commercio esistono simili sistemi che consentono fino a 254 moduli periferici. Sistemi con la fibra ottica offrono vantaggi che non si possono avere con i sistemi tradizionali a doppino telefonico o a cavo coassiale e sono : immunità al rumore elettromagnetico (la luce nella fibra non può essere deformata da altri fattori esterni), un solo cavo con buona resistenza meccanica, separazione galvanica (circola luce e non corrente), alta velocità di comunicazione (25 mS per 32 bit), rigenerazione del segnale al passaggio da periferica a periferica e in fine con un solo canale si gestiscono fino a 254 periferiche. In genere questi sistemi sono gestiti da PLC con le varie tipologie di interfaccia a seconda delle esigenze (moduli ADC, I/O digitali, Bus IBM/AT, RS232 e RS422 ecc). Ipotizzando di aver risolto il problema dal punto di vista comunicazione fra periferiche e centrale vediamo come realizzare la parte interfaccia fra sensori e periferica. Con un microcontollore ST6225 è possibile ad esempio ricevere tensioni analogiche da 0 a 5 V e convertirle in segnali digitali numerici da inviare alla periferica che a sua volta li invierà alla centrale. Inoltre il micro riceverà i valori di riferimento dalla centrale e comparati con quelli dei sensori attiverà o no riscaldamento e raffreddamento ed anche umidificatore e deumidificatore. I dati fra ST6 e periferica vengono inviati su un BUS a 8 bit. Il riconoscimento della periferica avverrà con un byte di indirizzo trasmesso come primo dato sia da che verso la centrale.
SCHEMA A BLOCCHI
SENSORE DI TEMPERATURA
Considerando che la temperatura confortevole di una stanza si aggira attorno a 20 °C ipotizziamo che un controllo idoneo a tale scopo debba essere in grado di rilevare temperature da 0 °C a 50 °C. Dobbiamo convertire tale deltaT di 50 °C in una tensione nel campo tra 0 e 5 Volt così da poter usare il convertitore ADC contenuto nellST6225 per avere un numero digitale proporzionale alla temperatura. Ipotizzando di attribuire ai 30 °C il numero N=150 (considerato che il massimo numero dato dallADC é 255) , a 0 °C corrisponderà il numero 0. In pratica avremo N(t) = 5 x T (°C) Fissati questi paramenti ne consegue che la tensione dingresso allADC dovrà essere : a 15 °C --> 5/255 = V/75 --> V = 5 x 75/255 = 1,47 V a 30 °C --> V= 5 x 150/255 = 2,941 V. Se la corrente di 1 microA/°K scorre in una resistenza da 10000 Ohm avremo una caduta di tensione di 2,732 V a 0 °C, pertanto a 15 °C avremo 2,882 V e a 30 °C 3,032 V. Se si sottrae in modo fisso 2,732V avremo un segnale di 10 mV/°C cioè 0,3V a 30 °C. Ne consegue che per raggiungere le tensioni calcolate sopra da inviare allADC si dovrà introdurre unamplificazione di A = Vout/Vin = 2,941/0,3 = 9,8
CONVERTITORE CORRENTE TENSIONE
Con OP1 si ottiene una tensione fissa di -2,732 V regolabile
con il timmer TR1. Sul pin non invertente di OP2 arriverà la
differenza fra la caduta sulla r da 10K del sensore e i -2,732V
di OP1 e cioè 10mV per °C. OP2, configurato come amplificatore
non invertente, avrà una amplificazione A = 1+Rtot/Ri da cui A-1
= Rtot/Ri Rtot = (A-1) Ri - Fissando Ri = 10 K sarà Rtot =9,8 -1
x 10 x 10³ = 88 KOhm
Per una miglior regolazione del guadagno si suddivide Rtot in una
resistenza fissa da 68 K e un trimmer TR2 da 47k. Pe la taratura
regolare il trimmer TR1 da 1O KOhm per avere in uscita di OP1 una
tensione negativa di -2,732V. Per regolare il guadagno di OP2 si
dovrà applicare al posto del sensore una tensione di 0,3 volt
(pari a 30 °C) e variare il trimmer TR2 affinché in uscita di
OP2 si legga 2,941V. Considerato che la tensione massima
misurabile con ADC dell'ST6 é di 5V la massima temperatura
rilevabile sarà di 5V/9,8=0,51V sulla R da 10 K del sensore che
sapendo essere 10mV/°C avremo °C = 0,51V/10mV/°C = 510/10 = 51
°C. Prima di convertire la tensione in un numero bisogna, come
richiesto, interporre un circuito capace di mediare le tensioni
V1 e V2 proporzionale alle due temperature T1 e T2. Si intende
usare un sommatore invertente seguito da un amplificatore
invertente con guadagno unitario per riportare in fase la
tensione finale Vu utile per il convertitore ADC.
SOMMATORE INVERTENTE
Vo = - V1 x Rf/Ra1 - V2 x Rf/Ra2 per avere Vo = - (V1 + V2)/2 cioè la media dovrà essere Rf/Ra1= ½ = 0,5 fissando Ra1=Ra2= 20Kohm si avrà Rf = 20/2 = 10 K (è opportuno usare resistenze con tolleranza all1%). Per una migliore stabilità delloffset dovrà essere Rp = Ra1//Ra2/Rf Rp= 1/(1/20+1/20+1/10) = 5K valore commerciale 4K7 Vu= - Vo x A ma A è unitario pertanto Vu = (V1+V2)/2 come si voleva.
SENSORE DI UMIDITÀ
Per legare la variazione di capacità del sensore di umidità ad una proporzionale variazione di tensione si intende utilizzare un convertitore Frequenza Tensione per poter poi usare un ADC per ottenere la percentuale di umidità espressa in un numero digitale. Utilizzando il micro ST6225 la tensione dingresso allADC potrà variare da 0 V a 5 V e il valore numerico da 0 a 255. Essendo la capacità del sensore piuttosto esigua, da usare direttamente in un oscillatore ad onda quadra con operazionale, si intende utilizzare un moltiplicatore di capacità con operazionale con un fattore di moltiplicazione pari a 100. Pertanto la variazione della capacità così moltiplicata varierà da 15 nF per U=0% a 20 nF per U=100%.
MOLTIPLICATORE DI CAPACITÀ
Ceq = Csens x Rm/Rs = Csens x 100
Ne consegue che la variazione di capacità equivalente varierà tra 15 nF per una umidità U = 0% e i 20 nF per una umidità U = 100%.
OSCILLATORE AD ONDA QUADRA CON OP.
Imponendo una F = 1 KHz in corrispondenza della capacità di 15 nF e esaminando il circuito oscillatore ad operazionale, avremo : F = 1/T dove T= 2 R C logn (1+n)/(1-n) dove n = R2/(R2+R1) =15/(12+15) = 0,5555 (1+n)/(1-n) = 3,5 il logaritmo naturale di 3,5 = 1,252763
F = 1 / T = 1/(2 R C 1,252763) = 0,399/RC
per C=150 pF --> = 15 nF imponendo F = 1 KHz sarà :
Conoscendo la R quando si avrà C=200 pF --> = 20 nF la frequenza diventerà :
CONVERTITORE FREQUENZA/TENSIONE
Esaminando i dati applicativi dellintegrato RC4151, usato come convertitore Frequenza/Tensione, emerge la formula seguente :
Vo = F Rx Cx Ru 1,1 Vref/Rs dove Rs=14K Vref = 1,9V Ru=100K
Per una tensione duscita Vo massima di 5 volt e Fmax di
5 KHz RxCx = 66,98 microS
Fissando Cx = 3,3 nF sarà :
Per la frequenza di 1KHz avremo Vo = 14,9285 F Rx Cx = 1V e
per la frequenza di 750Hz
Vo = 14,9285 F Rx Cx = 0,75 V.
Ritoccare eventualemnte il trimmer da 4k7 in serie alla 12K sul pin 2 dell'XR4151.
Si nota che la tensione in uscita
dal convertitore frequenza/tensione è inversamente proporzionale
alla capacità del sensore . Inoltre si ha un deltaV di 250 mV
per un deltaU del 100% con un valore numerico restituito
dallADC che potrà andare 0 e 255 con una tensione da 0 a 5
volt. Ne consegue che la tensione dell' F/V va amplificata di un
valore A = 5/0,25 = 20 volte. Utilizzando un amplificatore
differenziale ad operazionale si potrà avere in uscita + 5V con
Vin = 0,75V e 0V con Vin = 1V cosi da avere la proporzionalità
diretta fra umidità e tensione, precisamente sarà : 255 : N(u)
= 100% : U% ad esempio se ADC dà come Numero 185 sarà U%=(185 x
100) : 255 = 72,54 %
AMPLIFICATORE INVERTENTE
Fissando R = 27 K ed essendo il guadagno A = 20 = Rf/R sarà Rf = 20 x 27 x 1000 = 540 Kohm che suddivido in una fissa da 470 K e in un trimmer da 100K. Con Vin = 0,75 V regolo il trimmer da 10 K per avere Vu = 5V mentre con Vin = 1V regolo il trimmer da 100K per avere Vu = 0 V . Ripetere loperazione per una migliore taratura.
MICROCONTROLLORE ST6225
Mediante i 4 pin della port_c (PC4-PC5-PC6-PC7) si pilotano le basi dei 4 transistori che a loro volta eccitano o no i relè che con i loro contatti attivano, secondo le esigenze del momento, i dispositivi di riscaldamento, raffreddamento, umidificazione e deumidificazione. Con due pin della port_b (PB0-PB1) si effettuerà la conversione analogica digitale delle tensione proporzionali alla temperatura e allumidità. Con PB2 e PB3 si gestirà la scrittura di un byte da e per il modulo RTX. La port_a servirà sia come input che come output durante la comunicazione da e per la centrale con il modulo di trasmissione e ricezione attraverso la fibra ottica.
Allo START il programma dovrà configurare gli I/O secondo quanto già specificato in precedenza. Segnala alla centrale la presenza e si predispone a ricevere Tref e Uref e rimane ad aspettare questi dati. Esegue la conversione della tensione proporzionale alla temperatura in un numero contenuto in un byte, verifica se questo è maggiore della Tref (temperatura di riferimento) di 1,5 ° C e se sì deve attivare il relè che comanda il circuito di raffreddamento altrimenti deve verificare se è minore di Tref di 1,5 ° C e se sì deve attivare il relè che comanda il circuito di riscaldamento. Se la temperatura valutata è compresa nella fascia di ± 1,5 ° C rispetto alla Tref, allora deve spegnere gli eventuali circuiti di riscaldamento o raffreddamento che fino a quel momento erano attivi. Ricorda la temperatura massima misurata e quella minima, infatti se T misurato è maggiore del precedente Tmax, questultimo diventa pari al nuovo valore di T appena valutato. Stessa cosa per Tminimo, se T misurato e inferiore a Tmin, questultimo diventa pari al nuovo valore di T appena valutato. Dopo il controllo della temperatura si passa a quello dellumidità; anche in questo caso si procede prima alla valutazione dellumidità mediante la conversione della tensione e poi al confronto con la Uref. Il tema non chiede un controllo anche sullumidità ma considerato che il valore numerico é comunque richiesto dalla centrale, si ritiene opportuno aggiungere anche questa parte del circuito che completa e migliora lintero sistema. Se lumidità U supera quella di riferimento Uref di 10 unità si deve eccitare il relè che attiva il deumidificaotre altrimenti verifica se il valore rilevato U è inferiore ad Uref di 10 unità e se si attiva lumidificatore. Se lumidità valutata è nella norma allora deve spegnere sia deumidificatore che umidificatore. A questo punto il programma deve verificare se sono trascorsi due secondi e se sì trasmette i dati di temperatura e di umidità, altrimenti ricomincia a valutare T e U.
LISTATO ASSEMBLER ST62 tref .def 084h ;contiene il valore numerico della temperatura di riferimento trefpiu .def 085h ;valore della temperatura di riferimento + 1.5°C (val. num. +13 ) trefmen .def 086h ;valore della temperatura di riferimento - 1.5°C (val. num. -12 ) tmin .def 087h ;valore minimo della temperatura misurata tmax .def 088h ;valore massimo della temperatura misurata temp .def 089h ;valore della temperatura misurata uref .def 08ah ;contiene il valore numerico dellumidità di riferimento urefpiu .def 08bh ;valore dellumidità di riferimento + 10U (val. num. +26) urefmen .def 08ch ;valore dellumidità di riferimento - 10U (val. num. -25) umidita .def 08dh ;valore dellumidità misurata aa .def 08eh ;per salvare momentaneamente il registro a sec2 .def 08fh ;per valutare i due secondi dura .def 090h ;per contare le volte INT_TIM per valutare 1 secondo raff .equ 4 ;PC4 - numero bit di port_c per ON/OFF raffreddamento risc .equ 5 ;PC5 - numero bit di port_c per ON/OFF riscaldamento umid .equ 6 ;PC6 - numero bit di port_c per ON/OFF umidificatore deum .equ 7 ;PC7 - numero bit di port_c per ON/OFF deumidificatore write .equ 2 ;PB2 - numero bit di port_b per segnalare WRITE read .equ 3 ;PB3 - numero bit di port_b per valutare READ ldi pdir_a,11111111b ;port_a definita inizialmente come out ldi popt_a,11111111b ;successivamente nel programma sarà o input o output ldi port_a,00000000b ;uscite tutte a livello 0 ldi pdir_b,00000100b ;PB2 sempre out ldi popt_b,00000100b ;PB3 sempre input ldi port_b,00000000b ;PB0 e PB1 sempre input uno alla volta ADC ldi pdir_c,11110000b ;disponibili solo PC4-PC5-PC6-PC7 tutti output ldi popt_c,11110000b ldi port_c,00000000b tim_int ;INT TIMER ld aa,a ;salva reg. a ldi wdog,255 ;ogni 12 x 64 x 208/8.000.000 =19.9mS ld tscr, 01011110b ;prescaler=64 ldi tcr,208 dec dura ;nr per ottenere un secondo jrnz ritor dur ldi dura,50 inc sec2 ritor ld a,aa ;riprende valore di a reti portin ;PREDISPONE PORT_A COME INPUT ldi port_a,0 ldi popt_a,0 ldi pdir_a,0 ret portout ;PREDISPONE PORT_A COME OUT ldi pdir_a,255 ldi popt_a,255 ldi port_a,0 ret outdati ;USCITA DATI VERSO CENTRALE ld port_a,a ;mette valore di a sul bus dati ld a,port_b set write,a ;setta il bit di PB2 per segnalare invio primo byte ld port_b,a ;write va alto cfm jrr read,port_b,cfm ;apsetta conferma ricezione da parte della centrale ld a,port_b res write,a ;restta il bit di PB2 ld port_b,a ;write va alto ret main ;PROGRAMMA PRINCIPALE ldi wdog,255 set 4,ior ;abilita INT del timer ldi tcr,208 ;predispone timer - INT ogni 20 mS circa ldi tscr,01011110b ;=64 ldi dura,50 ;per avere circa un secondo ld a,port_b set write,a ;setta il bit di PB2 ld port_b,a ;write va alto, segnala la presenza alla centrale call portin ;configura port_a come input inizio clr sec2 ;azzera contatore dei 2 secondi aspetta jrr read,port_b,aspetta ;aspetta che read venga messo alto ld a,port_a ;prende il primo byte (Tref) inviato dalla centrale ld tref,a ;mette valore in Tref addi a,13 ;trova tref+1,5 gradi ld trefpiu,a ;e salva in trefpiu subi a,25 ;trova tref-1,5 gradi ld trefmen,a ;e salva in trefmen ld a,port_b res write,a ;resetta write ld port_b,a ;write va basso asp jrs read,port_b,asp ;aspetta che read vada basso per capire che è arrivato Uref ld a,port_a ld uref,a ;mette valore in Uref addi a,26 ;trova Uref + 10 ld urefpiu,a ;salva in urefpiu subi a,51 ;trova Uref - 10 ld urefmen,a ;salva in urefmen adc ldi port_b,00000001b ;PB0 = ADC Temperatura ldi pdir_b,00000100b ldi popt_b,00000101b ldi adcr,00110000b ;abilita A/D att jrr 6,adcr,att ;attende fine conversione nop ld a,addr ;prende in a il valore della conversione ld temp,a ;salva nuovo valore misurato della temperatura cp a,trefpiu ;verifica se la temp misurata è superiore a Tref+1,5 gradi jrc very1 ;se inferiore salta set raff,port_c ;altrimenti mette alto il bit PC4 per attivare il raffreddamento jp offall1 very1 cp a,trefmen ;verifica se minore di Tref-1,5 gradi jrnc offall1 ;se maggiore o uguale salta set risc,port_c ;altrimenti mette alto il bit PC5 per attivare riscaldamento jp verum ;va a verificare valori umidità offall1 res raff,port_c ;spegne se acceso raffreddamento res risc,port_c ;spegne se acceso riscaldamento cp a,tmin ;individua e ricorda Tmin e Tmax jrnc max ;se maggiore o uguale salta ld tmin,a ;altrimenti ricorda nuovo valore minimo max cp a,tmax jrc verum ;se minore di Tmax salta ld tmax,a ;altrimenti ricorda nuovo valore massimo verum ldi port_b,00000010b ;PB1 = ADC umidità ldi pdir_b,00000100b ldi popt_b,00000110b attesa jrr 6,adcr,attesa ;attende fine conversione nop ld a,addr ;prende in a il valore della conversione ld umidita,a ;salva valore umidità misurato cp a, urefpiu ;verifica se lumidità misurata è nel range previsto jrc very2 ;se minore di Uref + 10 salta set deum,port_c ;altrimenti mette alto il bit PC7 per attivare deumidificatore jp offall2 very2 cp a,urefmen jrnc offall2 ;se lumidità misurata è maggiore a Uref - 10 salta set umid,port_c ;altrimenti mette alto il bit PC6 per attivare umidificatore jp time offall2 res umid,port_c ;spegne se eventualmente acceso umidificatore res deum,port_c ;spegne se eventualmente acceso deumidificatore time ld a,sec2 ;prende valore di sec2 per verificare se sono due secondi jrnc invia jp adc ;continua a verificare temperatura e umidità invia call portout ;configura port_a come output ld a, temp ;prende temperatura call outdati ;va ad inviare i dati verso la centrale ld a,tmax ;prende temperatura massima call outdati ;invia ld a,tmin ;prende temperatura minima call outdati ;invia ld a,umidita ;prende umidita call outdati ;invia call portin ;configura port_a come input rx jrs read,port_b,rx ;attende che read va basso ldi a,255 ;per un piccolo ritardo ldi x,10 ldia ldi a,255 ;per un piccolo ritardo (circa 50 ms) indati dec a jrz decx ;se terminato ritardo salta jrr read,port_b,indati ;se nel frattempo read non va alto salta a indati jp inizio ;altrimenti la centrale vuole inviare nuovi Tref e Uref decx dec x jrz norx ;terminato il ritardo salta jp ldia ;altrimenti continua ritardo norx clr sec2 ;azzera contatore dei due secondi jp adc
(c) by Vittorio Crapella [ Return ]