![]() |
![]() |
Alice | Tin.it | Foto album | Disco remoto | Community | |
ESAMI DI MATURITÁ PROFESSIONALE
EX PROGETTO 92
Indirizzo : TECNICO DELLE INDUSTRIE ELETTRONICHE
TEMA 1995 :
In una cittadina in alcune strade è stata predisposta una rete di centraline per la rivelazione delle velocità dei mezzi in transito, collegate ad una centrale operativa tramite linee dedicate.
Ogni centralina è costituita da:
- un sistema basato su un dispositivo programmabile;- due coppie sorgente/rivelatore a raggi infrarossi con fascio orientato orizzontalmente alla strada, poste a 20 cm di distanza l'una dall'altra;
- una macchina fotografica automatica, posizionata in modo da poter acquisire l'immagine della targa della vettura in contravvenzione quando supera il Limite di velocità di 50 km/h ;
- Un sensore di luminosità, opportunamente tarato, per valutare la fattibilità della foto.
I1 sistema risale alla velocità del mezzo in transito misurando il tempo che intercorre tra la interruzione del primo fascio e quella del secondo.
Rilevato leccesso di velocità, se la luminosità è sufficiente (uscita del sensore superiore a 15m A), il sistema provvede ad inviare il comando di azionamento della macchina fotografica e a confrontare il numero di foto scattate con quelle a disposizione nel rullino.
Dopo aver scattato l'ultima foto, la centralina invia a una centrale il suo codice di identificazione e le velocità misurate in corrispondenza di tutte le foto scattate; quindi diventa non operativa fino all'arrivo della manutenzione.
II candidato, formulate le necessarie ipotesi aggiuntive:
1) disegni e commenti lo schema a blocchi dell'intero sistema;2) proponga ed illustri un sistema ed i mezzi per il collegamento tra le centraline e la centrale operativa;
3) proponga una realizzazione pratica, basata su componenti o linguaggi che conosce, per almeno una delle seguenti funzioni a sua scelta:
a) un blocco di interfaccia, ritenuto idoneo alla situazione considerata. tra il sensore di luminosità ed il sistema programmabile;
b) un sistema in grado di misurare il tempo di transito dell'automezzo tra i due punti di rivelazione ;
c) lalgoritmo di misura della velocità e quello relativo alle operazioni di registrazione della infrazione.
SOLUZIONE DEL PROBLEMA
IPOTESI AGGIUNTIVE
La scheda della centralina dovrà avere un microcontrollore come dispositivo programmabile per la gestione verifica sensori, misura intensità luce, valutazione velocità e memorizzazione dati e inoltre un UART (Universal Asynchronous Receiver Trasmitter) per comunicare con il modem. LUART prenderà i dati in forma parallela e li invierà al modem in forma seriale nello standard RS232. Non avendo particolare esigenza di velocità, sullinvio dei dati, le centraline saranno collegate alla centrale con un collegamento dedicato del tipo punto-punto mediante doppino telefonico e modem con velocità di trasmissione anche basse (4800-14400 Bps).In centrale i dati ricevuti dal modem verranno letti mediante RS232 da un PC che con adeguato programma archivierà le informazioni in file diversificati secondo il codice della centralina che ha inviato i dati. Si suppone:
- che la macchina fotografica entri in funzione alla chiusura di un contatto elettrico mediante ad esempio un transistore in saturazione per qualche frazione di secondo,
- che il sensore per la misura dellintensità luminosa sia una fotoresistenza,
- che la sorgente degli infrarossi sia emessa da un diodo led,
- che il rivelatore agli infrarossi sia un foto diodo,
- che il dispositivo programmabile sia un microcontrollore ST6265.
SCHEMA DINSIEME A BLOCCHI

EMETTITORE ALLINFRAROSSO TX1-2
È composto essenzialmente da un diodo led emettitore di luce allinfrarosso (o più diodi in parallelo per aumentare lintensità). Il fascio dovrà essere concentrato il più possibile mediante un sistema di lenti per coprire la distanza necessaria e per avere una più precisa distanza fra i due fasci e di conseguenza una misura corretta della velocità.
Per certe applicazioni il diodo viene alimentato con un segnale ad onda quadra di B.F. per poterlo riconoscere in ricezione e non avere false ricezioni dovute a segnali infrarossi non desiderati.
Nel nostro caso essendo, già un sistema con un puntamento a fasco stretto, conviene usare un fascio continuo per non commettere errori nella valutazione del tempo di interruzione.
Infatti se unauto taglia il fascio nel momento che il led non emette, perché si trova nel semiperiodo dellonda quadra con livello di tensione a zero volt, si commette un errore nella valutazione del tempo pari a ½ del periodo dellonda quadra e di conseguenza errore di valutazione della velocità.
Per ovviare ai possibili segnali indesiderati si sceglierà il fototransistore sensibile alla stessa lunghezza donda dellemettitore infatti ci sono in commercio emettitori e ricevitori accoppiati come ad esempio lemettitore OP165 e il ricevitore OP505.

Il diodo emettitore con una corrente di 20 mA fa una caduta ai suoi capi di 1,6 V pertanto, alimentandolo ad una tensione di 12 V si dovrá mettere in serie una resistenza di :
R = (12 - 1,6) : 20 = 520 W Valore commerciale 560 W.
SENSORE DI RICEZIONE ALLINFRAROSSO
Il fototransistore (OP505), colpito dal fascio allinfrarosso, condurrà in modo da portare il pin invertente a potenziale più alto di quello non invertente mandando pertanto luscita pin 6 a livello - Vcc così da avere il transistore interdetto. Loperazionale è in configurazione a trigger di Shmitt per avere commutazioni adeguatamente rapide e sicure al momento dellinterruzione del fascio. Allinterruzione del fascio il fototransistore si interdice portando il pin invertente a -Vcc sicuramente meno positivo del pin non invertente e pertanto luscita andrà alta saturando il transistore che porterà basso lOUT.

SENSORE DI LUMINOSITÁ
La fotoresistenza con luce sufficiente fornirà una corrente superiore a 15 m A, misureremo la caduta di tensione ai capi di una resistenza e adattatandola con un amplificatore operazionale ne verrà valutato il valore in Volt.
Tale valore verrà letto mediante un ingresso ADC del microcontrollore e il software confronterà tale valore con quello minimo previsto abilitando oppure no lo scatto della foto.

Con luce sufficiente la fotoresistenza lascia scorrere una corrente di almeno 15m A e di conseguenza sulla resistenza da 100K cadranno 1,5 V che entrano sullingresso non invertente dellamplificatore operazionale.
Alla sua uscita avremo Vout= Vin x A dove A = 1+ R1/R2 = 2 pertanto
Vut = 1,5 x 2 = 3V.
Il convertitore ADC del micro ST6265 restituirà un valore numerico pari a
N= 3 x 255/5 infatti essendo un convertitore a 8 bit il valore massimo per 5V di ingresso sarebbe 255 pertanto la proporzione sarebbe 5 : 255 = 3 : N da cui N= 3 x 255 : 5= 153.
Il software del micro per capire se la luminosità sarà sufficiente o no dovrà verificare che il valore di N non sia inferiore a 153 prima di abilitare lo scatto della macchina fotografica
MICROCONTROLLORE
Il controllore usato ST6265 ha un totale di 20 pin I/O programmabili da software e al suo interno 128 Byte di memoria EEPROM dove poter salvare i dati.
Si opta per una memoria di tipo EEPROM perché i dati vengono mantenuti integri anche se il sistema dovesse rimanere senza alimentazione.
Ogni foto verrà salvata in due byte, uno per il numero progressivo delle foto e laltro byte per immagazzinare il valore della velocità (un byte è più che sufficiente visto che può contenere un numero fino al valore 255).
Una porta di otto pin sarà configurata come output per luscita dei dati in forma parallela da inviare allUART che a sua volta invierà in forma seriale al modem.
Quattro pin saranno dingresso, due per i sensori dellinterruzione dei fasci infrarossi, uno per sensore della luminosità e uno per il reset del sistema dopo il blocco per fine foto da scattare.
Vi saranno pure due altre pin duscita, uno per attivare la macchina fotografica e uno per segnalare dellUART il dato pronto da inviare.

DIAGRAMMA DI FLUSSO DEL SISTEMA

Nel blocco START si dovrà "inizializzare" il micro specificando quali sono i pin INPUT e quali OUTPUT.
Si dovrà verificare se il fascio del SENSORE 2 è ancora interrotto e se sì (livello 0) non proseguire ma attendere che torni alto (fine transito auto).
Se il SENSORE 1 non viene tagliato, cioè livello alto, non proseguire ma attendere il transito di un auto.
Se il fascio del SEN 1 viene tagliato inizia la valutazione del tempo che impiega a tagliare il secondo fascio del
SENS 2. Infatti se il fascio 2 non è interrotto continua a valutare il tempo impiegato.
Se SEN 2 va basso valuterà il valore del tempo trascorso per percorrere i 20 cm.
Sapendo che la velocità è data dallo spazio diviso il tempo avremo :
V= S/t da cui t= S/V troviamo il tempo t per una velocità di 50K/h
50 K/h sono (50 x 1000 ) m : 3600sec = 13,888889 m/s pertanto il tempo necessario per percorrere 20 cm sarà :
t = 0,2 : 13,888889 = 0,0144 S = 14,4 mS
Se il tempo misurato non è minore di 14,4 milli secondi allora significa che la velocità è uguale o minore a 50k/h pertanto torna allinizio e aspetta fine transito auto. Altrimenti se il tempo è minore di 14,4 mS significa che la velocità é superiore a 50K/h pertanto va valutata la luminosità convertendo il valore di tensione dato dal sensore di luce in numero mediante ADC e se il valore numerico è inferiore a 153 non può essere scattata la foto e pertanto torna allinizio.Se super il valore 153 la luce è sufficiente e attiva lo scatto della macchina fotografica.Il sistema ora deve calcolare la effettiva velocità del mezzo in transito e salvare i dati. Verifica se ci sono ancora foto da poter scattare, se si torna allinizio programma altrimenti invia dati alla centrale e aspetta che avvenga un intervento manuale di ricarica foto e di reset del sistema.
VALUTAZIONE TEMPO :
Essendo il tempo da valutare di soli 14,4 mS sarà necessario usare una routine il più corta e veloce possibile. Dallistante dellinterruzione del primo fascio intendo continuare ad incrementare un registro (con riporto) del micro sino allinterruzione del secondo fascio così da uscire dal loop con un valore nel registro direttamente proporzionale al tempo intercorso nellinterruzione dei due fasci, cioè il tempo che impiega il mezzo in movimento a percorrere i 20 Cm.La routine che intendo usare è la seguente :
ldi x,0 ;prepara azzerato il registro x ldi y,0 aspetta jrs 0,port_b,aspetta ;rimani ad aspettare se non va a 0 il primo sensore conta inc x ;aggiungi 1 al registro x jrnc ok ;se non cè riporto vadoa ok inc y ;altrimenti incremento y ok jrs 1,port_b,conta ;se il secondo fascio non è ancora ;interrotto continua a contare
Con un quarzo di 8Mhz il micro
esegue un ciclo macchina in un tempo di 1,625 micro
secondi.
Per eseguire listruzione inc x ci
vogliono 2 cicli, 4 per jrnc e 5 per
listruzione jrs pertanto ogni incremento
avviene in un tempo pari a 12 x 1,625 = 19,5 micro
secondi.
Per il tempo di 14,4 mS il numero espresso nei due
registri x e y avrà un valore pari a : 14400 :
19,5 = 738
K/h |
t(mS) |
Y |
X |
N(xy) |
50 |
14,4 |
2 |
228 |
738 |
51 |
14,11765 |
2 |
213 |
723 |
52 |
13,84615 |
2 |
200 |
710 |
53 |
13,58491 |
2 |
186 |
696 |
54 |
13,33333 |
2 |
173 |
683 |
55 |
13,09091 |
2 |
161 |
671 |
100 |
7,2 |
1 |
114 |
369 |
105 |
6,857143 |
1 |
96 |
351 |
110 |
6,545455 |
1 |
80 |
335 |
115 |
6,26087 |
1 |
66 |
321 |
120 |
6 | 1 | 52 |
307 |
VALUTAZIONE VELOCITÁ :
Essendo N(xy) direttamente proporzionale al tempo t si avrà :
N(xy) = k t dove k = N(xy) / t proviamo a 50K/h k= 738 / 14,4 = 51,25
dovrà valere per tutti gli altri casi, proviamo a 100 K/h k= 369 / 7,2 = 51,25
Per convertire il numero valutato, nella velocità effettiva, si dovrà scrivere :

V (K/h) = 36900 : N(xy) infatti
36900 : 307 = 120 K/h come risulta dalla tabella
Così vale per gli altri casi, esempio :
36900 : 738 = 50 K/h 36900 : 369 = 100 K/h
Questo calcolo conviene eseguirlo in centrale dove si
dispone di un PC con un software in linguaggio
sicuramente più idoneo per calcoli matematici.
Si potrebbe anche con il micro ST6265 ma appesantirebbe
il software dovendo implementare in assembler una
divisione a 16 bit (operando e dividendo a due byte).
Se proprio si volesse risolvere il problema con il micro
si potrebbe semplificare loperazione dividendo per
quattro sia il dividendo che il divisore così da
implementare una divisione finale fra un operando a 2
byte e un dividendo a 1 byte.
36900 : 4 = 9225 che espresso in due byte diventa 36
nel byte MSB e 45 nel byte LSB. Pertanto V(K/h) = 9225 /
N(xy)
CALCOLO VELOCITÁ IN ASSEMBLER
n1 .def 084h ;n1 = byte MSB n2 .def 085h ;n2 = byte LSB dividendo n3 .def 086h ;n3 = byte del divisore risul .def 087h ;risul = risultato resto .def 088h ;resto = avanzo della divisione byte_H .EQU 36 ;byte MSB del numero fisso 9225 byte_L .EQU 45 ;byte LSB del numero fisso 9225 Il valore di N(xy)sarà espresso dal byte MSB = y e dal byte LSB = x che dovrò dividere per 4 invocando la routine divide nel seguente modo : calcola ld a,y ;carico y in a ld n1,a ;metto MSB di N(xy) in n1 (n1 e n2 = dividendo) ld a,x ;carico x in a ld n2,a ;metto LSB di N(xy) in n2 ldi n3,4 ;metto nel divisore il valore 4 call divide ;eseguo la divisione, il risultato è in risul ld a,byte_H ;MSB del numero fisso 9225 in a ld n1,a ;e lo metto in n1 ld a,byte_L ;LSB del numero fisso 9225 in a ld n2,a ;e lo metto in n2 ld a,risul ;prendo il N(xy) diviso per 4 ld n3,a ;e lo metto in n3=dividendo call divide ;eseguo la divisione e torno con V(k/h) sia in a che in risul ret divide ldi wdog,254 ;carico wdog clr risult ;azzeramento risultato ld a,n1 ;carico nel reg a il byte MSB jrnz div ;se non e` zero salto ld a,n2 ;altrimenti prendo byte LSB jp ancora ;e vado a dividere div ld a,n2 ;prendo il byte LSB suba ldi wdog,254 inc risult ;suppongo già che n3 ci stia una volta in n2 sub a,n3 ;sottraggo una volta n2-n3 jrnc suba ;se a>= n2 continuo a sottrarre e inc risultato dec n1 ;chiedo riporto al byte + significativo jrnz suba ;e se n1 non e` zero continuo a sottrarre ancora ldi wdog,254 inc risult ;incremento ancora il risultato sub a,n3 ;sottraggo ancora jrnc ancora ;e continuo fino a che n2>n3 dec risult ;ho finito ma devo sottrarre 1 al risultato add a,n3 ;rimetto a come prima dell'ultima sub non valida ld resto,a ;cosi da avere in a il resto ret Il microcontrollore ha al suo interno 128 byte di EEPROM e considerato che servono due byte per ogni velocità superiore ai 50 K/h, ne consegue che sarà possibile registrare e fotografare 64 infrazione. LISTATO ASSEMBLER ST6265 ldi pdir_a,11111111b ;definisce la port_a come output - uscite a 0 ldi popt_a,11111111b ldi port_a,00000000b ldi pdir_b,00001100b ;definisce la port_b - pb0 e pb1 input ldi popt_b,00001100b ;pb2 e pb3 output ldi port_b,00000000b ldi pdir_c,00000000b ;definisce la port_a come input ldi popt_c,00000001b ;pc0 input ADC ldi port_c,00000001b main ldi wdog,255 jrr 1,port_b,main ;resta a main se il sensore 2 non vede il fascio jrs 0,port_b,main ;non va oltre se il primo fascio non viene interrotto ldi x,0 ;prepara azzerato il registro x ldi y,0 conta inc x ;aggiungi 1 al registro x jrnc ok ;se non cè riporto vado a ok inc y ;altrimenti incremento y ok jrs 1,port_b,conta ;se il secondo fascio non è ancora interrotto continua a contare ld a,y ;prende valore di y e lo mette nel reg. a cpi a,2 jrc veloce ;se già y minore di 2 significa che è sicuramente maggiore di 50k/h ld a,x ;e salta a veloce, altrimenti valuta il valore di x cpi a,220 ;se minore di 220 sicuramente supera 50k/h jrc veloce ;pertanto salta a veloce torna jp main ;altrimenti la velocità non supera i 50k/h pertanto salta a main veloce ldi wdog,255 ldi adcr,00110000b ;abilita convertitore ADC (pc0) attesa jrr 6,adcr,attesa ;attende fine conversone (circa 70 mS) ld a,addr ;prende valore convertito cpi a,153 ;verifica jrc torna ;se minore, cioè luce insufficiente, salta e torna a main ld a,port_b ;legge in a lo stato della port_b set 3,a ;mette il bit 3 a livello alto +5V per abilitare scatto foto ld port_b,a ;scrive a in port_b con il bit 3 a + 5V ldi w,75 ;ritardo saturazione transistore ldiv ldi v,255 ;circa 310 mS decv ldi wdog,255 ;100 x 255 x 16,25mS = 310 mS dec v jrnz decv ;se non è zero continua a decrementare dec w ;decrementa w jrnz ldiv ;se non è zero ricarica v e ricomincia dec ld a,port_b ;resetta il bit 3 interdicendo il transistore res 3,a ld port_b,a ;Se intendo calcolare la velocità già qui allora salterò le seguenti 4 istruzioni ld a,y ;prende il byte MSB del valore tempo call save ;va a salvare in EEPROM ld a,x ;prende il byte LSB del valore tempo call save ;va a salvare in EEPROM ;Le due istruzioni call che seguono sono in alternativa alle precedenti 4 istruz. call calcola ;va a calcolare la velocità call save ;salva il byte che esprime la velocità dec foto ;conta nr foto scattate jrnz altro ;se non sono ancora finite salta e va a min per altro controllo call invio ;altrimenti invia dati alla centrale fine ldi wdog,255 ;resta qui fino a reset manuale jp fine altro jp main ;torna a main
save ldi wdog,255 ldi a,foto cpi a,65 ;se minore di 65 scrive nel banco 1 jrc write ldi drbr,2 ;altrimenti banco 2 subi a,64 ;le celle del banco vanno dalla 0 alla 64 ld x,a ;prepara x a puntare alla cella col numero della foto jp lda write ldi drbr,1 ;primo banco ld x,foto ;prepara x a puntare alla cella col numero della foto lda ld a,risul ;riprende il valore della velocità asp_ jrs 1,eecr,asp_ ldi eecr,1 ;abilita scrittura ld (x),a ;scrive in (x) valore di a ldi wdog,255 write_ jrs 1,eecr,write_ ;rimane qui fino a fine scrittura ldi eecr,0 ;disabilita scittura ret code .EQU 1 ;code conterrà il numero progressivo della stazione invio ld a,code ;carica codice come identificatore della stazione call uscita ;lo invia alla centrale ldi y,2 ;per contare numero banchi da leggere banc2 ldi dbr,2 ;predispone lettura banco 2 jp ldix banc1 ldi dbr,1 ;predispone lettura banco 1 (arriva dopo aver letto banco1) ldix ldi x,64 ;x punta alla cella 64 asp jrs 1,eecr,asp ;aspetta pronta lettura ldi wdog,255 ld a,(x) ;legge la cella puntata da x call uacita ;invia dato allUART dec x ;conta numero celle lette e inviate jrz jpbanc ;se finito primo banco passa al secondo jp asp ;altrimenti legge altra cella e invia jpbanc dec y ;verifica se letti entrambi i banchi jrz finetx ;se sì ha finito jp banc1 ;altrimenti va a predisporre per leggere banco 1 finetx ret uscita ld port_a,a ;mette a sulla porta_a verso lUART ld a,port_b set 2,a ;genera un impulso sul pb2 per segnalare dato pronto ld port_b,a ;lo mette in out su pb2 nop ;piccolo ritardo per durata impulso res 2,a ;rimette a livello basso pb2 ld port_b,a ret
(c) by Vittorio Crapella [ Return ] [Le mie pagine]