EAME DI TATO 2006 ECONDA POVA CITTA POVA DI ITEMI ELETTONICI ED AUTOMAZIONE INDIIZZO: ELETTONICA E TELECOMUNICAZIONI Tema n 2 OLUZIONE POPOTA DAL POF. EGIO BOLOGNINI Osservazioni iniziali ed ipotesi aggiuntive: Il tema richiede di progettare un sistema a microcontrollore o microprocessore. tante 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. i ipotizza di utilizzare elettrovalvole a 12V con corrente di eccitazione di circa 100mA. i ipotizza inoltre che il trasduttore di livello fornisca un segnale digitale 0- ( 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. i sceglie per la sua larga diffusione un micro MICOCHIP della serie PIC 16F87x CHEMA A BLOCCHI 12V ALIM. clock 12V Trasd. di Temp. ensore di livello Condiz. μc Interf. di Potenza Interf. di Potenza Valv1 Valv4 Alimentazione: Ipotizzando di avere una alimentazione generale a 12 V (utile anche per le elettrovalvole) la sez. di ALIM. arà 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. μc 12V Valv b Dimensioniamo la b in modo che sia garantita la corrente di eccitazione dell elettrovalvola. 0,6V 4,4V b = = 4,4KΩ 100mA/ h 1mA FE cegliendo b = 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 è quindi necessario amplificare e traslare il segnale di tensione. La formula che consente di avere 0V in corrispondenza a 2,73V e in corrispondenza di 3,23V è Vomax Vomin Vo=(Vt Voffset) G dove G = = = 10 Vt max Vt min 0, Vomax Mentre Voffset = Vt max = 3,23V 0, = 2, 73V 10 Da cui il circuito seguente; un differenziale che sottrae 2,73 ed un amplificatore non invertente con guadagno 10. Vt + + 2,73V 1 2 + 2,73V 2 Affinché il guadagno del secondo stadio sia 10 è necessario che G = 1 + = 10 da cui otteniamo 1 2=9KΩ (ottenibile con la serie di 2,2KΩ e 6,8KΩ) e 1=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 e 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. i 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 CHAT TAT etup timer, interrupt, A/D, POT I/O, caricamento TAB TEP = 7, MEDIA=0 OA=TEP OA<20 TEP=7 V1,2,3,4 <= OFF OA=20 TAT CONV A/D V1 <= ON omma a 16 bit Fine.conv. MEDIA=MEDIA+ADE LIV=0 TEP=TEP+1 OA=19 MEDIA=MEDIA/13 MIN=TAB(I) V1 <= OFF TM=MEDIA 50/255 OA=21 TEP=TEP+1 TEP=7 TM>15 V2 <= ON TEP=TEP+1 LIV=0 I=1 TM>25 I=2 TM>30 MIN=TAB(I+3) I=2 V2 <= OFF VEDI PAG. EGUENTE TEP=TEP+1
FLOW CHAT 2 PATE CONTINUA vai a spegni valvole vai a inizio OA=22 INTEUPT TIME V3 <= ON LIV=0 AZZEA FLAG INT EC=EC+1 EC=60 V4<= ON MIN=TAB(I+6) V3 <= OFF TEP=TEP+1 EC=0 LIV=0 MIN=MIN+1 MIN=60 MIN=0 OA=OA+1 MIN=TAB(I+9) V4 <= OFF TEP=7 OA=24 OA=0 ITONA i 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). i osservi inoltre che durante la fase di setup viene caricata la tabella dei tempi precedentemente riportata.
CODIFICA egue 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) i 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 I. 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 IUL,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 BTFC TATU,C INCF MEDIAH ; se c è stato carry incrementa mediah DECFZ INDEX GOTO Ciclo MOVLW 51d CALL DIVIDI ; con la routine divide mediah-medial per 51 MOVF I MOVWF TM ; copia il risultato in TM DIVIDI CLF I ; azzera risultato Loop UBWF MEDIAL,F ; medial=medial-w BTFC TATU,C ; se c e prestito (medial<w) salta la prox. Istruz GOTO INCEM ; vai a INCEM DECFZ MEDIAH ; decrementa mediah e se a zero salta prox. Istruz GOTO INCEM ; INCF I ; se mediah è zero salta la prox. Istruz vai a INCEM Loop1 UBWF MEDIAL,F ; medial=medial-w BTF TATU,C ; se c e prestito (medial<w) salta la prox. Istruz GOTO FINE ; vai a INCEM INCF I GOTO LOOP ; ritorna dalla subroutine INCEM INCF I GOTO LOOP FINE ETUN