Scarica il documento zippato   

Progetto:             Gestione del traffico su di un ponte mediante microprocessori

 

PROGETTO

 

Il traffico a senso unico su di un ponte è regolato da un semaforo a tre luci aventi, nel ciclo normale, le seguenti temporizzazioni: giallo 10 s, rosso  50 s,

verde 120s.

Allo scopo di tenere sotto osservazione le deformazioni causate dal traffico, si è deciso di posizionare, in particolari punti della struttura, otto sensori aventi la proprietà di rilevare spostamenti positivi e negativi rispetto allo zero (assenza di deformazione), fornendo all’uscita una tensione che è nulla a riposo e che varia linearmente di 100 mV per ogni mm di spostamento. Se almeno uno dei sensori rileva uno spostamento di ampiezza di 1 cm (valore di soglia), deve essere attuato un ciclo di emergenza così strutturato: giallo 10 s, rosso 80 s, verde 90 s.

 

       Quanto richiesto viene realizzato con un sistema a microprocessore attivando una procedura di interruzione. Le funzioni che deve svolgere il microprocessore sono le seguenti:

 

-         gestire la temporizzazione delle luci semaforiche, disponendo di un’onda quadra di periodo 1 s;

-         tramite procedura d’interruzione, attivata dal superamento del valore di soglia, iniziare il ciclo di emergenza partendo dal giallo;

-         dopo tre cicli di emergenza, ripristinare il ciclo normale;

-         durante i tre cicli di emergenza trascurare ulteriori superamenti del valore di soglia;

-         ogni trenta minuti trasmettere ad un centro di sorveglianza lontano 3 km il numero di interruzioni verificatesi dopo l’ultimo invio.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

COMPARATORE 

SOGLIA SUPERIORE

 

 

AMPLIFI-CATORE

 

SENSORE DI DEFORMAZIONE              1

 

 

 
                                                                                                              U1

COMPARATORE 

SOGLIA INFERIORE

 
                                                                             

 

 

 

COMPARATORE 

SOGLIA SUPERIORE

 

SENSORE DI DEFORMAZIONE

              2

 

 

 

AMPLIFI-CATORE

 
 

 


                                                                                                              U2

 

 

 

 

 

SENSORE DI DEFORMAZIONE

  3

 

 

 

AMPLIFI-CATORE

 
 


                                                                                                             

COMPARATORE 

SOGLIA INFERIORE

 

COMPARATORE 

SOGLIA INFERIORE

 

COMPARATORE 

SOGLIA SUPERIORE

 

COMPARATORE 

SOGLIA SUPERIORE

 

COMPARATORE 

SOGLIA INFERIORE

 

COMPARATORE 

SOGLIA SUPERIORE

 

COMPARATORE 

SOGLIA INFERIORE

 

 

AMPLIFI-CATORE

 

 

AMPLIFI-CATORE

 

 

AMPLIFI-CATORE

 

 

COMPARATORE 

SOGLIA INFERIORE

 

COMPARATORE 

SOGLIA SUPERIORE

 

COMPARATORE 

SOGLIA SUPERIORE

 

COMPARATORE 

SOGLIA INFERIORE

 

 

AMPLIFI-CATORE

 

 

 

AMPLIFI-CATORE

 

SENSORE DI DEFORMAZIONE

  8

 

SENSORE DI DEFORMAZIONE

  7

 

SENSORE DI DEFORMAZIONE  

  6

 

SENSORE DI DEFORMAZIONE

  5

 

SENSORE DI DEFORMAZIONE           

  4

 
                                                                                                              U3

 

 

 

 

 

                                                                                                              U4

 

 

 

 

 

                                                                                                              U5

                                                                                                             

 

 

 

 

 

                                                                                                             

                                                                                                              U6

 

 

 

 

 

                                                                                                             

                                                                                                              U7

 

 

 

 

 

                                                                                                             

                                                                                                              U8

 

 

 

 

 

 

 

 

 

SPIEGAZIONE SCHEMA A BLOCCHI

 

I sensori di deformazione forniscono una tensione che va sicuramente amplificata. L’uscita di ognuno va a due comparatori poiché si presuppone che la deformazione rilevata può essere sia positiva che negativa, quindi ci sono due soglie diverse da rilevare. L’interruzione al microprocessore deve avvenire, come si può evincere dalla traccia, su una condizione di OR logico. Le 16 uscite dei comparatori vengono riunite in coppie mediante connessioni con diodi e inviate alla porta A di un PIO Z80. Attraverso piedini della porta B controlliamo anche le tre luci semaforiche. Per il problema della temporizzazione un CTC si occupa di contare i fronti attivi dell’onda quadra che la traccia mette a disposizione.

INTERFACCIA   ELETTRONICA

Lo spostamento di un centimetro corrisponde ad una tensione di uscita dai sensori pari a

                    |V|= 100 mV x 1 cm= 1000 mV = |1 V|

                            10^-1 cm

 

Scegliamo di amplificare il segnale, nell’ipotesi che l’amplificazione della scheda sia Vcc= ± 5 volt, in modo da portare le soglie a ± 3 volt.

Dopo il buffer poniamo allora uno stadio amplificatore non invertente con Av=3

       

              

 

Possiamo scegliere i valori commerciali  R1=100 kW ed R2=200 kW

eventualmente trimmer per effettuare una taratura fine.

 

 

 

 

 

 

Per ottenere soglie di 3 V

 

    

       R4 = 40 kW

 

Possiamo scegliere i valori commerciali R5 = 60,4 kW e R4= 40,2 kW

Il condensatore C2 introduce una frequenza di taglio superiore equiparando le deformazioni a segnali lentamente variabili nel tempo. Poniamo

                   

Il blocco circuito di potenza si può realizzare con relè di tipo bistabile comandati nel seguente modo.

 

 

Scegliamo relè subminiati in grado di sopportare correnti anche di 3A, con resistenza di avvolgimento di 69 W. Trascurando la VCE di saturazione del transistor si ha:

 

                          

 

Il BJT 2N2222 è in grado di fornire una corrente ICMax = 800 mA.

Per questo transistor hFEMin= 100  per cui:

 

                   

 

Poniamo IB = 7 mA, R7 deve servire ad accelerare la commutazione in OFF del BJT, e deve valere alcuni kW. Poniamo R7 = 4,7 kW

 

                          

 

                             I6 = I7 + IB = 7,15 mA

 

 

 

 

Il segnale di ingresso , di tipo TTL , a livello alto vale VOHmin=4,5 V

 

                                    

 

Altro problema è, però, il fatto che un’uscita dal PIO al livello alto non potrà generare la corrente necessaria per cui occorre interporre un buffer tipo 74LS244

 

 

 

 

 

 

 

 

 

 

TEMPORIZZAZIONI

Usando un CTC, contiamo i fronti di salita dell’onda quadra che abbiamo a disposizione, usando il contatore 0 come counter facendo in modo che le interruzioni da esso generate scandiscano i cicli delle luci semaforiche. Usando il contatore 1 sempre come counter generiamo ogni 200 secondi un impulso in uscita contato dal contatore 2 che contiene 9 in modo che generi un’interruzione ogni 9 × 200= 1800 s =30 minuti per costringere il microprocessore ad inviare i dati al centro remoto.

 

 

 

 


             dal decoder  I/O

 

 


                                                                                 1 s

 

 


             A1

 


             A0

 

                                                                         

                                                                             INT

 

 

Poiché i contatori sono in daisy chain al loro interno facciamo in modo che l’interruzione da parte del contatore 0 abbia priorità superiore a quella per l’invio dei dati.

 

 

 

 

 

 

 

 

 

 

 

 

 

COLLEGAMENTO AL CENTRO REMOTO

Poiché un segnale di pericolo che parte dai sensori comporta un ciclo di emergenza di 3 minuti, nella peggiore delle ipotesi in 30 minuti abbiamo 10 interruzioni. Si tratta, quindi, di spedire un solo byte.

Il modem può dunque essere anche un modem V21 da 300 bit/s che opera in modalità full-duplex, asincrono, con modulazione FSK a due livelli.

Il collegamento con il modem si può realizzare con lo schema seguente dove si suppone che il fattore di baud rate interno all’ 8251 sia impostato a 16.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PROGETTO DELL’INTERFACCIAMENTO DI I/O

 

       

 

 

 

 

 

A7

A6

A5

A4

A3

A2

A1

A0

 

HEX

 

0

0

0

1

0

0

0

0

10H

dati porta A PIO

0

0

0

1

0

0

0

1

11H

programmazione porta A PIO

0

0

0

1

0

0

1

0

12H

dati porta B PIO

0

0

0

1

0

0

1

1

13H

programmazione porta B PIO

0

0

1

1

0

0

0

0

30H

contatore 0 CTC

0

0

1

1

0

0

0

1

31H

contatore 1 CTC

0

0

1

1

0

0

1

0

32H

contatore 2 CTC

0

0

1

1

0

0

1

1

33H

contatore 3 CTC

0

1

0

1

0

0

X

0

50H

dati al 8251

0

1

0

1

0

0

X

1

51H

programmazione 8251

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

 

 

 

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0000H

EPROM

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

0FFFH

0

0

1

0

X

0

0

0

0

0

0

0

0

0

0

0

2000H

RAM

0

0

1

0

X

1

1

1

1

1

1

1

1

1

1

1

2FFFH

 

EPROM

 

                                          0000H

 

 

 

 

 

 

NON UTILIZZATO

 
                                                           0FFFH

                                                           1000H

 

 

 

 

                                                           1FFFH

 

 

 

RAM

 
 


                                                           2000H

 

 

 

 

                                                           2FFFH

 


      

 

 

 

 

                NON

      UTILIZZATO

               

 

 

 

 

 

 

 

 

 

 

SOFTWARE

 

PROGRAMMA DI GESTIONE DELL’INTERRUZIONE DEL CONTATORE ZERO

 

PROGRAMMA DI GESTIONE DEL PIO Z80

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PROGRAMMA CONTATORE UNO CTC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DETTAGLIO MEMORIA RAM

2000H

INDIRIZZO SOTTOPROGRAMMA

TABELLA                                           VETTORI                                             INTERRUZIONI

2001H

CONTATORE ZERO  CTC

2002H

INDIRIZZO SOTTOPROGRAMMA

2003H

CONTATORE UNO  CTC

2004H

INDIRIZZO SOTTOPROGRAMMA

2005H

CONTATORE DUE  CTC

2006H

CONTATORE NUMERO INTERRUZIONI

* (VEDI SOTTO)

2007H

CONTATORE DI CICLO

** (VEDI SOTTO)

2008H

CONTATORE CI CICLI INTERRUZIONI

*** (VEDI SOTTO)

2009H

COSTANTE TEMPO GIALLO

 

200AH

COSTANTE TEMPO ROSSO

200BH

COSTANTE TEMPO VERDE

200CH

FLAG INTERRUZIONI

200DH

200EH

INDIRIZZO SOTTOPROGRAMMA

 

PORTA A PIO

 

STACK

2FFFH

 

*      CONTA QUANTE INTERRUZIONI SI SONO AVUTE IN 30 MINUTI

**    INIDCA NEL CICLO SEMAFORICO SE È LA FASE DEL GIALLO, DEL VERDE O DEL ROSSO

***  CONTORE CHE PERMETTE DI STABILIRE SE SONO STATI ESEGUITI I 3 CICLI DI INTERRUZIONI

 

 

 

 

PROGRAMMA

 

 ORG  0000H  ; programma inizializzazione scheda

 CNI  DEFB  2006H

 ;CNI = contatore numero interruzioni

 ;area in cui verrà conservato il numero di interruzioni dovute ai sensori di deformazione

 CDC  DEFB  2007H

 ;CDC = contatore di ciclo

 ;se è uguale a 3 occorre eseguire il ciclo della luce gialla

 ;se è uguale a 2 occorre eseguire il ciclo della luce rossa

 ;se è uguale a 1 occorre eseguire il ciclo della luce verde

 CCI  DEFB  2008H

 ;CCI = contatore cicli di interruzione

 ;questo contatore consente di sapere se sono stati eseguiti i tre cicli semaforici di

 ;emergenza

 CTG  DEFB  2009H

 ;CTG = costante di tempo gialla

 ;contiene il numero di secondi del ciclo giallo, cioè la costante di tempo da inserire nel

 ;contatore 0 del CTC

 CTR  DEFB  200AH

 ;CTR = costante di tempo rossa

 ;contiene il numero di secondi per i quali deve essere accesa la luce rossa

 CTV  DEFB  200BH

 ;CTV = costante di tempo verde

 ;contiene il numero di secondi per i quali deve essere accesa la luce verde

 FLAG  DEFB  2000H

 ;questo byte funziona da flag per indicare se stiamo eseguendo un ciclo semaforico di

 ;emergenza o meno

 LD  SP, 2800H

 ;inizializziamo lo stack alla fine della RAM

 LD  A, 10|10

 LD  (CTG), A

 ;inizializziamo i valori delle durate dei vari cicli

 ;LD  A con 10s per il giallo, 50s per il rosso, 120s per il verde

 LD  A, 50|10

 LD  (CTR), A

 LD  A, 120|10

 LD  (CTV), A

 LD  A, D7H

 ;parola di programmazione del contatore 0 del CTC

 ;D0 = 1 perché identifica la parola di programmazione channel control word

 ;D1 = 1 determina il reset software del contatore

 ;D2 = 1 indica che segue costante di tempo

 ;D3 = 0 indifferente poiché vogliamo programmare il contatore come counter

 ;D4 = 1 scegliamo come fronte attivo del CK/TRG quello di salita

 ;D5 = 0 condizione di indifferenza in modalità counter

 ;D6 = 1 funziona come counter

 ;D7 = 1 abilita le interruzioni

 ;11010111 = D7

 OUT  (30H), A

 ;invio della channel control word al canale 0 del CTC

 LD  A, (CTR)

 OUT  (30H), A

 ;invio della costante di tempo

 ;si comincia con il ciclo giallo

 LD  A, 00H

 OUT  (30H), A

 ;invio della parte bassa del vettore delle interruzioni

 LD  A, 57H

 ;programmazione contatore 1 del tutto identica a quella del contatore 0 escluso il

 ;fatto che le interruzioni sono disabilitate

 OUT  (31H), A

 LD  A, 200|10

 ;questo contatore deve contare 200

 OUT  (31H), A

 LD  A, 02H

 OUT  (32H), A

 ;parte bassa vettore delle interruzioni contatore 1

 LD  A, C7H

 ;programmazione contatore 2 con interruzione abilitata

 OUT  (32H), A

 LD  A, 04H   ;parte bassa vettore interruzioni

 OUT  (32H), A

 LD  A, 09H   ;costante di tempo

 OUT  (32H), A

 LD  A, CFH

 ;mode control word per il PIO Z80 porta A

 ;D3D2D1D0 = 1111

 ;identifica la mode control word

 ;D5D4 = 00

 ;condizione d’indifferenza

 ;D7D6 = 11  ;modo 3

 OUT  (11H), A

 LD  A, 0EH

 OUT  (11H), A

 ;parte bassa per il vettore delle interruzioni

 LD  A, FFH

 ;I/O register control word per la porta A

 ;sono tutti 1 poiché i piedini della porta A devono essere impostati tutti come ingressi

 OUT  (11H), A

 LD  A, A7H

 ;interrupt control word

 ;D3D2D1D0 = 01111

 ;identifica la interrupt control word

 ;D4 = 0 non segna maschere

 ;infatti gli ingressi sono tutti impostati per la generazione delle interruzioni

 ;D5 = 1 dice che gli ingressi sono attivi alti

 ;D6 = 0 interruzione su condizione di OR

 ;infatti dalla traccia si desume che deve scattare l’allarme quando almeno uno dei

 ;sensori è attivo

 ;D7 = 1 interruzioni abilitate

 OUT  (11H), A

 LD  A, CFH

 ;stessa parola di modo per la porta B

 OUT  (13H), A

 LD  A, 00H

 OUT  (13H), A

 ;poniamo i pin della porta B tutti come uscite

 LD  A, 07H

 OUT  (13H), A

 ;interrupt control word con interruzioni disabilitate

 LD  A, FEH

 ;parola di modo per 8251

 ;D1D0 = 10 fattore di baud rate pari a 16

 ;D3D2 = 11 lunghezza carattere a 8 bit

 ;D4 = 1 parità abilitata

 ;D5 = 1 parità pari

 ;D7D6 = 11 due bit di stop

 OUT  (51H), A

 LD  A, 01H

 ;parola di controllo con D0 = 1 per impostare l’8251 come trasmettitore

 OUT (51H), A

 LD  A, 20H

 LD I, A

 ;imposta la parte alta del vettore delle interruzioni

 LD  HL, 0300H

 LD  (2000H), HL

 ;suppongo che il programma di gestione del contatore 0 sia in EPROM a partire dalla

 ;locazione 0300H

 LD  HL, 0600H

 OUT  (2002H), HL

 ;suppongo che il programma di gestione del contatore 1 sia un EPROM a partire dalla

 ;locazione 0600H

 ;ho così costruito la tabella dei vettori delle interruzioni IM2

 LD  A, 01H

 OUT  (12H), A

 ;manda 1 sul bit 0 della porta B del PIO in modo da far accendere la lampada gialla

 LD  A, 03H

 LD  (CDC), A

 ;in questo modo alla prima interruzione del contatore 0 del CTC passeremo al rosso

 LD  A, 00H

 LD  (CNI), A

 ;poniamo il contatore del numero delle interruzioni a zero EI

 CICLO :  JP  CICLO

    ;resta in attesa interruzioni

 

 

 

 ORG  0300H

 LD  A, (CDC)

 ;leggi contatore di ciclo

 CP  03H

 JP  NZ, AVANTI

 ;se è uguale a 3 devi accendere la luce rossa

 LD  A, 00000001B

 OUT  (12H), A

 ;invia la parola alla porta B del PIO per accendere la lampada rossa

 LD  A, (CDC)

 DEC  A

 LD  (CDC), A

 ;decrementa il contatore di ciclo

 LD  A, D7H

 OUT  (30H), A

 ;riprogrammazione del contatore per inviargli la nuova costante di tempo

 LD  A, (CTR)

 OUT  (30H), A

 ;invio al canale 0 del CTC della costante di tempo per il ciclo rosso

 JP, FINE2

 AVANTI :  CP, 02H

 JP  NZ, AVANTI2

 ;se è uguale a 2 devi accendere la luce verde

 LD  A, 00000010B

 OUT  (12H), A

 LD  A, (CDC)

 DEL  A

 LD  (CDC), A

 LD  A, D7H

 OUT  (30H), A

 LD  A, (CTV)

 OUT   (30H), A

 JP, FINE

 AVANTI2 :  LD  A, 00000100B

 ;devi accendere la luce gialla

 OUT  (12H), A

 LD  A, 03H

 LD  (CDC), A

 ;poni il contatore di ciclo di nuovo a 3

 LD  A, D7H

 OUT  (30H), A

 LD  A, (CTG)

 OUT  (30H), A

 JP  FINE2

 FINE :  LD  A, (FLAG)

 ;controlla il flag delle interruzioni

 CP, 01H

 JP  NZ, FINE2

 LD  A, (CCI)

 ;se il flag è pari ad 1 decrementare il contatore dei cicli di interruzione

 DEC  A

 LD  (CCI), A

 CP  00H

 JP  NZ, FINE2

 LD  A, 10|10

 LD  (CTG), A

 LD  A, 50|10

 LD  (CTR), A

 LD  A, 120|10

 LD  (CTV), A

 ;se il contatore di cicli di emergenza è arrivato a zero si ripristinano le vecchie durate

 ;dei cicli semaforici

 LD  A, 00H

 LD  (FLAG), A

 ;e si pone il flag a zero

 LD  A, 10000011B

 OUT  (11H), A

 ;invio interrupt disable word alla porta A del PIO per riabilitare le interruzioni

 FINE2 :  RETI

 

 

 ORG  0900H

 LD  A, 10|10

 LD  (CTG), A

 LD  A, 90|10

 LD  (CTV), A

 LD  A, 80|10

 LD  (CTR), A

 ;programma gestione interruzione del PIO

 ;si pongono i valori dei cicli di emergenza nei semafori

 LD  A, 01H

 LD  (FLAG), A

 ;si setta il flag di interruzione

 LD  A, (CNI)

 INC  A

 LD  (CNI), A

 ;incrementa il contatore numero di interruzioni

 LD  A, 03H

 LD  (CCI), A

 ;poni a 3 il contatore cicli di interruzione

 LD  A, 00000011B

 OUT  (11H), A

 ;invio interrupt disable word alla porta A del PIO per disabilitare ulteriori interruzioni

 FINE2 :  RETI

 

 

 

 ORG  0600H

 ;programma gestione interruzione contatore 2 CTC

 LD  A, (CNI)

 ;preleva contatore numero interruzioni

 CALL  SEND

 ;chiama sottoprogramma per invio dati all’usart

 LD  A, 00H

 LD  (CNI), A

 ;azzera contatore numero interruzioni

 RETI