ESAME DI STATO 2008 TESINA PLURIDISCIPLINARE

ESAME DI STATO 2008
TESINA PLURIDISCIPLINARE
ALLIEVO: AGNOLETTO MAURO
CL. 5°/ST
A.S. 2007/08
Sistema Automatico Pompaggio Olio
1
Sistema automatico pompaggio olio
Uso previsto
Il sistema automatico di pompaggio è stato progettato per l’erogazione di olio utilizzando una
pompa dinamica manuale per fluidi viscosi. Il sistema è stato progettato per uso industriale.
Norme di sicurezza
• Attenzione! Quando si adopera il sistema automatico, per ridurre il rischio di danni
personali e materiali, è necessario osservare alcune precauzioni di sicurezza fondamentali.
E’ quindi indispensabile leggere le istruzioni di seguito riportate e conservare questo
manuale di istruzioni per successive consultazioni.
Tener presenti le caratteristiche dell’ambiente di lavoro
Non installare il sistema in ambienti esterni e sotto la pioggia. Tenere ben illuminata l’area di
lavoro. Non utilizzare il sistema quando vi sia il rischio di provocare un incendio o una esplosione,
per es. in luoghi con atmosfera gassosa o infiammabile.
Installare ed alimentare il sistema seguendo i dati tecnici
Un’istallazione inadeguata, effettuata da personale non
danneggiamento del sistema.
qualificato
può
provocare
il
Sicurezza elettrica
Il sistema utilizza una tensione in corrente continua a 12 e 5 volt pertanto non ussistono rischi di
folgorazioni.
Funzioni
Sul sistema sono presenti :
1. Tastiera alfanumerica 16 tasti
2. Display lcd retro illuminato 2 righe 16 colonne
3. Tasto reset emergenza sulla scheda principale
4. Scheda elettronica principale
5. Motore 12 Volt dc
6. Encoder
7. Alimentatore stabilizzato 12-5 volt
8. Cavo con filo schermato per l’eliminazione eventuali disturbi provenienti dall’encoder)
Montaggio
Il sistema di controllo pompa va installato il più lontano possibile dal fusto di olio.
Il motore/encoder va installato in modo adeguato sulla pompa ad olio in modo da non interferire
con gli organi meccanici e i cavi di controllo e alimentazione. Vedi figura B
Accensione e spegnimento
Per accendere e spegnere il sistema basta premere il pulsante posto sul retro dell’ alimentatore
stabilizzato.
Funzionalità dell’encoder
L’encoder funziona correttamente quando, a motore azionato, i due led posti sulla scheda principale
lampeggiano (fase di lettura posizione e giri del rotore).
Dati tecnici
• Tensione alimentazione scheda
• Giri/min motore a vuoto(max velocità)
• Rapporto giri motore/erogazione in litri
• Quantità minima erogabile
5Vdc/0.7A 12 Vdc/8A
76 giri/min
16 giri/ litro
10
cl
2
•
Quantità massima erogabile (per ciclo)
999
cl
Sono riportati di seguito i componenti utilizzati sulla scheda principale
Componente
Value
Device
C1
C2.5/2
C2
18 pF
CAPNP-2,5
C3
CAP-C4
C5
18 pF
CAPNP-2,5
C6
1 µF
CAPNP-5
D1
BYW51
BYW51
D2
BYW51
BYW51
D5
SRP100
SRP100
D6
1N4148
1N4148
IC1
PIC16F877P
PIC16F877P
IC2
ULN2003AN
ULN2003AN
IC4
ULN2004AN
ULN2004AN
M1
MOTORE1
MORSETTIERA
M2
MOTORE2
MORSETTIERA
M3
MORSETTIERA
MORSETTIERA
M4
Alimentazione 12 Volt MORSETTIERA
M5
Ingresso 5 Volt
MORSETTIERA
M6
MORSETTIERA
MORSETTIERA
NMOS2
BUZ11-2
BUZ11
NMOS3
BUZ11-1
BUZ11
P1
PULSANTE
PULSANTE
Q4
20 MHz
QUARZO
R1
470 Ohm
R_10
R2
R_10
R_10
R4
1 KOhm
R_10
R6
10 K
R_10
R7
1 KOhm
R_10
R8
1k
R_10
R9
10k
R_10
R10
10k
R_10
R11
1k
R_10
R12
1K
R_10
R13
1K
R_10
R14
1K
R_10
R15
1K
R_10
R16
R_10
R_10
R17
10k
POT-L
T1
NPN-BD139
NPN-BD139
TAST1
TASTIERA-HEX
U$1
LCD-DATA_IMAGE
LCD-DATA_IMAGE
U$2
CON_PROG_PIC
CON_PROG_PIC
U$3
LED_5
LED_5
U$6
LED_5
LED_5
Componenti principali
Microcontrollore
Transistor di potenza
Tastiera
Display
Componenti utilizzati sull’encoder
Componente
100NF
FC1
FC2
IC1
M1
M2
R1
R2
R3
R4
Value
Device
4093N
MORSETTIERA
MORSETTIERA
470ohm
220ohm
470ohm
220ohm
C5/3
CNY70
CNY70
4093N
MORSETTIERA
MORSETTIERA
R_10
R_10
R_10
R_10
3
Fotodiodo
Trigger NAND
Schema a blocchi del sistema
Display
Tastiera
retroilluminazione
Interfaccia
di potenza
Motore
1
Interfaccia
di potenza
CPU
encoder
Motore
2
encoder
condizionamento
cavo
Interfaccia di
linea
Interfaccia
di potenza
condizionamento
cavo
Interfaccia
di linea
4
Zoccolo
connessione
programmatore
SCHEMA ELETTRICO
SCHEMA ELETTRICO
Lo schema elettrico e lo sviluppo dei master è stato realizzato con il programma di progettazione
dei circuiti elettronici Eagle.
Per realizzare la scheda finale ci sono voluti diversi tentativi e collaudi effettuando ogni volta le
modifiche più opportune.
La scheda elettronica di comando è costituita principalmente da un microcontrollore della
microchip, il pic16f877A, un display lcd retroilluminato 2 righe 16 colonne, una tastiera
esadecimale, due transistor di potenza mosfet BUZ10, due integrati per l’adattamento delle
tensioni uln2004.
Per il pilotaggio dei motori il microcontrollore ha a disposizione due uscite pwm.
La tecnica pwm consente di modificare via software il duty cycle dell’ onda quadra che pilota il
mosfet; ciò permette di regolare la tensione d’uscita di quest’ultimo da 0 a 12 volt con
conseguente aumento o diminuzione della velocità del motore.
5
Di seguito sono indicati sulla scheda principale le varie uscite e i componenti utilizzati.
Uscita motore 2
Transistor di potenza
Contrasto display
Uscita motore 1
Microcontrollore
Alimentazione
Led segnale encoder
Connettore programmazione
Ingressi segnali encoder
6
Reset
Schema elettrico encoder
Vista dei componenti montati sull’ encoder
Il microcontrollore è stato programmato in “circuit programming” tramite un programmatore siglato
PICkit2 della microchip; ciò permette una rapida programmazione del microcontrollore senza
staccarlo dallo zoccolo. Il software è stato creato e modificato dopo vari tentativi utilizzando il
sistema di sviluppo MPLAB.
7
Progettazione circuito stampato
Ho utilizzato un circuito stampato presensibilizzato ( PCB ).
Questo circuito è ricoperto da una sottile pellicola sensibile ai raggi ultravioletti e resistente alla
soda caustica.
FASE 1) PROGETTAZIONE:ho progettato con Eagle l’intero master
FASE 2) FOTOINCISIONE: dopo aver stampato il master del progetto su acetato, ho sottoposto il
circuito stampato ai raggi ultravioletti (inserendola nel bromografo) per un tempo di 2 minuti
FASE 3) LAVAGGIO: finita la fotoincisione ho immerso la relativa scheda nella soda caustica ,
per togliere il film in eccesso sensibilizzato dai raggi UV.
FASE 4) IMMERSIONE: dopo aver lavato la scheda, l’ho immersa nel cloruro ferrico per
corrodere il rame in eccesso.
FASE 5) FORATURA: tolta la scheda dal cloruro ho proceduto con la foratura.
FASE 6) RASCHIATURA:ho raschiato con la paglietta il circuito stampato, lucidando il rame.
FASE 7) ASSEMBLAGGIO E STAGNATURA:Ho inserito e stagnato tutti i componenti nella
scheda.
FASE 8) INSERIMENTO:ho installato gli integrati negli zoccoli saldati sullo stampato.
FASE 9) Programmazione microcontrollore: creato il software con mplabide, il codice oggetto è
stato scaricato nel microprocessore con l’uso del programmatore PICkit2
FASE 10) COLLAUDO: con il collaudo ho verificato, dando tensione, il corretto funzionamento
del circuito.
Procedura per l’uso della pompa a comando elettronico
1. All’ accensione del sistema viene visualizzato nel display il nome del progettista
2.
Dopo 5 secondi premendo un qualsiasi tasto appare la schermata: ”SELEZIONA OLIO A o
B” (A e B si riferiscono alle due uscite del sistema in quanto è in grado di comandare 2
pompe). La quantità minima erogabile è di 10 centilitri, quella massima è di 999 centilitri
8
3. Selezionato il tipo di olio A o B diamo la conferma con il tasto “S” oppure annulliamo con il
tasto “N”
4. Successivamente appare la schermata: “DOSE CENTILITRI”
9
5.
ora è possibile digitare la quantità da erogare in cl.( ad esempio 350 = 3,5 L); in caso di
errori di digitazione è possibile cancellare premendo il tasto “#”
6. Digitata la quantità desiderata il motore inizia il suo ciclo azionando la pompa e nel display
viene aggiornata costantemente la quantità di olio erogata ogni 25 centilitri fino a risultato
ottenuto. (negli ultimi 2 giri il motore rallenta la sua corsa fino a fermarsi permettendo un
erogazione più precisa)
7. Terminata l’erogazione appare la scritta:”TERMINATO”
In caso di emergenza in qualsiasi momento è possibile arrestare il sistema premendo il tasto reset
posto sulla scheda principale. Per regolare il contrasto del display è sufficiente agire con un piccolo
cacciavite sul trimmer posto sulla scheda principale.
10
Gestione display LCD
Il display LCD, prima di poter visualizzare i caratteri alfanumerici, deve essere opportunamente
“istruito“ cioè programmato secondo quanto indicato dalle specifiche fornite dai costruttori.
Fortunatamente si è imposto uno standard che evita di utilizzare diversi comandi per display di
diverse case costruttrici.
Per poter programmare il display LCD secondo la nostra esigenza, si tratta di esaminare nel foglio
allegato, quali siano le istruzioni da utilizzare.
Bisogna inoltre tener conto che l’ LCD dispone, oltre ad un bus ad 8 bit per inviare/leggere i dati, di
tre segnali di controllo:
R/W: questa linea, se bassa, consente di inviare dati o istruzioni al display. Se alta si possono
leggere i dati memorizzati al suo interno.
Poiché per noi è sufficiente scrivere dei dati o istruzioni, abbiamo collegato,nella demoboard,
questa linea a massa.
RS: questa linea, quando alta, informa il display che il dato presentato sul bus è, in codice ASCII, il
simbolo da visualizzare. Se bassa, il dato presente sul bus è una istruzione
E: mediante un impulso LHL fa acquisire al display quanto presentato sul bus .
Si noti che le istruzioni, per poter essere eseguite correttamente dal display, hanno bisogno di un
certo tempo.
Abbiamo stabilito un tempo di 1 o 2 ms a seconda delle esigenze.
La routine CONFIGURA_LCD viene utilizzata per programmare il display secondo queste
richieste:
i dati sono presentati in formato 8 bit
le righe utilizzate sono 2
il formato del carattere è 5x10 punti
il cursore non viene visualizzato durante la scrittura
i caratteri riguardanti la quantità d’olio desiderata vengono presentati in forma lampeggiante (blink
on )
ogni volta che si scrive un carattere il cursore avanza automaticamente verso destra
il display viene ripulito ( cioè inizialmente non vengono presentati caratteri casuali )
il cursore è posto all’inizio della riga selezionata
vengono inizializzate le aree di memoria che contengono i dati da visualizzare e i rispettivi codici
Detto ciò risulta abbastanza semplice ( anche se un po’ laborioso ) utilizzare il display: le routine
RIGA1 e RIGA2, che servono a scrivere dei caratteri sul display, danno atto di quanto affermato.
Si noti che per gestire il display si utilizzano diverse routine che brevemente riassumiamo:
DISPLAY: è utilizzata per inviare il dato al display e per generare l’impulso di abilitazione
MS1: genera un ritardo di almeno 1 ms che serve al display per rispondere ai comandi
HOME1 e HOME 2 riportano il cursore all’inizio delle righe 1 e 2.
L’uso delle routine è consigliabile anche se il codice viene chiamato una sola volta in quanto il
MAIN risulta di più facile comprensione.
Viene riportata di seguito una parte di routine configurazione e invio dati al display:
;**********ROUTINE CONFIGURAZIONE LCD
CONFIGURA_LCD
BCF
PORTC,6
;PROGRAMMAZIONE LCD RS=0
MOVLW 0x38
;DATI A 8 BIT - 2 RIGHE - FORMATO CARATTERE
CALL
DISPLAY
MOVLW 0x0C
;DISPLAY ON - CURSORE OFF - BLINKING OFF
CALL
DISPLAY
MOVLW 6
;AVANZAMENTO AUTOMATICO CURSORE
CALL
DISPLAY
MOVLW 1
;PULISCI DISPLAY
CALL
DISPLAY
CALL
MS1
;ULTERIORE RITARDO
MOVLW 2
;CURSORE INIZIO RIGA
CALL
DISPLAY
CALL
MS1
;ULTERIORE RITARDO
MOVLW 0x40
;INDIRIZZO CGRAM
CALL
DISPLAY
MOVLW 0X80
;INDIRIZZO DDRAM
CALL
DISPLAY
11
RETURN
;**********ROUTINE INVIO DATI DISPLAY
DISPLAY
MOVWF PORTD
;PRESENTA DATO SU BUS LCD
BSF
PORTC,7
;IMPULSO DI ABILITAZIONE LETTURA
NOP
BCF
PORTC,7
CALL
MS1
;RITARDO 1 MS (CIRCA)
RETURN
;**********ROUTINE COMANDO CURSORE INIZIO SECONDA RIGA
HOME2 BCF
PORTC,6
NOP
MOVLW 0xC0
CALL
DISPLAY
RETURN
;**********ROUTINE COMANDO CURSORE INIZIO PRIMA RIGA
HOME1 BCF
PORTC,6
NOP
MOVLW 0x80
CALL
DISPLAY
RETURN
;********** ROUTINE RITARDO MINIMO 1 MS
MS1
CLRF
MS
LP_MS MOVLW 2
SUBWF MS,0
BTFSS STATUS,2
GOTO
LP_MS
RETURN
;**********ROUTINE AGNOLETTO CHE VISUALIZZA MESSAGGIO INIZIALE
AGNOLETTO
CALL
HOME1
BSF
PORTC,6 ;INVIA DATI
MOVLW 'A'
CALL
DISPLAY
MOVLW 'G'
CALL
DISPLAY
MOVLW 'N'
CALL
DISPLAY
MOVLW 'O'
CALL
DISPLAY
MOVLW 'L'
CALL
DISPLAY
MOVLW 'E'
CALL
DISPLAY
MOVLW 'T'
CALL
DISPLAY
MOVLW 'T'
CALL
DISPLAY
MOVLW 'O'
CALL
DISPLAY
MOVLW ' '
CALL
DISPLAY
MOVLW 'M'
CALL
DISPLAY
MOVLW 'A'
CALL
DISPLAY
MOVLW 'U'
CALL
DISPLAY
MOVLW 'R'
CALL
DISPLAY
MOVLW 'O'
CALL
DISPLAY
MOVLW ' '
CALL
DISPLAY
CALL
HOME2
BSF
PORTC,6
;INVIA DATI
MOVLW ' '
CALL
DISPLAY
MOVLW ' '
CALL
DISPLAY
MOVLW 'C'
CALL
DISPLAY
MOVLW 'L'
CALL
DISPLAY
MOVLW 'A'
CALL
DISPLAY
MOVLW 'S'
12
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW
CALL
RETURN
DISPLAY
'S'
DISPLAY
'E '
DISPLAY
''
DISPLAY
'5'
DISPLAY
'a'
DISPLAY
''
DISPLAY
'S'
DISPLAY
' T'
DISPLAY
' E'
DISPLAY
''
DISPLAY
Gestione tastierino esadecimale
Analizzando lo schema elettrico della scheda principale e tenuto conto della struttura hardware del
tastierino, si nota che la lettura di tale periferica può essere fatta portando a livello basso una
colonna ( o una riga ) e fare la scansione ( lettura ) delle righe ( colonne ). Quando un tasto, che si
trova sulla colonna suddetta, viene azionato, la riga corrispondente a questo tasto si trova a livello
basso e come tale può essere letta.
Configurando le colonne come ingressi e le righe come uscite, con opportuna scansione, si può
stabilire il tasto azionato. Per leggere se è azionato uno dei tasti corrispondenti alla riga 1 ( tasti *, 0,
#, D ), si porta RB0, collegato a tale riga, a livello basso, mentre RB1, RB2 e RB3 vengono posti a
livello alto.
Successivamente si interrogano gli ingressi (colonne ) da RB4 a RB7.
Se essi sono alti significa che nessun tasto è azionato.
Se invece un ingresso è basso significa che il tasto corrispondente a quella riga è azionato.
Ad esempio, se viene trovato basso RB7 significa che il tasto azionato è *.
Quando viene incontrato un livello basso, tramite una istruzione di salto, si va a caricare
l’accumulatore con un codice che corrisponde ad un determinato tasto e si torna al programma
chiamante che avrà cura di leggere l’accumulatore per stabilire il tasto azionato.
Nel programma viene utilizzato anche il software che consente di eliminare i rimbalzi dei contatti.
La logica seguita è la seguente:
a) quando viene riconosciuto un livello basso su uno degli ingressi, si chiama una routine di
ritardo di 20ms che consente di ignorare lo stato della periferica finché ci sono i rimbalzi.
b) Trascorso tale tempo, si attende che il tasto venga rilasciato ( si testa se l’ingresso viene
portato a livello alto ).
c) Riconosciuto questo evento si richiama la routine di ritardo e si torna al MAIN.
I valori restituiti al programma chiamante sono i seguenti:
•
•
•
•
•
•
•
•
•
•
•
Tasto 0
Tasto 1
Tasto 2
Tasto 3
Tasto 4
Tasto 5
Tasto 6
Tasto 7
Tasto 8
Tasto 9
Tasto A
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
0
1
2
3
4
5
6
7
8
9
10
13
•
•
•
•
•
Tasto B
Tasto C
Tasto D
Tasto *
Tasto #
valore restituito
valore restituito
valore restituito
valore restituito
valore restituito
11
12
13
14
15
Il valore restituito viene utilizzato come puntatore per accedere alla tabella che contiene i codici
ASCII dei singoli tasti.
Viene riportata di seguito parte di routine per la lettura del tastierino esadecimale:
TASTIERA
MOVLW
MOVWF
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
B'00001110'
PORTB
PORTB,4
TASTOD
PORTB,5
TASTOCANC
PORTB,6
TASTO0
PORTB,7
TASTOAST
;SCANSIONE COLONNE
;PREMUTO D?
;PREMUTO #?
;PREMUTO 0?
;PREMUTO *?
MOVLW
MOVWF
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
B'00001101'
PORTB
PORTB,4
TASTOC
PORTB,5
TASTO9
PORTB,6
TASTO8
PORTB,7
TASTO7
;SCANSIONE COLONNE
MOVLW
MOVWF
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
B'00001011'
PORTB
PORTB,4
TASTOB
PORTB,5
TASTO6
PORTB,6
TASTO5
PORTB,7
TASTO4
MOVLW
MOVWF
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
GOTO
B'00000111'
PORTB
PORTB,4
TASTOA
PORTB,5
TASTO3
PORTB,6
TASTO2
PORTB,7
TASTO1
TASTIERA
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,6
LP1
MS_20
0
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,7
LP2
MS_20
1
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,6
LP3
MS_20
2
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
;PREMUTO C?
;PREMUTO 9?
;PREMUTO 8?
;PREMUTO 7?
;SCANSIONE COLONNE
;PREMUTO B?
;PREMUTO 6?
;PREMUTO 5?
;PREMUTO 4?
;SCANSIONE COLONNE
;PREMUTO A?
;PREMUTO 3?
;PREMUTO 2?
;PREMUTO 1?
;SE NESSUN TASTO PREMUTO, ESEGUI NUOVA SCANSIONE
TASTO0
LP1
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO1
LP2
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO2
LP3
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO3
14
LP4
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,5
LP4
MS_20
3
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,7
LP5
MS_20
4
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,6
LP6
MS_20
5
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,5
LP7
MS_20
6
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,7
LP8
MS_20
7
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
BTFSS
GOTO
CALL
MOVLW
RETURN
MS_20
PORTB,6
LP9
MS_20
8
;RITARDO ELIMINA RIMBALZI
;ATTENDI RILASCIO PULSANTE
CALL
MS_20
;RITARDO ELIMINA RIMBALZI
BTFSS
GOTO
CALL
MOVLW
RETURN
PORTB,5
LP10
MS_20
9
;ATTENDI RILASCIO PULSANTE
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
CALL
MS_20
;RITARDO ELIMINA RIMBALZI
BTFSS
GOTO
CALL
MOVLW
RETURN
PORTB,4
LP11
MS_20
0X0A
;ATTENDI RILASCIO PULSANTE
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
CALL
MS_20
;RITARDO ELIMINA RIMBALZI
BTFSS
GOTO
CALL
MOVLW
RETURN
PORTB,4
LP12
MS_20
0X0B
;ATTENDI RILASCIO PULSANTE
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
CALL
MS_20
;RITARDO ELIMINA RIMBALZI
BTFSS
GOTO
CALL
MOVLW
RETURN
PORTB,4
LP13
MS_20
0X0C
;ATTENDI RILASCIO PULSANTE
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
CALL
MS_20
;RITARDO ELIMINA RIMBALZI
PORTB,4
LP14
MS_20
0X0D
;ATTENDI RILASCIO PULSANTE
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO4
LP5
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO5
LP6
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO6
LP7
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO7
LP8
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO8
LP9
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
TASTO9
LP10
TASTOA
LP11
TASTOB
LP12
TASTOC
LP13
TASTOD
LP14
BTFSS
GOTO
CALL
MOVLW
RETURN
TASTOCANC
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
15
CALL
MS_20
;RITARDO ELIMINA RIMBALZI
PORTB,5
LP15
MS_20
0X0E
;ATTENDI RILASCIO PULSANTE
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
MS_20
;RITARDO ELIMINA RIMBALZI
PORTB,7
LP16
MS_20
0X0F
;ATTENDI RILASCIO PULSANTE
LP15
BTFSS
GOTO
CALL
MOVLW
RETURN
TASTOAST
CALL
LP16
BTFSS
GOTO
CALL
MOVLW
RETURN
;RITARDO ELIMINA RIMBALZI
;RITORNA CODICE TASTO PREMUTO
;**********************ROUTINE DELAY 20MS***************************************
MS_20 CLRF
MS
LP_MS2 MOVLW D'20'
SUBWF MS,0
BTFSS STATUS,2
GOTO
LP_MS2
RETURN
;****** ROUTINE MOLTIPLICAZIONE TRA DUE NUMERI A 8 BIT
MUL
MOVLW 8
MOVWF CONT
CLRW
CLRF
RL
MUL1
RRF
MPR
BTFSC STATUS,0
ADDWF MPD,0
MOVWF RH
RRF
RH,0
RRF
RL
DECFSZ CONT
GOTO
MUL1
MOVWF RH
RETURN
;******** ROUTINE DIVISIONE
DIV
CLRF
QUOZ
MOVLW 8
MOVWF CONT
D1
BCF
STATUS,0
RLF
QUOZ
BCF
STATUS,0
RLF
RL
RLF
RH
MOVF
DIVISORE,0
SUBWF RH,0
BTFSS STATUS,0
GOTO
D2
MOVWF RH
INCF
QUOZ
D2
DECFSZ CONT
GOTO
D1
RETURN
Controllo della potenza fornita al motore
La tecnica PWM è caratterizzata da un generatore di onde quadre che alimenta, tramite interfaccia
di potenza, un generico carico.
L’onda quadra ha periodo T e durata dell’impulso t. Nell’ipotesi che Vcc sia l’ampiezza
dell’impulso, la tensione media fornita al carico vale Pm = Vcc*t/T. Il termine t/T si chiama duty
cycle e viene di norma fornito in %. Variando il duty cycle, vale a dire mantenendo T costante e
facendo variare t, la tensione media sul carico può variare da 0 a Vcc e così pure la potenza da 0 ad
un certo valore massimo. Dunque variando t, si modula la potenza fornita al carico.
Interfaccia pwm nel pic16f877a
Il microcontrollore della scheda di pompaggio dispone di due uscite PWM ,RC2/CCP1 e
RC1/CCP2, che sono controllate via software agendo su opportuni registri dedicati.
16
Di seguito si analizza come controllare l’uscita RC2/CCP1; analoghi discorsi valgono per l’altra
uscita PWM.
I registri dedicati al controllo dell’uscita CCP1 in modalità PWM sono T2CON, TMR2, PR2,
CCPR1L CCPR1H e CCP1CON.
Il funzionamento è il seguente:
- Quando il contatore a 8 bits TMR2, comandato dal clock del processore, raggiunge il valore
contenuto nel registro PR2, l’uscita PWM si porta alta automaticamente , TMR2 viene
azzerato, il contenuto del registro CCPR1L e i 2 bit 5 e 4 del registro CCP1CON vengono
trasferiti in CCPR1H. Quest’ultimo registro non è accessibile da software ma è solo un
latch.
- L’uscita rimane alta finchè TMR2 raggiunge il valore contenuto nel registro CCPR1H.
Da quanto esposto, per variare il duty cycle è necessario variare il contenuto di CCPR1L mentre il
registro PR2 è utilizzato per stabilire il periodo T.
Attraverso questa è possibile far girare più lentamente il motore della pompa negli ultimi due giri di
erogazione al fine di ottenere un’erogazione più precisa.
Viene riportata di seguito la parte di codice che permette la diminuzione di velocità motore in pwm:
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
0XFF
PR2
B'00000100'
T2CON
0X9F
CCPR1L
B'00001111'
CCP1CON
;RALLENTA MOTORE
Motore con Encoder
Lettura giri e posizione rotore principale della pompa (encoder)
Per monitorare istante per istante la posizione e i giri dell’ingranaggio principale del motore e
permettere un dosaggio preciso, è stato progettato e creato un encoder composto principalmente da
due accoppiatori ottici “cny70” e due trigger di schmitt “cd4093” usati come squadratori di segnale
e interfacce di linea come mostrato di seguito.
17
Fotodiodi
I due sensori sono posti dietro l’ingranaggio del motore ( dietro i due fori (foto a) ), al quale è stato
applicato un adesivo con stampati due cerchi suddivisi a sua volta in quattro spicchi colorati in
alternanza di bianco e nero (foto b)
foto a
foto b
sensori
(posti dietro il motore)
Immagine della sede dell’ingranaggio con fori (senza ingranaggio)
Ogni sensore emette un fascio di luce all’infrarosso che va a colpire la superficie del rotore che è
suddiviso in spicchi bianchi e neri. Se la superficie colpita è nera il fascio viene assorbito e il
microcontrollore legge un livello logico 1. Al contrario se la superficie colpita è bianca il fascio
viene riflesso e il microcontrollore legge il livello logico 0.
Inoltre per il controllo del funzionamento, lo stato di ogni sensore permette di gestire due diodi led
posti nella scheda di controllo principale.
Con questa tecnica il microcontrollore è in grado di capire la posizione esatta e in numero di giri
effettuati dal rotore con una risoluzione di un quarto di giro.
Questa codifica è detta a codice gray in quanto lo stato dell’encoder a due bit si alterna cambiando
un solo bit. (fig. c)
Fig. c
00
01
10
11
18
Di seguito sono riportate le 4 possibili letture della posizione rotore (i sensori vengono posti
esattamente sopra i due fori)
lettura “01”
lettura “00”
lettura “10”
Viene riportata di seguito la parte di codice che permette la lettura dei sensori:
LPA1
MOVF
BTFSC
GOTO
CALL
CALL
MOVLW
ANDWF
SUBWF
BTFSC
GOTO
SETH
STATUS,2
PIPPO1
DS1
LED_ENCODER
0X0C
PORTA,0
ENCODER,0
STATUS,2
LPA1
CALL
MOVLW
ANDWF
SUBWF
BTFSS
GOTO
INCF
MOVLW
SUBWF
BTFSS
GOTO
LED_ENCODER
0X0C
PORTA,0
ENCODER,0
STATUS,2
LPA2
GIRI
4
GIRI,0
STATUS,2
LPA1
;CONTROLLA SE PARTE ALTA SETTORI E' NULLA
;VISUALIZZA LED STATO ENCODER
;CONTROLLA SE SUPERATO PRIMO SETTORE
LPA2
;VISUALIZZA LED STATO ENCODER
;CONTROLLA SE FATTO UN GIRO
;AGGIORNA CONTEGGIO GIRI
;CONTROLLA SE FATTI 4 GIRI
CLRF GIRI
Master scheda di comando (scala 1:1)
Lato componenti
19
lettura “11”
Master scheda encoder (scala 2:1)
Lato componenti
20
Lato rame
Posizione componenti
Scheda principale (scala 1:1)
21
Posizione componenti
Encoder (scala 2:1)
22