I.T.I. PANETTI - BARI
Seconda prova scritta di Sistemi Elettronici Automatici - 21/06/2001
Corsi di Elettronica e Telecomunicazioni degli Istituti Tecnici Industriali
Soluzione della traccia 2-
Gestione a microprocessore di un parcheggio
(a cura del prof. Giuseppe Spalierno -
docente di Sistemi presso I.T.I. Panetti
- Bari)
Si ipotizza che tutti i settori abbiano la stessa capacità di ospitare autovetture. In tal caso la capienza di ogni settore è:
512/8 = 64 autovetture.
Risposta al quesito 1.
Gli attuatori sono i motori che comandano la chiusura o l’apertura della sbarra. Occorrono 9 motori: uno per l’ingresso principale ed uno per ciascuno degli 8 settori. Si preferisce far cadere la scelta su motori in corrente continua per consentire un comodo sistema di inversione del moto per la chiusura o l’apertura della sbarra costituita da una struttura leggera. Due contatti di fine corsa, uno di apertura ed uno di chiusura, consentiranno l’arresto del moto quando la sbarra, aprendosi, raggiungerà la posizione verticale e quando, chiudendosi, raggiungerà la posizione orizzontale.
L’inversione della rotazione si può ottenere inserendo il motore in un circuito con due transistor PNP e due NPN in configurazione a ponte. Un bit deciderà la coppia di BJT complementari a porre in conduzione e quindi le polarità di alimentazione del motore. In commercio esistono, tuttavia, opportuni circuiti integrati che svolgono tale funzione. Sono disponibili in commercio sbarre già dotate di sistemi elettromeccanici con finecorsa per l’automazione dell’apertura e chiusura.
Figura 1. Circuito per l’inversione del moto di un motore in corrente continua. B=0 arresta il moto.
Il valore logico applicato su A individua il verso di rotazione.
I sensori, invece, sono sedici, due per ogni settore. Il sensore posto all’ingresso del settore deve segnalare l’entrata dell’auto, quello posto all’uscita, invece, deve segnalare, appunto, l’uscita dell’auto. Ciascuno di essi può essere realizzato attraverso un fascio di luce generato da una lampadina e rilevato da un trasduttore fotoelettrico come una fotoresistenza, fotodiodo o fototransistor. Un semplice circuito elettronico potrà associare alla luce incidente sul trasduttore il livello logico 0 e all’assenza di luce il livello logico 1, cioè il livello logico 0 in assenza di auto ed 1 al passaggio dell’auto. Si decide, tuttavia, di utilizzare degli interruttori a strisciamento come quelli utilizzati dai sistemi automatici di autolavaggio. A riposo l’interruttore è in una posizione fissa e al passaggio dell’auto, l’interruttore viene portato nella posizione estrema opposta. Per evitare rimbalzi meccanici che porterebbero ad un falso conteggio si preferisce un interruttore a deviatore a due posizioni che pilota un circuito soppressore di rimbalzi meccanici come, ad esempio, un semplice flip flop asincrono a porte NAND.
Figura 2. Deviatore a due posizioni che comanda un antirimbalzo a porte NAND.
Risposta al quesito 2.
È evidente che i sensori utilizzati necessitano di blocchi di condizionamento del segnale perché devono trasformare la presenza/assenza di un’auto in transito in un bit, segnale digitale a due livelli.
Il circuito antirimbalzo da applicare su ciascun deviatore assume una importanza fondamentale per la corretta valutazione delle auto in transito.
Il particolare sistema ipotizzato non utilizza grandezze fisiche analogiche per cui non si prevede l’impiego di circuiti amplificatori e traslatori di livello.
I sensori saranno disposti all’ingresso e all’uscita di ciascun settore, come si mostra in fig.3.
Fig.3 Disposizione del parcheggio. Ogni settore presenta un sensore all’ingresso ed uno all’uscita. L’ingresso di ciascun settore e l’ingresso principale sono dotate di sbarre automatiche comandate dal sistema a microprocessore.
Risposta al quesito 3.
Il sistema di acquisizione al microprocessore deve poter accettare i 16 bit provenienti dai sensori e deve poter comandare le nove sbarre. Si potrebbe far uso di un personal computer e di una scheda di interfacciamento specifica in grado di accettare 16 bit simultaneamente e di comandare, in uscita, le nove sbarre con altrettanti bit. Il sistema di segnalazione all’ingresso può comodamente essere sostituito da un monitor collegato al PC che visualizza in tempo reale i posti liberi di ciascun settore desumendoli dall’elaborazione software dei segnali provenienti dai sensori. In questo modo si evita l’utilizzo di display e relativi decoder pilotati dal PC.
Per l’acquisizione delle 16 linee si decide di utilizzare l’interfaccia standard
Centronics, normalmente utilizzata per pilotare le stampanti. Come è noto, il connettore Centronics sul retro del PC è a 25 poli e mette a disposizione 8 linee, normalmente di uscita, comprese tra i pin 2 e 9 ed allocata all’indirizzo di periferica 888. Configurandola opportunamente, tale byte potrà essere programmato di ingresso o di uscita. L’interfaccia presenta, inoltre, 5 bit di ingresso all’indirizzo 889 ed altri 4 bit di uscita all’indirizzo 890.
Si decide di realizzare l’acquisizione dei 16 sensori inviando sulla porta di indirizzo 888 programmata in lettura prima 8 bit e successivamente gli altri 8. In questo modo il processo di acquisizione avviene in due fasi distinte avvalendosi di 8 multiplexer digitali a due ingressi. Un bit di controllo, emesso da una linea di uscita della porta di indirizzo 890 della Centronics deciderà quale gruppo di 8 bit dovrà essere acquisito; un altro bit di controllo porrà le uscite del multiplexer in tri-state.
Il byte presente sulla porta di indirizzo 888 potrà essere programmato come linee di uscita per pilotare 8 delle 9 sbarre. La sbarra dell’ingresso principale sarà pilotata da uno dei 4 bit di uscita della porta di indirizzo 890. In tal caso l’interfaccia hardware esterna al microprocessore è minimizzata all’impiego del solo multiplexer e da 9 flip – flop per memorizzare il pilotaggio delle sbarre.
Il multiplexer potrà essere implementato da due circuiti integrati 74LS257 ognuno dei quali presenta 4 multiplexer a 2 ingressi. Collegandoli in parallelo si ottengono, così, 8 multiplexer a due ingressi. Ciascun integrato, a differenza del normale 74LS157, ha la possibilità, grazie alla linea di controllo OE (Output Enable, attiva bassa), di porre in tri-state le relative linee di uscita per cui, quando il PC comanda le sbarre, le linee di uscita della porta 888 non interferiscono con le uscite dei multiplexer poiché questo sono nello stato di alta impedenza.
Si mostra in fig.4 lo schema a blocchi dell’interfaccia.
Fig.4. Schema a blocchi del sistema. Gli 8 bit bidirezionali dell’interfaccia Centronics sono quelli della porta di indirizzo 888. I 4 bit di uscita per la selezione ed il tri-state del multiplexer, il comando della sbarra 0 ed il comando del clock dei nove flip-flop sono prelevati dalla porta di indirizzo 890.
Scegliamo 4 le linee dell’interfaccia Centronics allocate all’indirizzo 890 per il pilotaggio del multiplexer e dei flip-flop.
Denominazione della linea nello schema |
Bit della porta 890 |
Denominazione della linea rispetto alla Centronics |
Pin |
Sbarra 0 |
A0 |
STB |
1 |
Clock |
A1 |
AF |
14 |
Tri-state |
A2 |
IP |
16 |
Selezione |
A3 |
SI |
17 |
Per rendere bidirezionale il byte allocato all’indirizzo 888 si deve impostare la Centronics come EPP da setup all’accensione del computer. In particolare:
1) 888 di ingresso
il bit 5 della porta 890 (non accessibile sul connettore) deve essere posto a 1. Se A è la parola di uscita impostata sulla 890, per settare a 1 il bit 5 della porta 890 è sufficiente applicare le seguenti istruzioni, valide in Q-Basic:
B = A OR 32
OUT 890, B
32 rappresenta il byte 0010000. L’operazione OR viene eseguita bit a bit tra la variabile A e la costante 32. I bit del risultato B coincidono con quelli di A se l’addendo omologo vale 0 mentre si porta a 1 se il bit omologo vale 1. Gli altri bit di B sono identici ai corrispondente di A.
A |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
OR |
32 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
= |
B |
A7 |
A6 |
1 |
A4 |
A3 |
A2 |
A1 |
A0 |
2) 888 di uscita
il bit 5 della porta 890 (non accessibile sul connettore) deve essere posto a 0. Se A è la parola di uscita impostata sulla 890, per settare a 0 il bit 5 della porta 890 è sufficiente applicare le seguenti istruzioni, valide in Q-Basic:
B = A AND 223
OUT 890, B
223 rappresenta il byte 11011111. L’operazione AND viene eseguita bit a bit tra la variabile A e la costante 223. I bit del risultato B coincidono con quelli di A se il bit omologo vale 1 mentre si porta a 0 se il bit omologo vale 0. Gli altri bit di B sono identici ai corrispondente di A.
A |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
AND |
223 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
= |
B |
A7 |
A6 |
0 |
A4 |
A3 |
A2 |
A1 |
A0 |
Risposta al quesito 4.
La descrizione dell’algoritmo dell’intera gestione sarà eseguita in modo testuale e sequenziale.
Le funzioni principali sono:
l’acquisizione degli 8 sensori di ingresso;
l’acquisizione degli 8 sensori di uscita;
l’aggiornamento del numero dei posti disponibili e stampe su monitor;
il comando delle sbarre.
Per l’acquisizione degli 8 sensori di ingresso si pone la linea della Centronics di indirizzo 890 A3=1 (selezione del multiplexer), si predispone la porta di indirizzo 888 come di ingresso, si esegue l’acquisizione del byte che viene memorizzato nella variabile S_IN (sensori di ingresso).
Per l’acquisizione degli 8 sensori di uscita si pone la linea della Centronics di indirizzo 890 A3=0 (selezione del multiplexer), si predispone la porta di indirizzo 888 come di ingresso, si esegue l’acquisizione del byte che viene memorizzato nella variabile S_OUT (sensori di uscita).
Il software deve poter confrontare i bit della variabile acquisita S_IN con il valore che la stessa variabile aveva acquisito in precedenza. Se il bit i-esimo di S_IN è passato da 1 a 0 vuol dire che un’auto è entrata completamente nel settore i-esimo ed il relativo contatore di auto N(i) viene incrementato di uno. Se, invece, non c’è stata la transizione da 1 a 0, la variabile N(i) non viene incrementata.
Analogamente il software decrementa N(i) solo se il bit i-esimo della variabile acquisita S_OUT ha compiuto, rispetto alla precedente acquisizione, una transizione da 1 a 0.
Per determinare i posti liberi del settore i-esimo basta eseguire la differenza: LIBERI(i) = 64 – N(i)
Se LIBERI(i) = 0 si deve chiudere la sbarra i-esima.
Per determinare il numero totale di posti liberi nell’autorimessa è sufficiente applicare la formula:
LIBERITOT = S LIBERI(i)
Se la variabile LIBERITOT diventa minore o uguale a 10 si deve chiudere la sbarra 0 portando a 1 i bit A0 della porta 890 dell’interfaccia Centronics.
L’eventuale comando di chiusura o apertura delle sbarre deve avvenire definendo la variabile SBARRA che contiene un byte da inviare sulla porta 888 della Centronics dopo averla ridefinita di uscita settando a 0 il bit 5 della porta 890 della Centronics.
Dopo tali sequenze di acquisizione, elaborazione e comando sbarre, il software stampa su monitor il resoconto dei posti liberi di ciascun settore. Il monitor è posto all’ingresso principale dell’autorimessa.
Risposta al quesito 5
Si sceglie il linguaggio di programmazione Visual Basic.
Si riporta, in fig.5, l’interfaccia grafica di un programma realizzato per simulare il funzionamento dell’autorimessa. Il programma reale deve poter disporre di una libreria DLL che consente di poter utilizzare le istruzioni di I/O verso le periferiche IN e OUT che il Visual Basic non possiede.
Per simulare l’ingresso o l’uscita di un’autovettura in uno degli 8 settori è sufficiente fare click sulla relativa check box e poi fare click sul pulsante Acquisizione.
Fig.5 Interfaccia grafica in Visual Basic del programma di simulazione della gestione dell’autorimessa.
L’algoritmo del conteggio delle macchine si attiva dopo l’acquisizione dello stato dei 16 sensori.
Di seguito si riporta il listato e relativo commento:
Private Sub Command1_Click()
For i = 0 To 7
a = Check1(i).Value
b = Check2(i).Value
Text3(i) = Text3(i) - a + b
If Text3(i) > 64 Then
Text3(i) = 64
Check2(i).Value = 0
End If
If Text3(i) <= 0 Then
Text3(i) = 0
Check1(i).Value = 0
End If
Next i
liberitot = 0
For i = 0 To 7
liberitot = liberitot + Text3(i)
Next i
Text4.Text = liberitot
End Sub
Alla pressione del pulsante Acquisizione per ogni settore da 0 a 7 si indica con a=1 l’entrata di una autovettura e con b=1 l’uscita. Se il sensore di ingresso non rileva l’entrata dell’autovettura sarà: a=0. Analogamente si avrà: b=0 se il sensore di uscita non rileva l’uscita di una macchina dal settore.
Nel listato proposto si è deciso di contare non il numero di autovetture presenti nel settore ma i posti liberi del settore "i" da inserire nella casella di testo text3(i).
L’aggiornamento dei posti liberi nel settore "i" sarà, pertanto:
text3(i) = text3(i) – a + b
Cioè il contatore dei posti liberi diminuisce di uno se entra un’autovettura e si incrementa di uno se esce un’autovettura.
Un algoritmo di controllo impedisce al contatore dei posti liberi di assumere valori maggiori di 64 o minori di 0.
L’ultima parte dell’algoritmo ricalcola il valore dei posti liberi complessivi dell’autorimessa semplicemente sommando i posti liberi di ciascun settore. Il risultato liberitot viene posto nella casella di testo text4.
Il programma, infine, deve poter controllare se abbassare una o più sbarre. Quando si aggiorna la casella di testo del numero di posti liberi di ciascun settore e il numero di posti liberi complessivo dell’autorimessa, si deve attivare una subroutine che controlla il contenuto e visualizza sul monitor il disco rosso se i posti liberi di un dato settore sono uguali a 0 e se il numero totale dei posti liberi dell’autorimessa è uguale o inferiore a 10.
Il relativo disco torna verde quando si creano disponibilità di posti in ciascuno degli 8 settori e se i posti totali disponibili superano le 10 unità. Il programma operativo deve, oltre a colorare i dischi sul monitor, comandare contemporaneamente le sbarre in apertura o chiusura.
La pressione del pulsante autorimessa vuota consente di inserire nei posti liberi il valore 64 e nei posti liberi totale il numero 512. Tutti i dischi diventano verdi.
Viceversa la pressione del pulsante autorimessa piena consente di inserire nei posti liberi il valore 0 e nei posti liberi totale il numero 0. Tutti i dischi diventano rossi.
Il pulsante inizializza consente di determinare il numero totale dei posti liberi se si decide di inserire manualmente il numero di posti liberi di uno o più settori. Ogni variazione numerica nelle caselle di testo, si ricorda, consente l’aggiornamento del colore del relativo disco e nel programma reale il comando di chiusura o apertura della sbarra.