Istituto Tecnico Industriale Statale “Enrico Mattei” Corso: Elettronica e Telecomunicazioni ANNO SCOLASTICO 2010 ‐ 2011 SISTEMA DI PARCHEGGIO AUTOMATIZZATO PER AUTOMOBILE (Self‐Parking Car) Galli Andrea Indice 1. Introduzione………………………………………………………………………………………………………………….pag 3 2. Il progetto……………………………………………………………………………………………………………………..pag 3 3. Schema a blocchi del progetto…………………………………………………………………………………..….pag 4 4. Hardware…………………………………………………………………………………………………………………..…pag 5 5. Schemi elettrici e board………………………………………………………………………………………………..pag 12 6. Funzionamento del progetto………………………………………………………………………………………...pag 14 • Schema manovra di parcheggio……………………………………………………………………………...pag 15 7. Impostazione del Software…………………………………………………………………………………………...pag 18 8. Software……………………………………………………………………………………………………………………....pag 20 9. Pilotaggio Motori e PWM…………………………………………………………………………………………..….pag 24 10. Teoria………………………………………………………………………………………………………………………..….pag 26 • Scheda di acquisizione dati…………………………………………………………………………………..….pag 26 • Microcontrollore………………………………………………………………………………………………..…...pag 29 11. Foto del progetto realizzato……………………………………………………………………………………..……pag 31 12. Bibliografia…………………………………………………………………………………………………………...……….pag 32 Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 2 Introduzione Con il seguente progetto si vuole riassumere il lavoro svolto durante i 3 anni di specializzazione, applicando tutte le conoscenze e competenze acquisite nelle varie materie tecniche. Ogni dispositivo e componente utilizzato (esclusi sensori IR e la scocca della macchina con i motori) sono stati prelevati dai laboratori dell’istituto così come le fasi di assemblaggio e collaudo sono state svolte in quest’ultimi. Il progetto Lo scopo di questo progetto consiste nella realizzazione e nella sperimentazione di un sistema di parcheggio automatico di un’automobile (per semplicità si usa un modellino in scala ridotta). La macchina, posta in posizione iniziale, inizia la manovra (dopo un opportuno segnale di attivazione tramite un tasto) evitando autonomamente tutti gli ostacoli, per poi parcheggiarsi correttamente (il parcheggio deve avere dimensioni minime: 18cm di larghezza e 50 cm di lunghezza). Questo sistema si definisce “attivo” perché oltre a rilevare gli ostacoli gli evita, compiendo così autonomamente la manovra. Invece un sistema “passivo” (quello più commercializzato nelle autovetture in questi ultimi anni) aiuta solamente il conducente a svolgere la manovra, rilevando gli ostacoli (tramite dei sensori ultrasuoni) e producendo un segnale sonoro intermittente che cresce al diminuire della distanza tra la vettura e l’ostacolo (quindi la manovra è sempre eseguita dal guidatore). Nel suo complesso questo progetto è niente meno che una scheda di acquisizione dati. Infatti è costituito da 3 sensori infrarossi che rilevano la distanza dagli ostacoli (fornendo in uscita una tensione che dipende da quest’ultima), un multiplexer analogico che seleziona i canali dei sensori, un convertitore analogico/digitale (ADC) e un sistema a microcontrollore che memorizza tutti i dati digitali dei sensori forniti dall’ADC e in base al software inserito dall’utente gli elabora, compiendo poi quei comandi che si interfacceranno verso l’esterno (in questo caso l’azionamento o meno dei motori e il loro senso di rotazione). Come microcontrollore si è utilizzato uno Z8F6423 e al suo interno sono già presenti un ADC a 10 bit con 8 canali e il relativo multiplexer per selezionarli. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 3 Schema a blocchi del progetto Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 4 Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 5 Nello schema a blocchi precedente si ha: 1. L293B (Driver per 2 motori c.c. ) 2. 3 sensori IR 2D120X (Sharp), S1, S2 e S3. 3. 2 motori c.c. (ogni motore eroga 60 mA). 4. Microcontrollore Z8F6423 (Zilog) 5. Circuiti di alimentazione • Alimentatore stabilizzato 5V (per scheda Z8F6423) • Stabilizzatore a 5V (7805) alimentato con pila transistor 9V (per i 3 sensori 2D120X) • Alimentatore stabilizzato 12V (per L293B). Hardware Sensore IR 2D120X (Sharp): Nel progetto sono presenti 3 sensori infrarossi di questo tipo, uno collocato nella parte anteriore del veicolo e 2 nella parte posteriore (di cui uno posizionato nello spigolo). Inoltre sono stati installati nel lato destro del modellino perché il parcheggio è svolto in quel senso. Sono di dimensioni abbastanza ridotte e sono in grado di rilevare distanze che vanno da 4 a 30 cm. Nella parte anteriore presenta 2 parti: una per l’emettitore di luce e una per il relativo ricevitore. Schema a blocchi del sensore
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 6 Il led emittente produce un segnale con una lunghezza d’onda pari circa a λ = 850 nm e quando viene riflesso da un oggetto o da un ostacolo viene captato dal ricevitore. Successivamente il dispositivo calcola il tempo trascorso fra emissione e ricezione del segnale e in base a quest’ultimo il sensore modula la tensione in uscita, che in relazione alla distanza ha il seguente andamento: Chiaramente da questo grafico si intuisce subito perché il sensore ha come dato di targa la rilevazione di ostacoli da 4 a 30 cm. Il motivo sta nel fatto che al di sopra dei 30 cm si ha un rilevamento insicuro mentre al di sotto dei 4 cm il sensore da in uscita una tensione fittizia che replica valori di tensione di altre distanze rilevate (es: sia a 1 cm che a 7 cm il valore di tensione in uscita è di circa 1.8V). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 7 Nella parte posteriore del sensore risiedono i pin per l’alimentazione e per prelevare l’uscita: Per rispettare al massimo il grafico illustrato precedentemente (pag 6) il dispositivo deve essere alimentato a Vcc = 5V, con una corrente minima Icc = 33 mA. Inoltre l’uscita ha dei tempi di risposta molto veloci, più che sufficienti per effettuare la manovra di parcheggio. Il costruttore raccomanda (per avere un corretto funzionamento del sensore) di evitare la luce diretta sulle lenti, di fare in modo che il moto delle superfici per il rilevamento sia orizzontale e con eventuali linee di demarcazione verticali. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 8 Posizionamento dei 2 sensori
posteriori (S1 e S2)
Posizionamento sensore anteriore
(S3)
L293B: L’ L293B è un circuito integrato in grado di pilotare due motori in continua fornendo in uscita una corrente massima di 1A per canale. Al suo interno sono presenti 2 ponti H (uno per ciascun motore, è una struttura a 4 transistor che ne permette il pilotaggio) ed essendo integrato questo dispositivo è molto versatile, occupa poca area nel circuito, può essere montato con altri L293B in parallelo per ottenere correnti più elevate e hanno un range di alimentazione ampio ( L293B da Vss (alimentazione della logica, minimo 4.5V) a 36V ). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 9 Dalla piedinatura qui a fianco si possono notare le due alimentazioni separate per la logica e i motori (Vss e Vs). Infatti la logica può essere alimentata a una tensione più bassa per ridurre la dissipazione di calore, ma è anche possibile collegarla all’alimentazione dei motori (fino a un massimo di 36V). Inoltre si possono notare le uscite per i due motori e i rispettivi input per pilotarli (sono TTL compatibili). I chip enable (uno per ogni canale) hanno la funzione di inibire o meno i driver del dispositivo (se è basso il dispositivo è inibito, viceversa si possono controllare i motori). Nella figura a fianco si può osservare un esempio di pilotaggio di un motore c.c. (applicato anche nel progetto per i due motori). Gli ingressi C e D stabiliscono il senso di rotazione del motore mentre Vinh ,come già detto prima, attiva o meno il dispositivo. Quest’ultimo segnale, oltre a questa funzione, è in grado di regolare la velocità di un motore se comandato da un segnale PWM (vedere meglio pag 24 ). I diodi sono di protezione e servono per evitare la distruzione del dispositivo quando si hanno sovratensioni di apertura del motore. Per finire ecco alcuni dati di targa significativi del dispositivo (datasheet). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 10 Foto scheda per pilotaggio motori (sterzo e motore posteriore) con L293B
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 11 Motori in continua a spazzole (DC motors): Questi piccoli motori in continua hanno come grandi vantaggi una grandissima flessibilità di impiego, un elevato rapporto peso/potenza, sono facilmente regolabili in velocità e hanno un’elevata coppia di spunto. Invece tra i difetti presentano dei picchi di tensione nella commutazione meccanica delle spazzole (creano non pochi problemi all’elettronica di controllo e incrementano le emissioni elettromagnetiche), le spazzole sono molto fragili e la coppia d’inerzia è molto elevata. Sono costituiti da una carcassa con all’interno un albero rotante munito di avvolgimenti di spire solidali, circondato da due magneti permanenti (che generano un campo magnetico). La rotazione del motore è data dall’alimentazione di due spazzole (brush) che strisciano sui contatti elettrici del rotore. Per invertire il senso di rotazione basta invertire la polarità dell’alimentazione delle spazzole o nel caso di alimentazione duale fornire una tensione negativa o positiva. Nel progetto sono presenti due di questi motori, uno per lo sterzo e uno per la trazione (posteriore) ed erogano una corrente di circa 60 mA. Altro Hardware: La lettura dei sensori, la conversione dei valori prelevati (tramite ADC) e la loro elaborazione sono effettuati dal microcontrollore Z8F6423 così come la generazione dei segnali per il pilotaggio dei motori (che saranno inviati all’ L293B già descritto). Per l’alimentazione dei sensori si è utilizzato uno stabilizzatore di tensione 7805 alimentato con una pila transistor 9V. Invece per l’alimentazione dell’L293B (Vcc=12V) e della scheda Z8F6423 (Vcc=5V) si è utilizzato un alimentatore per PC. Qui sotto una foto del modello di autoveicolo utilizzato
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 12 Schemi elettrici e board Schema elettrico circuito per pilotaggio motori (L293B): Lato rame:
Lato rame superiore (doppia faccia):
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 13 Lato componenti: Schema elettrico circuito di alimentazione dei sensori: Lato rame:
Lato componenti: Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 14 Foto circuito di
alimentazione dei sensori Funzionamento del progetto Come già detto il modellino, partendo da una posizione iniziale stabilita con un apposito comando di start, è in grado di svolgere la manovra di parcheggio verso destra (quindi i sensori sono rivolti in quel lato, ma essendo la cosa duale potevano essere installati anche nel lato sinistro) e l’area di parcheggio deve avere dimensioni minime di 18 cm di larghezza e 50 cm di lunghezza (il modellino misura 27 cm di lunghezza e 12 cm di larghezza). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 15 Schema manovra di parcheggio: Per effettuare questo parcheggio l’autoveicolo segue i seguenti passaggi: 1. Innanzitutto il modellino è posizionato nella seguente posizione iniziale e dopo un segnale di start (tramite il tasto PC0), attende qualche secondo e inizia la manovra sterzando prima le ruote a destra e poi le ruote posteriori in retromarcia interrogando contemporaneamente il sensore S1. 2. Quando il sensore S1, durante la retromarcia, rileva una distanza di 10cm il microcontrollore ferma tutti i motori e dopo qualche secondo sterza le ruote verso sinistra e le ruote posteriori ancora in retromarcia, interrogando poi i sensori S1 e S2. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 16 Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 17 3. Se uno dei due sensori S1 e S2 rileva per primo la distanza critica di 4cm, il microcontrollore ferma di nuovo tutti i motori, attende qualche secondo e procede inviando un comando alla scheda di pilotaggio dei motori per sterzare le ruote a destra e le ruote posteriori in avanti, interrogando contemporaneamente il sensore S3. 4. Mentre il modellino avanza il sensore S3 rileva la distanza dall’ostacolo di fronte e se si trova a 4cm il µC invia un comando di stop a tutti i motori e dopo qualche secondo sterza le ruote a sinistra e il motore posteriore in retromarcia, interrogando contemporaneamente i sensori S3 e S2. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 18 5. Se il sensore S3 rileva una distanza di 7cm (massimo allontanamento) oppure il sensore S2 rileva un ostacolo a 5cm, il microcontrollore ferma di nuovo tutti i motori e il modellino è perfettamente parcheggiato. Impostazione del Software per Z8 Innanzitutto sono state utilizzate nello Z8F6423 le porte A e B. La porta A è impiegata per il pilotaggio dei motori mentre la porta B è impiegata per ricevere l’output dei 3 sensori. Il pilotaggio dei motori attraverso la porta A è eseguito nel seguente modo: Motore posteriore PA3 PA2 0 0 0 0 Motore anteriore (sterzo) PA1 PA0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 Motori spenti Ruote anteriori sterzate a destra. Ruote anteriori sterzate a destra e motore posteriore in retromarcia. Ruote anteriori sterzate a sinistra. Ruote anteriori sterzate a sinistra e motore posteriore in retromarcia. Ruote anteriori sterzate a destra e motore posteriore in avanti. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 19 Il chip enable (CH2) del motore dello sterzo è sempre alto a 3.3V (il driver è sempre attivo) mentre il chip enable (CH1) del motore posteriore riceve in ingresso un segnale PWM prodotto dallo Z8 (vedere meglio pag 24). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 20 Come già detto la porta B invece riceve i segnali di output dei 3 sensori IR 2D120X. PORTA B PB1 Output S2 PB0 Output S1 PB2 Output S3 Questi segnali sono poi selezionati da un multiplexer e inviati all’ADC per la conversione analogico/digitale (Sono periferiche che risiedono all’interno del micro). Il multiplexer è a 8 canali (più che sufficiente visto che si hanno solo 3 segnali) e l’ADC presenta una conversione a 10 bit. I sensori, durante tutto l’arco della manovra di parcheggio, rilevano una distanza minima di 4 cm e una distanza massima di 10cm. Per i 4cm l’output del sensore corrisponde in tensione a 2,90V mentre per i 10 cm corrisponde a 1,30V. La Vref interna dell’ADC corrisponde a 2V (valore di fondo scala), ma non è sufficiente per la conversione perché l’output del sensore a 10cm è ben più alto. Quindi si è utilizzato un Vref esterno a 3.3V (prelevato direttamente dall’alimentazione dell’integrato Z8F6423). Quindi avendo una Vref max = 3.3V e n = 10 bit , il quanto dell’ADC sarà: Perciò per una distanza di 10cm il rispettivo valore in tensione 2,90V corrisponde a: E questo numero N=900 è niente meno che il risultato della conversione prodotta dall’ADC. La stessa operazione è stata svolta per tutte le altre distanze significative della manovra (4, 5, 7cm) e i numeri ottenuti sono stati inseriti nel software per il controllo del sistema. Chiaramente durante la realizzazione pratica, a causa della coppia d’inerzia dei motori, dell’attrito e delle tolleranze questi valori subiranno delle modifiche per permettere una manovra di parcheggio corretta (in sostanza è la messa a punto del modellino). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 21 Durante la manovra se si interroga un solo sensore si è utilizzata la modalità “free running” (conversione continua) mentre nel caso dell’interrogazione contemporanea di due sensori si è utilizzata la modalità “conversione singola” (cioè si fa una conversione prima in un sensore e subito dopo nell’altro e il processo si ripete ciclicamente). Software del progetto #include <ez8.h>
/* Librerie */
#include <stdio.h>
#include <stdlib.h>
volatile int a=1, d=0;
/* Variabili globali */
#pragma interrupt
void routine()
//routine di interruzione
{
a++; //incremento "a" ad ogni interruzione del TIMER0..
if((PCIN&1)==0) //Controllo lo stato del tasto PC0 (attivo basso)
d=1;
else
d=0;
} void main(){
int e=0, f=0, g=0;
int val_alto1 = 0, val_basso1 = 0, val_alto2 = 0, val_basso2 = 0,
val_alto3 = 0, val_basso3 = 0, c=0;
long int val_totale1 = 0, val_totale2 = 0, val_totale3 = 0; /* Impostazione delle porte e dei registri */ PAADDR=1;
PACTL=0x00; //Tutto in uscita
PAOUT=0xF0; //1111 0000, Motori spenti
PAADDR = 0 ; //Chiusura della porta, per sicurezza
PBADDR=1;
PBCTL=0xFF; // 1111 1111, tutto in ingresso
PBADDR=2; /* Porta B in modalità alternativa */
PBCTL=0x07; /* Il pin PB0, PB1, PB2 sono in ingresso al convertitore A/D,
saranno i pin a cui applicheremo la tensioni dei sensori da
convertire */
PBADDR = 0;
PCADDR=1;
PCCTL=0xFD; // 1111 1101 , PC1 in uscita
PCADDR=2; // Funz.alternativa
PCCTL = 0x02;
// PC1 uscita del PWM
PCADDR=0;
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 22 /* Impostazione dei TIMER */ T0CTL1 = 0x31;
T0RH=0xB;
T0RL=0x40;
// TIMER0 impostato con
T=10ms
T1CTL1 = 0x43; // TIMER1 impostato con T=1ms per il PWM
T1PWMH = 0x20;
// Duty cicle del 45%, permanenza del PWM a livello alto pari
a 450 µs
T1PWML = 0x66;
T1RH = 0x48;
T1RL = 0x00;
IRQ0ENH |= 0x20; // Priorità TIMER0: Normale
IRQ0ENL &= 0xDF;
SET_VECTOR(TIMER0,routine);
/* Registrazione della routine di interruzione */
T0CTL1 |= 0x80; //Attivazione del TIMER0
T1CTL1 |= 0x80; //Attivazione del TIMER1
IRQCTL |= 0x80; //Attivazione ricezione delle interruzioni da parte del chip while(1){
switch(c){
case 0:
if(d==1)
c=1;
break;
case 1:
if(d==0)
c=2;
break;
} // Switch per il controllo del tasto (piccolo automa)
// Ricevuto una pressione del tasto PC0..
if(c==2){ // Ricevuto un segnale di START, inizio parcheggio..
switch(e){
case 0:
a=1; // Azzero variabile globale
e=1;
break;
case 1:
if(a==200){
// Ritardo di 2 secondi
e=2;
}
break;
case 2:
PAOUT |= 0x01; // Ruote anteriori a destra
a=1;
e=3;
break;
case 3:
if(a==200){ // Ritardo di 2 secondi
ADCCTL=0x30; /* Vref esterno = 3.3 [V], Conversione continua,
ANALOG0 (sensore posteriore obliquo S1) */
e=4;
a=1;
}
break; Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 23 case 4:
do{
ADCCTL |= 0x80; //Avvio l'operazione di conversione
PAOUT |= 0x05; //Ruote posteriori indietro più ruote anteriori a
destra
while(ADCCTL & 0x80); //Attente fine conversione dell’ADC..
val_alto1 = ADCD_H; //Salvataggio della conversione nelle variabili
val_alto1 <<= 2;
val_basso1 = ADCD_L;
val_basso1 >>= 6;
val_totale1 = val_alto1 + val_basso1;
if(val_totale1 >= 330){ // Controlla se la macchina è a 10cm
ADCCTL &= 0x7F; //Spengo ADC
PAOUT &= 0xF0; //Spengo tutti i motori
e=5; //Step successivo
}
}while(e==4);
break;
case 5:
a=1; //Azzero variabile globale
e=6; //Step successivo
break;
case 6:
if(a==200){ //Ritardo 2 secondi
PAOUT |= 0x02; //Ruote anteriori a sinistra
e=7;
}
break;
case 7:
a=1;
e=8;
break;
case 8:
if(a==200){ //Ritardo 2 secondi
e=9;
}
break; case 9:
switch(f){
case 0:
ADCCTL=0x20; /*Vref esterno = 3.3 [V], Conversione non continua,
ANALOG0 (sensore posteriore obliquo S1) */
ADCCTL |= 0x80; //Avvio l'operazione di conversione
PAOUT |= 0x06; //Ruote anteriori a sinistra più ruote posteriori
indietro
while(ADCCTL & 0x80); //Attendo fine conversione..
val_alto1 = ADCD_H;
val_alto1 <<= 2;
val_basso1 = ADCD_L;
val_basso1 >>= 6;
val_totale1 = val_alto1 + val_basso1;
f=1; //Passo alla lettura dell’altro sensore (S2)
break;
case 1:
ADCCTL=0x21; /*Vref esterno = 3.3 [V], Conversione non continua,
ANALOG1 (sensore posteriore S2) */
ADCCTL |= 0x80; //Avvio l'operazione di conversione
PAOUT |= 0x06; //Ruote anteriori a sinistra più ruote posteriori
indietro
while(ADCCTL & 0x80); //Attendo fine conversione..
val_alto2 = ADCD_H;
val_alto2 <<= 2;
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 24 val_basso2 = ADCD_L;
val_basso2 >>= 6;
val_totale2 = val_alto2 + val_basso2;
f=0; //Ritorno a leggere il sensore precedente (S1)
break;
}
if(val_totale1 >= 900 || val_totale2 >= 900){//Macchina a 4cm
dall’ostacolo
ADCCTL &= 0x7F; //Spengo ADC
PAOUT &= 0xF0; // Spengo tutti motori
e=10; //Step successivo..
}
break; case 10:
a=1; //Azzero variabile globale
e=11;
break;
case 11:
if(a==200){ //Ritardo 2 secondi
PAOUT |= 0x01; // Ruote anteriori a destra
e=12;
}
break;
case 12:
a=1;
e=13;
break;
case 13:
if(a==200){ //Ritardo 2 secondi
ADCCTL=0x32; /*Vref esterno = 3.3 [V], Conversione continua,
ANALOG2 (sensore anteriore S3) */
e=14;
a=1;
}
break; case 14: do{
ADCCTL |= 0x80; //Avvio l'operazione di conversione
PAOUT |= 0x09;//Ruote anteriori a destra più ruote posteriori avanti
while(ADCCTL & 0x80);
val_alto3 = ADCD_H;
val_alto3 <<= 2;
val_basso3 = ADCD_L;
val_basso3 >>= 6;
val_totale3 = val_alto3 + val_basso3;
if(val_totale3 >= 900){ //Controlla se la macchina è a 4cm
ADCCTL &= 0x7F; //Spengo ADC
PAOUT &= 0xF0; // Spengo tutti motori
e=15;
}
}while(e==14);
break; case 15:
a=1;
e=16;
break;
case 16:
if(a==200){
PAOUT |= 0x02; //Ruote anteriori a sinistra
e=17;
}
break;
case 17:
a=1;
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 25 e=18;
break;
case 18:
if(a==200){
e=19;
}
break; case 19:
switch(g){
case 0:
ADCCTL=0x21; /*Vref esterno = 3.3 [V], Conversione non continua,
ANALOG0 (sensore posteriore S2) */
ADCCTL |= 0x80; //Avvio l'operazione di conversione
PAOUT |= 0x06; //Ruote anteriori a sinistra più ruote posteriori
indietro
while(ADCCTL & 0x80); //Attendo fine conversione..
val_alto2 = ADCD_H;
val_alto2 <<= 2;
val_basso2 = ADCD_L;
val_basso2 >>= 6;
val_totale2 = val_alto2 + val_basso2;
g=1; //Passo alla lettura dell’altro sensore (S3)
break;
case 1:
ADCCTL=0x22; /*Vref esterno = 3.3 [V], Conversione non continua,
ANALOG2 (sensore anteriore S3) */
ADCCTL |= 0x80; //Avvio l'operazione di conversione
PAOUT |= 0x06; //Ruote anteriori a sinistra più ruote posteriori
indietro
while(ADCCTL & 0x80); //Attendo fine conversione..
val_alto3 = ADCD_H;
val_alto3 <<= 2;
val_basso3 = ADCD_L;
val_basso3 >>= 6;
val_totale3 = val_alto3 + val_basso3;
g=0; //Ritorno a leggere il sensore precedente (S2)
break;
}
if(val_totale2 >= 622 || val_totale3 <= 305 ){
ADCCTL &= 0x7F; //Spengo ADC
PAOUT &= 0xF0; // Spengo tutti motori
e=20; // Fine parcheggio
}
break;
} //Chiusura switch del parcheggio
} //Chiusura dell’if del tasto PC0
} //Chiusura del while
} //Chiusura del main
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 26 Pilotaggio motori e PWM Come già descritto nelle pagine precedenti il modellino presenta due motori c.c. a spazzole: uno per lo sterzo (motore anteriore) e uno per la trazione (motore posteriore). • Il motore anteriore (sterzo) è gestito in questo modo: Gli ingressi C e D sono collegati ai pin PA0 e PA1 dello Z8, che stabiliscono con le loro combinazioni (gestite via software) lo spegnimento e l’accensione (insieme al senso di rotazione) del motore. Il pin di abilitazione (CH2, chip enable) è sempre alto (a 3,3V) e questo fa in modo che i driver dell’integrato siano sempre attivi. (Osservazione: quando il motore è in azione ai suoi capi non c’è esattamente l’alimentazione dell’integrato, ma è leggermente inferiore a causa delle cadute di tensione interne di quest’ultimo). • Il motore posteriore (trazione) è gestito allo stesso modo del motore anteriore, con l’unica differenza che il suo chip enable (CH1) riceve un segnale PWM dal pin PC1 dello Z8 che ne permette la regolazione della velocità. PWM (Pulse Width Modulation) Il PWM è un segnale ad onda quadra che presenta un periodo T fisso e un ciclo di lavoro variabile (duty cicle), cioè il livello che permane allo stato alto può variare, lasciando il periodo sempre costante. Il duty cicle quindi è definito come: Dove T è il periodo e TH è il tempo in cui il segnale permane nello stato alto.
Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 27 Per controllare il motore (con ponte H) vi sono due modalità d’uso del PWM: 1. PWM sign-magnitude (SM). 2. PWM locked anti-phase (LAP). PWM sign‐magnitude (SM): Questa modalità (applicata nel progetto per il motore posteriore) consiste nell’inviare il segnale PWM all’ingresso del chip enable, mentre i sensi di rotazione dei motori sono stabili dagli ingressi in1, in2, in3, in4 (figura). Quindi la velocità del motore dipende dal duty cicle del PWM che ne controlla la potenza assorbita dello stesso. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 28 PWM locked anti‐phase (LAP): In questa modalità invece l’enable è in grado di attivare o meno il dispositivo (rispettivamente se posto a livello logico alto o basso) mentre il segnale PWM è applicato come in figura. In questo modo agli ingressi per il controllo del motore l’integrato vede due segnali PWM invertiti tra loro (a causa della NOT). Questa configurazione fa in modo che il segnale PWM non solo regola la velocità, ma anche il senso di rotazione: • Duty cicle 0% : rotazione massima velocità in un senso. • Duty cicle 50%: motore fermo. • Duty cicle 100%: rotazione massima velocità nell'altro senso. Teoria Scheda di acquisizione dati : Come già accennato il progetto sopra descritto è niente meno che una scheda di acquisizione dati. La sua tipica struttura è la seguente: Il primo elemento di una scheda di acquisizione è il trasduttore, un dispositivo in grado di convertire una grandezza fisica analogica (temperatura, luminosità, ecc..) in una grandezza elettrica (tensione, corrente, ecc..). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 29 Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 30 In questo progetto il sensore utilizzato è il 2D120X a infrarossi che converte la distanza rilevata in una tensione, seguendo l’andamento mostrato a pag 6. Il secondo elemento è il circuito di condizionamento che adatta il segnale in uscita dal trasduttore alle caratteristiche del sistema con operazioni di amplificazione, filtraggio, ecc.. Nel progetto non è stato utilizzato nessun circuito di condizionamento per i sensori perché i segnali erano già adatti alle caratteristiche del sistema. In una scheda di acquisizione dati è possibile trovare subito dopo il circuito di condizionamento anche il Sample/Hold, un circuito analogico in grado di mantenere il segnale in ingresso costante per tutto il tempo di conversione dell’ADC. E’ impiegato per quelle grandezze elettriche che variano molto velocemente nel tempo mentre per quelle che variano lentamente (es: temperatura) non è utilizzato. Se si richiede una coerenza temporale bisogna adottare un Sample/Hold per ciascun trasduttore, altrimenti ne basta uno solo (inserito sempre prima dell’ADC). Nel caso di una scheda di acquisizione a più canali è necessario un multiplexer per selezionarli sfruttando i segnali di selezione (selettori) per scegliere il canale da campionare. Nel progetto si sfrutta il multiplexer a 8 canali interno dello Z8F6423. Un elemento importante della scheda di acquisizione è l’ADC (Analog to digital converter) che è in grado di convertire una grandezza analogica in una grandezza digitale (cioè espressa tramite un codice binario). In una conversione il numero di bit in uscita dipende dal tipo di ADC e la grandezza analogica fornita in ingresso deve avere come valore massimo Vref , che è la tensione di riferimento che l’ADC utilizza per compiere le conversioni. Come già visto a pag 18 l’ADC del progetto è a 10 bit (interno allo Z8) e utilizza una Vref = 3.3V (che è l’alimentazione del microcontrollore). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 31 I parametri più importanti di un ADC sono: 1. La risoluzione: rappresenta la minima variazione della tensione in ingresso capace di far variare il numero binario in uscita ed è espressa dal quanto: 2. L’errore di quantizzazione: è l’errore massimo che l’ADC può compiere, definito come: 3. L’accuratezza rappresenta il valore massimo dello scostamento tra il comportamento reale e quello ideale dell’ADC. 4. Il tempo di conversione rappresenta il tempo che intercorre tra il segnale di start della conversione (SOC) e il segnale di fine conversione (EOC). 5. Il range della tensione di ingresso è legato al valore massimo che si può applicare come tensione Vref. 6. I livelli logici di uscita sono di essenziale importanza per il dispositivo che dovrà riceverli (es: microcontrollore o microprocessore) e possono essere TTL, CMOS e Three State. 7. La tensione di alimentazione può essere singola (es: +5V) oppure duale (es: ‐5V e +5V) Esistono diversi tipi di ADC come ad esempio i flash ADC (dove il tempo di conversione dipende solamente dalla commutazione degli elementi circuitali interni), gli ADC a integrazione (dove il tempo di conversione aumenta con l’aumentare della Vi in ingresso), gli ADC ad approssimazioni successive (il Tempo di conversione è fisso), ecc.. . In ogni ADC sono presenti il SOC (start of conversion) e l’EOC (End of conversion). Il SOC sarebbe l’input che l’ADC riceve per iniziare la conversione mentre l’EOC è quel segnale che l’ADC fornisce come output quando è terminata l’operazione di conversione. Quest’ultimo segnale può essere gestito benissimo dal microprocessore ad interruzione oppure in modalità “polling”. Come ultimo elemento nella scheda di acquisizione abbiamo il Sistema a microprocessore che ha il compito di gestire le periferiche (ad esempio producendo i segnali di SOC per l’ADC e gestendo successivamente l’EOC), acquisire dati e se Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 32 necessario elaborarli per poi magari interfacciarli verso l’esterno o compiere altre funzioni. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 33 Microcontrollore: Il Microcontrollore è un dispositivo elettronico integrato programmabile che oltre ad avere al suo interno un sistema a microprocessore presenta anche molte periferiche (es: ADC, SPI, Timer, RAM, ROM, ecc..) tutte quante integrate nello stesso chip, mentre nel caso del microprocessore tutte queste periferiche sono esterne (quindi bisogna progettarle e gestirle sempre esternamente perché il µP svolge solamente la logica di elaborazione). Come il sistema a microprocessore, il microcontrollore presenta diversi bus: 1. L’address bus: in questo bus la CPU invia un numero binario che rappresenta l’indirizzo del dispositivo a cui vuole prendere o inviare un dato. 2. Il control bus: in questo bus si scambiano messaggi utili per la gestione di trasferimento dei dati verso la CPU oppure dalla CPU. 3. Il data bus: in questo bus è possibile il trasferimento di dati dalla CPU alla periferica (per l’output) o viceversa dalla periferica alla CPU (per l’input). Può essere a 8, 16, 32 linee ed è bidirezionale. La loro gestione (dei bus) ha dato vita a due forme principali di architettura di sistemi a microprocessore: Von Neumann e Harvard. La Von Neumann è formata da: • La CPU con al suo interno l’unità operativa (quindi l’ALU) e l’unità di controllo. • La memoria • Unità di input e di output • Bus Questa architettura è in grado di immagazzinare all’interno dell’unità di memoria sia i dati dei programmi che le istruzioni di quest’ultimi (sfruttando un bus in comune). L’Harvard è costituita di quattro blocchi principali (figura) e si può notare subito che la memoria programma è divisa dalla memoria dati (quindi utilizzano due bus differenti e non uno unico come nella Von Neumann). Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 34 Questa architettura è molto utilizzata nei moderni sistemi a microprocessore e microcontrollore . Infatti è un sistema molto veloce perché il microprocessore non interroga sempre le memorie (sarebbero delle operazioni molto lente con un calo notevole delle prestazioni) ma sfrutta le sue cache interne, che sono delle memorie molto veloci che contengono i dati e le istruzioni più utilizzate, evitando così il continuo accesso alla memoria programma e dati. In questo progetto si è utilizzato un microcontrollore Z8F6423 della Zilog (utilizza l’architettura Harvard). Esso presenta 18,432 MHz di frequenza di lavoro (clock), ha 4kbyte di RAM e 64kbyte di ROM e possiede come periferiche 4 Timer, SPI, ADC a 10 bit a 8 canali (gestiti da multiplexer interno), UART, ecc.. Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 35 Foto del progetto realizzato Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 36 Bibliografia Software impiegati: • Eagle 4.11 • ZDSII Z8Encore! 4.9.5 Libri: • Tecnologie e disegno per la progettazione elettronica di Portaluri e Bove, Volume 3 (Tramontana) • L’Elettronica Applicazioni di Ambrosini e Perlasca, Tramontana Galli Andrea 5A/EN A.S: 2010‐2011 Sistema di parcheggio automatizzato Pagina 37