You are on page 1of 7

ESAME DI STATO 2006 SECONDA PROVA SCRITTA

PROVA DI SISTEMI ELETTRONICI ED AUTOMAZIONE

INDIRIZZO: ELETTRONICA E TELECOMUNICAZIONI

Tema n° 2

SOLUZIONE PROPOSTA DAL PROF. SERGIO BOLOGNINI

Osservazioni iniziali ed ipotesi aggiuntive:

Il tema richiede di progettare un sistema a microcontrollore o microprocessore. Stante le prestazioni


limitate richieste al sistema (accensione e spegnimento di periferici in tempi molto lunghi e
precisione richiesta non spinta) si predilige una soluzione a microcontrollore. Il micro scelto deve
avere una linea analogica di ingresso (per il sensore di temperatura), un convertitore A/D interno, 4
uscite digitali (per le elettrovalvole) e un ingresso digitale (on off) per il sensore di livello.
La pompa è sempre sotto tensione per cui solo le elettrovalvole vengono comandate dal micro
attraverso una semplice interfacci di potenza. Si ipotizza di utilizzare elettrovalvole a 12V con
corrente di eccitazione di circa 100mA.
Si ipotizza inoltre che il trasduttore di livello fornisca un segnale digitale 0-5V (5V livello sup a .
Un semplice esempio è fornito da due conduttori vicini immersi nell’acqua e posti al livello
desiderato, se l’acqua raggiunge i conduttori chiude il contatto.
Un elemento centrale del problema in questione è certamente la determinazione dell’ora. Il sistema
deve essere dotato di un orologio; in tal senso si hanno tre possibilità distinte:
a. dotare il sistema di un modulo clock real time che fornisce l’ora esatta al sistema attraverso
un collegamento seriale
b. fornire al micro un clock da 1Hz che gli consenta di incrementare tre celle relative a sec,
min e ore.
c. Utilizzare il clock del micro e attraverso il timer interno ricavare il clock efficace per la
determinazione del tempo.
La soluzione a seppure più performante richiede un modulo esterno in generale abbastanza costoso
(soprattutto se si prevede che l’aggiornamento dell’ora avvenga via radio ). Le altre due soluzioni
sono equivalenti con il vantaggio per la terza di non richiedere circuiteria aggiuntiva. In entrambe
queste dovrà essere prevista una fase di setup del sistema in cui inserire l’ora esatta da cui far partire
l’orologio interno. Per tale funzionalità si possono prevedere due tasti uno di up e uno di entry che
consentano di inserire l’ora esatta (premo entry e inserisco le ore modificandole con up e
confermandole con una seconda pressione del tasto entry, che mi sposta ai minuti ecc. dopo
l’immissione dei secondi la pressione del tasto entry riporta al funzionamento normale).
Per quanto detto scegliamo la soluzione c ipotizzando quindi che all’accensione (installazione) una
fase di impostazione ora inizializzi ore minuti e secondi.
Per le specifiche sopra esposte,risulta adatto un microcontrollore di fascia bassa a 8bit. Si sceglie
per la sua larga diffusione un micro MICROCHIP della serie PIC 16F87x

SCHEMA A BLOCCHI

12V 5V
ALIM. clock 12V

Interf.
di Valv1
Potenza
Trasd.
Condiz.
di μC
Temp.
Interf.
Sensore di di Valv4
livello Potenza

Alimentazione:
Ipotizzando di avere una alimentazione generale a 12 V (utile anche per le elettrovalvole) la sez. di
ALIM. Sarà composta da un semplice regolatore di tensione 7805 che fornisce una uscita stabile a 5
Volt. L’alimentazione a 12 sarà utilizzata anche per la sezione di condizionamento del segnale
proveniente dal trasduttore.

Interfaccia di Potenza per le elettrovalvole:


Come detto l’elettrovalvola è elettricamente una bobina per comandarla possiamo utilizzare una
semplice interfaccia a transistor, come riportato in figura. Il diodo di protezione protegge il
transistor dalle sovratensioni generate dalla bobina interna all’elettrovalvola in commutazione.
Dimensioniamo la Rb in modo che sia garantita la
12V
corrente di eccitazione dell’elettrovalvola.
Valv
5V − 0,6V 4,4V
μC Rb Rb = ≅ = 4,4 KΩ
100mA / hFE 1mA
Scegliendo Rb = 2,2KΩ assicuro la saturazione.
Condizionamento del trasduttore di temperatura:
Il segnale proveniente dal trasduttore di temperatura fornisce una tensione Vt=10mv/°K·T
Ipotizzando una T che varia da 0°C a 50°C ne segue che il valore in Kelvin oscilla da 273K a 323K
Ciò fornisce una Vt che varia da 2,73V a 3,23V. Il micro scelto accetta in ingresso valori da 0 a 5V
è quindi necessario amplificare e traslare il segnale di tensione. La formula che consente di avere
0V in corrispondenza a 2,73V e 5V in corrispondenza di 3,23V è
Vo max− Vo min 5V
Vo=(Vt –Voffset)·G dove G= = = 10
Vt max− Vt min 0,5V
Vo max
Mentre Voffset = Vt max− = 3,23V − 0,5V = 2,73V
10
Da cui il circuito seguente; un differenziale che sottrae 2,73 ed un amplificatore non invertente con
guadagno 10.

R
Vt +
R +

2,73V –

R
R1 R2
R

5V

+
2,73V

R2
Affinché il guadagno del secondo stadio sia 10 è necessario che G = 1 + = 10 da cui otteniamo
R1
R2=9KΩ (ottenibile con la serie di 2,2KΩ e 6,8KΩ) e R1=1KΩ. Non si è ritenuto necessario
inserire un filtro passa basso perché l’operazione di media delle temperature costituisce di fatto un
filtraggio numerico passa basso.
Programma di gestione:
Prima di presentare il diagramma di flusso alcune considerazioni.
Il programma deve dalle 7.00 alle 19.00 acquisire la temperatura ed effettuarne la media, non è
quindi necessario salvare i singoli valori, ogni dato verrà sommato in un'unica variabile (su due
celle a 8 bit MEDIAH e MEDIAL). In questa fase viene anche controllato il livello, se la linea viene
trovata a 0 (livello inferiore a 2m) si attenderà la giornata successiva e per quella giornata non si
effettuerà irrigazione (è plausibile pensare che il pozzo sia naturale e quindi che si possa riempire
solo in tempi medio lunghi)
Alle 19.00 viene eseguita la media della temperatura: se inferiore a 15 non si avrà irrigazione (si
aspetteranno ancora le 7.00). La temperatura determina il contenuto di una variabile indice che
indirizza una tabella (di seguito) che contiene il tempo di irrigazione delle diverse zone.

Ind 1 2 3 4 5 6 7 8 9 10 11 12
min. 20 26 30 30 39 45 30 39 45 40 52 60

Se la temp è compresa tra 15° e 25° l’indice relativo è 1 e i tempi saranno relativi alla cella 1, 4, 7,
10. Indirizzando la tabella con i per la zona 1, i+3 per la 2, i+6 per la terza e i+9 per la quarta
determino senza ulteriori controlli il tempo corretto di irrigazione (si noti in questo modo che i
tempi sono facilmente modificabili modificando la tabella).
La gestione dell’orologio viene fatta in interrupt di timer. Si imposta in modo che scateni interrupt
ogni secondo, ad es. Timer a 16 bit, tempo di ciclo 1µs, prescaler 64 e timer precaricato a 15625
(contando in up va messo a 49911= 65536-15625).
FLOW CHART

START

Setup timer, interrupt, A/D,


PORT I/O, caricamento TAB
STEP = 7, MEDIA=0

ORA=STEP
?
S
STEP=7
ORA<20 S
? V1,2,3,4 <= OFF

S ORA=20? S
START CONV A/D
V1 <= ON

Fine.conv.? S
LIV=0?
Somma a 16 S
bit
MEDIA=MEDIA+ADRES
MIN=TAB(I)
?
STEP=STEP+1 ORA=19?
S
S V1 <= OFF
MEDIA=MEDIA/13
STEP=STEP+1
TM=MEDIA·50/255 S
ORA=21?

STEP=7 TM>15 V2 <= ON

S S
STEP=STEP+1 LIV=0?
I=1 TM>25

S
MIN=TAB(I+3)
I=2 TM>30 ?
S
S V2 <= OFF
I=2
STEP=STEP+1
VEDI PAG.
SEGUENTE
FLOW CHART 2° PARTE
vai a inizio
CONTINUA vai a spegni
valvole

ORA=22? S

V3 <= ON

INTERRUPT S
LIV=0?
TIMER

AZZERA FLAG INT MIN=TAB(I+6)?

SEC=SEC+1 S
V3 <= OFF

SEC=60? STEP=STEP+1
V4<= ON

S
SEC=0 LIV=0?

MIN=MIN+1
MIN=TAB(I+9)?
MIN=60?
S
V4 <= OFF
MIN=0
STEP=7
ORA=ORA+1

ORA=24?

ORA=0

RITORNA

Si noti che la variabile step contiene l’ora della prossima operazione, e che la stessa variabile viene
caricata a 7 quando il livello scende sotto i due metri (spegnendo contestualmente le due valvole). In
questo caso infatti l’irrigazione va interrotta e si attende la giornata seguente (durante la quale verrà
nuovamente controllato il livello). Si osservi inoltre che durante la fase di setup viene caricata la tabella
dei tempi precedentemente riportata.
CODIFICA
Segue la codifica in assembler per PIC 16F87x della porzione di programma che esegue la divisione
per 13 e la successiva moltiplicazione per 10 e divisione per 51 (equivalente all’operazione
TM=MEDIA*50/255)
Si utilizza una routine DIVIDI che divide il valore 16 bit contenuto in MEDIAH e MEDIAL per il
valore contenuto nel working e mette il risultato nella variabile RIS.
La divisione viene eseguita per sottrazioni successive e ignorando il resto, mentre la moltiplicazione
viene operata con il metodo delle somme successive.

MOVLW 13d
CALL DIVIDI ; chiama la routine che divide mediah-medial per 13
MOVF RISUL,W ; mette il risultato in medial
MOVWF MEDIAL
MOVLW 9d ; carica nella variabile ind 9 (per la moltiplicaz. Per 10)
MOVWF IND
MOVF MEDIAL ; mette medial nel working
Ciclo
ADDWF MEDIAL,F ; medial=medial+w
BTFSC STATUS,C
INCF MEDIAH ; se c’è stato carry incrementa mediah
DECFSZ INDEX
GOTO Ciclo
MOVLW 51d
CALL DIVIDI ; con la routine divide mediah-medial per 51
MOVF RIS
MOVWF TM ; copia il risultato in TM

DIVIDI
CLRF RIS ; azzera risultato
Loop
SUBWF MEDIAL,F ; medial=medial-w
BTFSC STATUS,C ; se c’e prestito (medial<w) salta la prox. Istruz
GOTO INCREM ; vai a INCREM
DECFSZ MEDIAH ; decrementa mediah e se a zero salta prox. Istruz
GOTO INCREM ;
INCF RIS ; se mediah è zero salta la prox. Istruz vai a INCREM
Loop1
SUBWF MEDIAL,F ; medial=medial-w
BTFSS STATUS,C ; se c’e prestito (medial<w) salta la prox. Istruz
GOTO FINE ; vai a INCREM
INCF RIS
GOTO LOOP ; ritorna dalla subroutine
INCREM
INCF RIS
GOTO LOOP
FINE
RETURN

You might also like