Salta al contenuto
Note per Studenti Esercizio 31 · sistema di controllo di un ascensore con microcontrollore a 8 bit (tema d'esame 18 luglio 2006)

Esercizio 31sistema di controllo di un ascensore con microcontrollore a 8 bit (tema d'esame 18 luglio 2006)

Esame
In questa pagina 7

Testo (tema d'esame del 18 luglio 2006, problema completo; parti principali). Si deve realizzare un sistema di controllo per un ascensore con un microcontrollore a 8 bit, clock 12 MHz, con convertitore A/D a 10 bit, FSR=3FSR=3 V, di tipo SAR, un modulatore PWM a 8 bit e una porta seriale. Il motore ha una dinamo tachimetrica con rapporto di trasduzione di 5 V per 1000 giri al minuto (rpm); il motore agisce, tramite un riduttore con rapporto N=100N=100, su una puleggia di diametro Φ=1\Phi=1 m.

  1. La velocità del motore varia da 0 a 2500 rpm (si trascura il segno). Determinare: (a) il guadagno AA dell'amplificatore di adattamento al convertitore che massimizza il rapporto segnale-rumore; (b) i valori mancanti della tabella: rpm 1000,1500,20001000,1500,2000 → tensione del trasduttore, tensione all'ingresso dell'ADC, uscita esadecimale dell'ADC; (c) la minima variazione di velocità rilevabile; (d) la durata della conversione se l'ADC lavora al clock del processore.
  2. (a) La velocità lineare vv per 2000 rpm; (b) il valore massimo dell'uscita dell'ADC, in esadecimale, se si limita la massima velocità di salita a 0,80{,}8 m/s.
  3. (a) La rappresentazione su 8 bit, frazionaria senza segno, dei guadagni 0,5230{,}523 e 0,0120{,}012 del regolatore PI yI(k)=yI(k−1)+0,012 x(k)y_I(k)=y_I(k-1)+0{,}012\,x(k), y(k)=0,523 x(k)+yI(k)y(k)=0{,}523\,x(k)+y_I(k), con l'errore di arrotondamento; (d) la frequenza di campionamento tale che il guadagno integrale digitale corrisponda a un valore analogico di 216216 rad/s.
  4. Il µC trasmette via seriale la velocità lineare di salita: (a) il coefficiente KK che porta il dato dell'ADC alla velocità in m/s; (b) la rappresentazione binaria, frazionaria senza segno, arrotondata a 8 bit, di 0,3560{,}356 m/s; (c) il minimo numero di bit da trasmettere per dato per consentire la sincronizzazione del ricevitore; (e) la dimensione in locazioni da 8 bit della memoria dati occupata dalla lista da trasmettere, svuotata a 150 Hz, se i dati si producono alla frequenza trovata in 3.d.
  5. Le ISR (priorità 1-3): ISRADCISR_{ADC} 50 µs a 5 kHz; ISRpulsantiISR_{pulsanti} 120 µs a 0,1 kHz (caso peggiore); ISRserialeISR_{seriale} 135 µs a 0,15 kHz; nessuna regione critica; senza nesting; latenza intrinseca 1 µs e istruzione più lunga 1 µs. (a) La percentuale di tempo dedicata all'esecuzione delle ISR; (c) la massima durata di ISRADCISR_{ADC}, nelle condizioni di tabella e scambiando le priorità di ISRpulsantiISR_{pulsanti} e ISRserialeISR_{seriale}.
  6. La pulsantiera fornisce la codifica BCD del tasto: r1 = LSL c1 #3; r2 = LSL c1 #1; r1 = r1 + r2; r1 = r1 + c2; con c1c_1, c2c_2 le due cifre BCD (c1c_1 più significativa), ciascuna in un registro a 8 bit. Per il tasto 13: (a) il contenuto di r1 e r2 alla fine; (b) il tempo di esecuzione con una pipeline a 3 stadi a regime.

Teoria usata: ADC e DAC - risoluzione, SNR, ENOB ed erroriUn convertitore a $n$ bit con fondo scala $FSR$ ha risoluzione $LSB=FSR/2^n$; il codice vale $C=\mathrm{round}(V/LSB)$ e la tensione corrispondente è $V=C\cdot LSB$ con incertezza $\pm\frac12LSB$ (errore di quantizzazione). Con un modello a rumore uniforme di potenza $LSB^2/12$ il SNR di una sinusoide a fondo scala è $6{,}02,n+1{,}76$ dB; dal SNR misurato si ricava il numero di bit efficaci $ENOB=\frac{SNR-1{,}76}{6{,}02}$. Gli errori reali (offset, guadagno, INL, DNL, missing code) abbassano l'accuratezza. Accuratezza ≠ precisione: alta accuratezza implica alta precisione, non viceversa.ADC e DAC - risoluzione, SNR, ENOB ed errori →, Architetture di ADC e DACADC flash: $2^n-1$ comparatori in parallelo, il più veloce (GS/s) ma costoso, $n<10$. A gradinata/a rampa: contatore + DAC (o rampa) + comparatore, $T_{conv}\le2^n$ cicli di clock (lentissimo). SAR: ricerca binaria con DAC e comparatore, $T_{conv}=(n+1)$ cicli: il più usato nei µC. Sigma-delta: ADC a 1 bit + DAC a 1 bit in retroazione e filtro digitale, sovracampionamento (molti bit, banda ridotta). Multistadio/pipeline: più ADC a pochi bit in serie; la pipeline triplica (con 3 stadi) la frequenza di conversione. DAC: a resistenze pesate, a traliccio R-2R ($V_o=-V_{ref},C/2^n$, corrente costante), a voltage scaling (monotono), seriale.Architetture di ADC e DAC →, Regolatori PI e PID digitaliIl PI digitale è $y(k)=k_p,e(k)+y_I(k)$ con $y_I(k)=k_I',e(k)+y_I(k-1)$ e $k_I'=k_iT_c$ (con una MAC bastano 3 cicli). Nel PID la derivata si calcola come $\frac{k_d}{T_c}[e(k)-e(k-1)]$ ed è sensibile al rumore: si usa la versione filtrata $y_d(k)=\frac{k_d}{T_c+\tau_L}[e(k)-e(k-1)]+\frac{\tau_L}{T_c+\tau_L}y_d(k-1)$ o una media su più campioni. Con la saturazione dell'attuatore serve l'anti-wind-up: $|y_I|\le L(k)=Y_{max}-|k_pe(k)|$. Il controllo dead-beatcontrollo che porta l'errore a zero in un numero finito di passi (predittivo) azzera l'errore in un numero finito di passi ma è poco usato in industria.Regolatori PI e PID digitali →, Sistemi di interruzioni - latenza, nesting e sostenibilitàCon $N$ sorgenti, ciascuna ISR $i$ ha durata $T_{d,i}$ (spesso già comprensiva della latenza intrinseca $T_{LI}$ e dell'istruzione in corso) e periodo minimo $T_{p,i}$. Condizione necessaria: $\sum_iT_{d,i}/T_{p,i}<1$ (la percentuale di impegno della CPU è la somma). Condizione di intervallo per ogni $i$ (priorità 1 = massima): $T_{d,i}+\sum_{k<i}n_k,T_{d,k};[+\max(T_{RC},\max_{j>i}T_{d,j})\text{ senza nesting}]\le T_{p,i}$, con $n_k=\lceil T_{p,i}/T_{p,k}\rceil$. Latenza massima della priorità $n$: con nesting $T_{LI}+\sum_{i<n}T_{ex,i}$; senza nesting si aggiunge $\max_{j>n}T_{ex,j}$.Sistemi di interruzioni - latenza, nesting e sostenibilità →, Comunicazione seriale - UART, RS232, RS422 e RS485La trasmissione serialeche trasmette i bit uno dopo l'altro su una sola linea invia un bit alla volta su pochi fili. Asincrona (UART): senza clock comune, ogni dato è inquadrato da 1 bit di start, 5-8 bit di dati, parità opzionale e 1-2 bit di stop; per 8 bit di dati servono 10 bit sulla linea (efficienza 80%); tempo di bit $BT=1/bps$; il ricevitore campiona a $1{,}5,BT,2{,}5,BT,\dots$ dal fronte di start e tollera uno scostamento di frequenza di circa $\pm5{,}3%$ (o $4{,}6%$ con campionamento a 16×). Sincrona: il trasmettitore invia anche il clock (e il frame sync), efficienza 100%. Livelli fisici: RS232 ($\pm12$ V, 1 = $-12$ V), RS422/RS485 (differenziale, doppino, 10 Mbit/s su $<15$ m; RS485 multi-trasmettitore), loop di corrente 0-20 mA.Comunicazione seriale - UART, RS232, RS422 e RS485 →, Pipeline - accelerazione e conflittiLa pipeline divide l'esecuzione in $n$ stadi (fetch, decodifica, lettura, esecuzione, scrittura) che lavorano contemporaneamente su istruzioni diverse. Il clock è dettato dallo stadio più lento; a regime si completa un'istruzione per ciclo. Per $N$ istruzioni servono $(n+N-1),T_{clk}$: l'accelerazione rispetto al multiciclo tende a $n$ ma è sempre minore (riempimento, conflitti). I conflitti sono strutturali (stessa risorsa), sui dati (RAW...) e di controllo (salti): si risolvono con stalli (interlocking), bypass, sovrapposizione, riordino, salti ritardati. La latenza di una singola istruzione non diminuisce.Pipeline - accelerazione e conflitti →.

1. Misura della velocità

(a) A 2500 rpm la dinamo dà 25001000⋅5=12,5\frac{2500}{1000}\cdot5=12{,}5 V. Per sfruttare tutto il fondo scala dell'ADC (3 V) A=312,5=0,24A=\frac3{12{,}5}=\mathbf{0{,}24} V/V (un fondo scala usato pienamente massimizza il SNR: ADC e DAC - risoluzione, SNR, ENOB ed erroriUn convertitore a $n$ bit con fondo scala $FSR$ ha risoluzione $LSB=FSR/2^n$; il codice vale $C=\mathrm{round}(V/LSB)$ e la tensione corrispondente è $V=C\cdot LSB$ con incertezza $\pm\frac12LSB$ (errore di quantizzazione). Con un modello a rumore uniforme di potenza $LSB^2/12$ il SNR di una sinusoide a fondo scala è $6{,}02,n+1{,}76$ dB; dal SNR misurato si ricava il numero di bit efficaci $ENOB=\frac{SNR-1{,}76}{6{,}02}$. Gli errori reali (offset, guadagno, INL, DNL, missing code) abbassano l'accuratezza. Accuratezza ≠ precisione: alta accuratezza implica alta precisione, non viceversa.ADC e DAC - risoluzione, SNR, ENOB ed errori →). (b) Tensione del trasduttore =rpm1000⋅5=\frac{\text{rpm}}{1000}\cdot5; all'ingresso ADC =0,24⋅=0{,}24\cdot trasduttore; codice =round(VADC3⋅1024)=\mathrm{round}\big(\frac{V_{ADC}}{3}\cdot1024\big):

rpm trasduttore [V] ingresso ADC [V] uscita ADC
1000 5 1,2 410=0x19A410=\texttt{0x19A}
1500 7,5 1,8 614=0x266614=\texttt{0x266}
2000 10 2,4 819=0x333819=\texttt{0x333}

(c) Un LSB dell'ADC corrisponde a 2500 rpm1024=2,44 rpm\frac{2500\ \text{rpm}}{1024}=\mathbf{2{,}44\ rpm} (minima variazione rilevabile). (d) SAR a 10 bit al clock di 12 MHz: n+1f=1112 MHz=0,92 μs\frac{n+1}{f}=\frac{11}{12\ \text{MHz}}=\mathbf{0{,}92\ \mu s}.

2. Velocità lineare

(a) n=2000n=2000 rpm sul motore ⇒\Rightarrow la puleggia gira a 2000100=20\frac{2000}{100}=20 rpm: v=πΦ⋅2060=1,05 m/sv=\pi\Phi\cdot\frac{20}{60}=\mathbf{1{,}05\ m/s}. (b) v=0,8v=0{,}8 m/s ⇒nmotore=0,8⋅60⋅100π⋅1=1527,9\Rightarrow n_{motore}=\frac{0{,}8\cdot60\cdot100}{\pi\cdot1}=1527{,}9 rpm →VT=7,64\to V_T=7{,}64 V →VADC=1,833\to V_{ADC}=1{,}833 V →\to codice round(1,8333⋅1024)=626=0x272\mathrm{round}\big(\frac{1{,}833}{3}\cdot1024\big)=626=\mathbf{0x272}.

3. Regolatore PI a 8 bit

(a) 0.8 U: 0,523⋅256=133,9→134=0x86=1000011020{,}523\cdot256=133{,}9\to134=\mathbf{0x86}=10000110_2, errore 134256−0,523=+4,4⋅10−4\frac{134}{256}-0{,}523=+4{,}4\cdot10^{-4}; 0,012⋅256=3,07→3=0x03=0000001120{,}012\cdot256=3{,}07\to3=\mathbf{0x03}=00000011_2, errore −2,8⋅10−4-2{,}8\cdot10^{-4} (è un errore relativo del 2,3%: il guadagno integrale 0,0120{,}012 è vicino al minimo rappresentabile 2−8=0,00392^{-8}=0{,}0039: Quantizzazione, fattori di scala e cicli limiteUn algoritmo di filtro o regolatore pensato per un processore ideale va adattato alla realtà: temporizzazionedistribuzione nel tempo delle operazioni di un algoritmo (l'algoritmo nella ISR dell'ADC, durata minore di $T_c$), acquisizione (condizionamento del segnale per sfruttare tutto il fondo scala dell'ADC), fattori di scala (normalizzazione intera o 1.15; evitare overflow), quantizzazione di ingresso, uscita, coefficienti e prodotti (sposta i poli, genera errori a regime e cicli limite). Una frequenza di campionamento troppo alta rende più critica la quantizzazione dei coefficienti: va scelta coerente con la lunghezza di parola.Quantizzazione, fattori di scala e cicli limite →). (d) Il guadagno integrale digitale è kI′=ki Tc=kifck_I'=k_i\,T_c=\frac{k_i}{f_c}: con ki=216 s−1k_i=216\ \text{s}^{-1} e kI′=0,012k_I'=0{,}012: fc=2160,012=18,0 kHzf_c=\frac{216}{0{,}012}=\mathbf{18{,}0\ kHz}.

5. Trasmissione della velocità

(a) Il dato dell'ADC, normalizzato al fondo scala, corrisponde a vmax=πΦ2500/10060=1,309v_{max}=\pi\Phi\frac{2500/100}{60}=1{,}309 m/s: K=1,309\mathbf{K=1{,}309} m/s (velocità lineare a fondo scala, 2500 rpm). (b) 0,3561,309=0,272\frac{0{,}356}{1{,}309}=0{,}272; in 0.8 U: 0,272⋅256=69,6→70=0100011020{,}272\cdot256=69{,}6\to70=\mathbf{01000110}_2. (c) Per ogni byte: start, 8 dati, stop: 10 bit. (e) Il dato si produce a 18 kHz (la frequenza di campionamento) e la lista si svuota a 150 Hz: tra due svuotamenti si accumulano 18000150=120\frac{18000}{150}=\mathbf{120} dati da 1 byte: 120 locazioni.

6. Interruzioni

(a) Percentuale di tempo dedicata all'esecuzione: 50⋅5000+120⋅100+135⋅150=250 000+12 000+20 250 μs/s=28,2%50\cdot5000+120\cdot100+135\cdot150=250\,000+12\,000+20\,250\ \mu\text{s/s}=\mathbf{28{,}2\%} (0,25+0,012+0,0200{,}25+0{,}012+0{,}020). (c) Senza nesting la condizione più stringente è quella della ISR a priorità 1 (periodo 15 kHz=200 μ\frac1{5\text{ kHz}}=200\ \mus): Td,1+max⁡(Td,2,Td,3)≤200T_{d,1}+\max(T_{d,2},T_{d,3})\le200 con Td=Tex+TLI+TIST=Tex+2T_{d}=T_{ex}+T_{LI}+T_{IST}=T_{ex}+2 e la ISR seriale la più lunga: Tex,1+2+135+2≤200⇒Tex,1≤61 μsT_{ex,1}+2+135+2\le200\Rightarrow T_{ex,1}\le\mathbf{61\ \mu s}. Scambiando le priorità di ISRpulsantiISR_{pulsanti} e ISRserialeISR_{seriale} il massimo delle durate sotto la priorità 1 è sempre 135: ancora 61 µs.

7. Conversione BCD

c1=1c_1=1, c2=3c_2=3 (tasto 13): r1 = c1<<3 = 8; r2 = c1<<1 = 2; r1 = 8+2 = 10 (=c1⋅10=c_1\cdot10); r1 = 10+3 = 13. Alla fine: r1 =000011012=13=00001101_2=13 e r2 =000000102=00000010_2. Il codice calcola 10 c1+c2=8c1+2c1+c210\,c_1+c_2=8c_1+2c_1+c_2 con shift e somme (niente moltiplicazione). Tempo: 4 istruzioni a 1 ciclo ciascuna in una pipeline a regime: 4 cicli di 112 MHz\frac1{12\ \text{MHz}}: 0,33 μs\mathbf{0{,}33\ \mu s}.

Errori comuni

  • Dimenticare che 1000 rpm del motore non sono 1000 rpm della puleggia (riduttore 100).
  • Calcolare AA senza considerare il massimo della dinamo (12,5 V): la tensione in ingresso ADC supererebbe FSRFSR.
  • Confondere il guadagno integrale analogico kik_i (s−1\text{s}^{-1}) con il coefficiente digitale kI′=ki/fck_I'=k_i/f_c.
  • Trascurare TISTT_{IST} e TLIT_{LI} nella condizione di intervallo (61 µs invece di 65).

Versione ripasso

Testo. Ascensore con µC a 8 bit: dinamo 5 V/1000 rpm, ADC a 10 bit 3 V, riduttore 100, puleggia 1 m, PI, seriale, ISR, BCD (18 luglio 2006).

Teoria collegata