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 [%]