Terzo appello A.A. 2005-2006

annuncio pubblicitario
Corso di Microcontrollori e DSP
A.A. 2005-2006
Prova scritta del 30-08-2006 - TEMA A
Cognome e nome:
Matricola:
Problema
Un microcontrollore a 8 bit è impiegato nel controllo di una camera termica, usata per il test di
apparecchiature elettroniche. Il primo compito del microcontrollore è di registrare le temperature
misurate da 8 sensori a termocoppia dislocati in diversi punti della camera. Esso deve inoltre
regolare due flussi di aria (calda e fredda) in ingresso alla camera in modo che la media delle 8
temperature sia mantenuta al valore desiderato. Deve poi valutare la differenza, in valore assoluto,
tra ciascuna temperatura misurata e la temperatura media, generando un allarme qualora tale
differenza superi i 2 °C. Infine, il microcontrollore deve visualizzare la temperatura media, i livelli
di parzializzazione dei flussi di aria calda e fredda e lo stato degli allarmi su un display.
Ciascun sensore a termocoppia fornisce una tensione VT, che, con ottima approssimazione, è
legata alla temperatura dalla seguente relazione lineare
VT = K T (T − TA ) ,
dove KT = 30 [mV/°C] è la costante di trasduzione della termocoppia, T è la temperatura misurata
e TA è la temperatura ambientale di riferimento, che si assume rigorosamente costante e pari a
+25 °C. La temperatura misurata T può variare da -40 °C a +120 °C.
Il microcontrollore opera ad una frequenza di clock di 10 MHz, dispone di due timer a 8 bit con
prescaler a 8 bit, di una periferica per la trasmissione seriale dei dati (UART), e di una porta di
I/O digitale a 8 bit, ciascuno dei quali è assegnato a uno dei sensori di temperatura.
Quesiti
1. Il segnale proveniente da ogni termocoppia è adattato al convertitore A/D del microcontrollore,
che presenta un fondoscala di 3 V, da un opportuno circuito, rappresentato in figura, che
impiega un amplificatore operazionale ideale.
RIN
+VCC
R1
VT
VADC
+
-
R2
-VCC
R3 = 10 kΩ
R4
-VCC
Sapendo che la tensione di alimentazione del circuito, VCC, è pari a 5 V, che la resistenza di
ingresso del circuito, RIN, è pari a 100 kΩ e che la resistenza R3 è pari a 10 kΩ, si richiede di
determinare:
a. i valori dei coefficienti m e q nella relazione ingresso-uscita del circuito, VADC = mVT + q,
necessari affinché la tensione VADC rimanga compresa tra 0 V e 3 V al variare di T
nell’intervallo assegnato;
m = 0.625 [V/V]
q = 1.219 [V]
b. i valori delle resistenze R1, R2 e R4 richiesti per realizzare i valori di m e q appena trovati;
R1 = 50.25 [kΩ]
R2 = 49.75 [kΩ]
R4 = 41.03 [kΩ]
c. l’errore sulla temperatura misurata, ΔTOS, indotto dalla presenza di una eventuale tensione di
offset di 50 mV all’ingresso dell’amplificatore operazionale.
ΔTOS = 3.32 [°C]
2. Il convertitore A/D del microcontrollore opera su 10 bit e dispone di un prescaler a 8 bit per la
regolazione della velocità di conversione. Il convertitore A/D è inoltre dotato di un multiplexer,
che permette l’acquisizione in successione (i.e. senza pause tra un canale e il successivo, ma
con generazione di una richiesta di interruzione al termine di ciascuna conversione) degli 8
ingressi, a partire da un opportuno segnale di avvio conversione. Sapendo che la conversione di
un singolo ingresso richiede 24 cicli del clock del convertitore A/D, determinare:
a. la minima variazione di temperatura, ΔT, che il convertitore A/D è in grado di rilevare;
ΔTADC = 0.156 [°C]
b. la rappresentazione binaria dell’uscita del convertitore A/D, yADC, quando uno dei sensori
rileva una temperatura di 0 °C;
yADC(0°C) =
0 1 0
0
0
0 0
0 0 0
c. la massima frequenza teoricamente possibile per il segnale di avvio conversione, se il clock
del convertitore A/D è posto uguale a quello del processore;
FC = 52.08 [kHz]
d. nelle stesse condizioni, il tempo che sarebbe a disposizione del microcontrollore per
elaborare ciascun dato convertito, evitando che questo venga sovrascritto dal successivo;
TMIN =
2.4
[μs]
e. il valore esadecimale di configurazione del prescaler del convertitore A/D, se si desidera
invece che ciascuna conversione duri un tempo il più possibile prossimo a 10 μs.
PSC_ADC = 0x
0
4
3. La routine di servizio associata al convertitore A/D deve riportare su 8 bit il dato a 10 bit
ottenuto dal convertitore. Il programmatore ha scelto di mantenere la normalizzazione
frazionaria senza segno e di arrotondare il dato. Si chiede di completare la seguente tabella.
T
misurata
[°C]
Tensione
trasduttore
[V]
Tensione
ingresso
ADC [V]
-20
-1.35
0.375
50
0.75
1.687
100
2.25
2.625
Valore
esadecimale
lettura mC
2 0
9 0
E 0
4. La stessa routine si occupa anche di calcolare la differenza fra la media delle temperature, TM, e
ciascuna temperatura acquisita T, valutando se tale differenza sia o meno maggiore di 2 °C, in
valore assoluto. Si determini:
a. a quanti gradi centigradi corrisponde al massimo una differenza tra i due dati a 8 bit, in
valore assoluto, pari a 1 LSB;
ΔTmC = 0.781 [°C]
b. la rappresentazione binaria, coerente con la normalizzazione adottata per i dati, del valore
che corrisponde alla differenza di temperatura “critica” di 2°C;
ΔTcr =
0 0
0 0
0
0
1 1
c. sapendo che la segnalazione di un allarme avviene ponendo a 1 il bit della porta di I/O
corrispondente al sensore che ha determinato tale condizione, si indichi il valore
esadecimale della porta qualora l’allarme provenga dal sensore associato al bit 6.
PORTA = 0x 4 0
5. Il segnale di avvio conversione è generato dal Timer “0” del microcontrollore. Questo, al
raggiungimento dell’overflow, produce un breve impulso su un pin di uscita, che, a sua volta,
determina l’inizio della sequenza delle 8 conversioni. Inoltre, trascorso un tempo pari a 9
intervalli di conversione, genera una richiesta di interruzione per il processore. Determinare:
a. il valore esadecimale di configurazione del prescaler del timer, necessaria affinché il
periodo del segnale di inizio conversione sia il più possibile prossimo a 5 ms;
PSC_TMR0 = 0x
C
3
b. il valore esadecimale da impostare sul registro di compare per ottenere la generazione
dell’interrupt appena possibile dopo 9 periodi di conversione;
CMP0 = 0x
0
5
6. La routine di servizio del Timer 0 ha come funzione principale quella di controllare i flussi di
aria calda e fredda, così da regolare la temperatura media della camera, TM. Per il flusso di aria
calda, il controllo si basa sul seguente algoritmo:
yI(k) = yI(k-1) + 0.016·x(k),
y(k) = 0.145·x(k) + yI(k),
che corrisponde a un regolatore di tipo PI, in cui x(k) = |Tref(k) – TM(k)| è l’errore di
temperatura (in valore assoluto) al passo k, e y(k) è la percentuale di apertura della valvola di
ammissione dell’aria. Sia x che y sono rappresentati in modalità frazionaria senza segno.
Sapendo che le moltiplicazioni sono eseguite in modo unsigned * , si richiede di determinare:
a. la rappresentazione su 8 bit, frazionaria, senza segno dei due guadagni, indicando anche
l’errore di arrotondamento commesso (in valore assoluto);
0.145
0 0
0.016
0
0
1
0 1
4.687⋅10-4
0 0
1
0 0
3.75⋅10-4
1 0
0 0
b. la modalità di esecuzione delle moltiplicazioni più conveniente al fine di ottenere una
rappresentazione frazionaria senza segno del risultato a 16 bit;
intera X
*
intera + shift a dx di un bit
frazionaria
considerando gli operandi sempre e comunque quantità positive; il segno è gestito “a parte” dal programmatore.
c. quale/i delle seguenti operazioni può/possono essere usate per riportare il risultato, contenuto
nell’accumulatore a 16 bit della ALU, su 8 bit nel formato scelto per y, supponendo che
ciascuna delle moltiplicazioni richieste dall’algoritmo venga eseguita in modalità intera:
r = ACCL·2;
Sì
No X
r = ACCH/2;
Sì
No
r = ACCH;
Sì X
No
X
dove ACCH e ACCL sono rispettivamente la parte alta e bassa dell’accumulatore a 16 bit e r
è un generico registro a 8 bit;
d. il valore esadecimale di y(5), sapendo che x(5) = 0x16 (con segno negativo da gestire a
parte), yI(4) = 0x80 e indicando anche a quale percentuale di apertura della valvola di
ammissione questo corrisponda.
y(5) = 0x 7 C
apertura = 48.4
[%]
7. La gestione del display richiede l’uso della periferica per la trasmissione seriale asincrona
(UART). In particolare, il protocollo di comunicazione prevede che, con una frequenza di
25 Hz, si inviino al display i seguenti dati:
3 byte per la temperatura media, in codifica BCD: prima cifra, seconda cifra, terza cifra;
4 byte per le percentuali di apertura delle valvole dell’aria calda e fredda, sempre BCD;
1 byte per gli allarmi;
1 byte di controllo del display: gestione del segno della temperatura, lampeggio, altre
funzioni accessorie.
La trasmissione avviene a 19600 byte/s, con un bit di start, uno di stop e senza bit di parità.
Essa viene iniziata al verificarsi dell’overflow del Timer “1”, che è opportunamente
programmato, e gestita in polling dalla routine di servizio associata a questo evento. Si richiede
di determinare:
a. quanti bit vengono trasmessi in tutto per ciascuna ripetizione del messaggio e quanto dura la
loro trasmissione, dal primo bit di start all’ultimo bit di stop;
n° bit = 90
durata = 574
[μs]
b. il segno e le 3 cifre (decimali) da trasmettere, nel caso in cui la rappresentazione interna
della temperatura media sia pari a 0x25;
-
0
1
7
c. se il sistema così impostato può funzionare senza alcuna perdita di dati, supponendo che alla
routine di servizio della trasmissione seriale, la cui durata è di 680 μs, sia assegnata la
minima priorità e sapendo che il sistema di interruzioni …
… permette il nesting;
Sì X
No
… non permette il nesting;
Sì
No
X
d. la frazione di tempo (espressa in percentuale) in cui il microcontrollore è impegnato a servire
le diverse interruzioni, sapendo che la routine di servizio associata al convertitore A/D ha
una durata di 8 μs e quella associata al Timer “0” ha una durata di 100 μs (si trascurino tutti
i tempi di latenza).
4.98
[%]
Scarica