Salta al contenuto
Note per Studenti Esercizio 14 · sensore e convertitore A-D, allineamento a 16 bit, offset e tempo di calcolo (temi d'esame gennaio 2022, gennaio 2025, febbraio 2025 e settembre 2026)

Esercizio 14sensore e convertitore A-D, allineamento a 16 bit, offset e tempo di calcolo (temi d'esame gennaio 2022, gennaio 2025, febbraio 2025 e settembre 2026)

Esame
In questa pagina 5

Testo (temi d'esame gennaio 2022 problema P2.1; gennaio 2025 problema P1; febbraio 2025 problema P5; settembre 2026 problema P4).

(i) Il convertitore A/D di un µC produce dati a 12 bit in formato frazionario senza segno rispetto a FSR=3,3FSR=3{,}3 V. Un sensore misura la temperatura di un fluido con yS=kS(Tfluido−Tambiente)y_S=k_S(T_{fluido}-T_{ambiente}) [V], kS=0,016k_S=0{,}016 V/°C, Tambiente=22T_{ambiente}=22 °C. Determinare: (a) TfluidoT_{fluido} quando all'ingresso ci sono 1,891{,}89 V; (b) il valore binario nel registro ADDR; (c) il valore esadecimale nel registro della CPU dopo l'allineamento a 16 bit in normalizzazione frazionaria pura (Q16); (d) il valore in °C del fondo scala; (e) la durata della conversione se il SAR lavora a 1 MHz.

(ii) ADC a 10 bit con FSR=3,3FSR=3{,}3 V, formato frazionario senza segno. Con 1,291{,}29 V in ingresso: (a) il valore binario in ADDR; (b) il valore esadecimale del registro CPU allineato a 16 bit (Q16). Il sensore è un trasduttore di pressione con coefficiente 0,660{,}66 V/bar: (c) il valore effettivo della pressione; (d) il fondo scala in bar; (e) la durata della conversione (SAR a 4 MHz); (f) la durata massima per un'eventuale elaborazione dello stesso dato con frequenza di campionamento 40 kHz.

(iii) ADC a 12 bit con FSR=3,3FSR=3{,}3 V. Letture 0xA00\texttt{0xA00}, 0x3F0\texttt{0x3F0}, 0x725\texttt{0x725}: (a) a quali tensioni corrispondono; con ingresso 0 V si legge 0x032\texttt{0x032}: (b) a quale tensione corrisponde; (c) le letture corrette dall'offset.

(iv) Un ADC a 12 bit (FSR=3,3FSR=3{,}3 V) acquisisce 0x1FF\texttt{0x1FF}, 0xCF0\texttt{0xCF0}, 0x825\texttt{0x825}: tensioni all'ingresso. Il segnale proviene da un sensore di temperatura con fondo scala 5 V e costante di trasduzione 0,020{,}02 °C/mV; l'adattamento fa coincidere i fondoscala (lettura 0xFFF\texttt{0xFFF} = fondo scala di temperatura): fondo scala di temperatura e temperatura per la lettura 0xCF0\texttt{0xCF0}.


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 →, 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 →, 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 →.

(i) Sensore di temperatura

(a) yS=1,89=0,016 (T−22)⇒T−22=1,890,016=118,125⇒Tfluido=140,1 ∘Cy_S=1{,}89=0{,}016\,(T-22)\Rightarrow T-22=\frac{1{,}89}{0{,}016}=118{,}125\Rightarrow T_{fluido}=\mathbf{140{,}1\ ^\circ C}.

(b) C=round(1,893,3⋅4096)=round(2345,9)=2346=0x92A=1001 0010 10102C=\mathrm{round}\big(\frac{1{,}89}{3{,}3}\cdot4096\big)=\mathrm{round}(2345{,}9)=2346=\texttt{0x92A}=\mathbf{1001\,0010\,1010}_2.

(c) Il dato a 12 bit allineato a sinistra su 16 bit (normalizzazione frazionaria pura 0.16 U): C≪4=2346⋅16=37536=0x92A0C\ll4=2346\cdot16=37536=\texttt{0x92A0}. I 4 bit meno significativi sono nulli: la risoluzione numerica è quella dell'ADC (1 LSB =2−12=2^{-12} del fondo scala).

(d) Il fondo scala della conversione corrisponde a 3,33{,}3 V: TFS=3,30,016+22=206,25+22=228,25 ∘CT_{FS}=\frac{3{,}3}{0{,}016}+22=206{,}25+22=\mathbf{228{,}25\ ^\circ C}.

(e) SAR a 12 bit: n+1=13n+1=13 cicli a 1 MHz: 13 μs\mathbf{13\ \mu s}.

(ii) Sensore di pressione

(a) C=round(1,293,3⋅1024)=round(400,3)=400=01 1001 00002C=\mathrm{round}\big(\frac{1{,}29}{3{,}3}\cdot1024\big)=\mathrm{round}(400{,}3)=400=\mathbf{01\,1001\,0000}_2 (10 bit). (b) Allineamento a sinistra su 16 bit: C≪6=400⋅64=25600=0x6400C\ll6=400\cdot64=25600=\mathbf{0x6400}. (c) P=1,290,66=1,955 barP=\frac{1{,}29}{0{,}66}=\mathbf{1{,}955\ bar}. (d) PFS=3,30,66=5P_{FS}=\frac{3{,}3}{0{,}66}=\mathbf5 bar. (e) SAR a 10 bit a 4 MHz: 114 MHz=2,75 μs\frac{11}{4\text{ MHz}}=\mathbf{2{,}75\ \mu s}. (f) Il periodo di campionamento è 140 kHz=25\frac1{40\text{ kHz}}=25 µs: il tempo che resta per elaborare ogni dato dopo la conversione è 25−2,75=22,25 μs25-2{,}75=\mathbf{22{,}25\ \mu s} (l'elaborazione, nella ISR di fine conversione, deve concludersi prima del campione successivo: 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 →).

(iii) Offset

(a) V=C⋅3,34096V=C\cdot\frac{3{,}3}{4096}: 0xA00=2560→2,0625\texttt{0xA00}=2560\to\mathbf{2{,}0625} V; 0x3F0=1008→0,8121\texttt{0x3F0}=1008\to\mathbf{0{,}8121} V; 0x725=1829→1,4736\texttt{0x725}=1829\to\mathbf{1{,}4736} V. (b) L'offset è 0x032=50\texttt{0x032}=50 codici →50⋅0,806 mV=40,3 mV\to50\cdot0{,}806\ \text{mV}=\mathbf{40{,}3\ mV}. (c) Si sottrae l'offset da ogni lettura: 2560−50=2510=0x9CE2560-50=2510=\mathbf{0x9CE} (2,02222{,}0222 V); 1008−50=958=0x3BE1008-50=958=\mathbf{0x3BE} (0,77180{,}7718 V); 1829−50=1779=0x6F31829-50=1779=\mathbf{0x6F3} (1,43331{,}4333 V).

(iv) Temperatura da un sensore

Tensioni: 0x1FF=511→511⋅3,34096=0,412\texttt{0x1FF}=511\to\frac{511\cdot3{,}3}{4096}=\mathbf{0{,}412} V; 0xCF0=3312→2,668\texttt{0xCF0}=3312\to\mathbf{2{,}668} V; 0x825=2085→1,680\texttt{0x825}=2085\to\mathbf{1{,}680} V. Il sensore ha fondo scala 5 V e 0,02 ∘0{,}02\ ^\circC/mV =20 ∘=20\ ^\circC/V: TFS=5 V⋅20=100 ∘CT_{FS}=5\ \text{V}\cdot20=\mathbf{100\ ^\circ C} (l'adattamento fa sì che 5 V all'uscita del sensore diventino 3,3 V all'ingresso dell'ADC, codice 0xFFF\texttt{0xFFF}). La lettura 0xCF0=3312\texttt{0xCF0}=3312 vale 33124096⋅100=80,9 ∘C\frac{3312}{4096}\cdot100=\mathbf{80{,}9\ ^\circ C} (con 33124095\frac{3312}{4095} si ha 80,8880{,}88: la differenza è dell'ordine di un LSB).

Errori comuni

  • Usare FSR/(2n−1)FSR/(2^n-1) per il LSB: il passo è FSR/2nFSR/2^n.
  • Allineare a destra invece che a sinistra (il testo dice "frazionaria pura Q16": MSB sull'MSB, quindi shift a sinistra di 16−n16-n).
  • Dimenticare TambienteT_{ambiente} nell'espressione del sensore (T=ySkS+TambT=\frac{y_S}{k_S}+T_{amb}) e nel fondo scala.
  • Fare l'elaborazione senza sottrarre l'offset: l'errore si propaga all'uscita.
  • Confondere la durata della conversione con il periodo di campionamento.

Versione ripasso

Testo. Sensore (temperatura, pressione) e ADC a 12 e 10 bit con FSR 3,3 V: temperatura da tensione, ADDR, allineamento Q16, fondo scala, durate, offset (gennaio 2022, gennaio e febbraio 2025, settembre 2026).

Teoria collegata