jparenas, questa è una domanda che torna regolarmente, essendo fonte di confusione quando si lavora con gli ADC. È strettamente correlato alla classica confusione: Full Scale Voltage (FS) rispetto a Reference Voltage (Vref). Per mantenere le cose semplici, si prega di considerare un ipotetico ADC a 3 bit (\ $ N \ $ = 3), senza la compensazione comune di 0,5 LSB sull'ingresso (come, penso, si verifica su ATmega328p) - in tal caso, i risultati ottenuto qui non differisce molto. Tre parti:
(a) Vedere la funzione di trasferimento (a) nell'immagine sottostante, dove Va è la tensione analogica e Vd è il valore digitale convertito. FS è solo la tensione che corrisponde alla transizione al valore digitale massimo (7 o \ $ 2 ^ N-1 \ $). Inoltre, ci sono sette passaggi in orizzontale e sette in verticale, in cui ogni passaggio si verifica in multipli di 1/7 FS. Sia FS = 4,375 V, quindi ogni passo analogico è 0,625 V. Si noti che la linea tratteggiata inclinata che collega le coordinate (0; 000) a (FS; 111) rappresenta la conversione ideale che ogni ingegnere vorrebbe. Quindi:
$$ Vd = int \ left (\ frac {Va} {FS} \ times 7 \ right) $$
Qui possiamo isolare Va per trovare una semplice espressione it:
$$ Va = \ frac {Vd} {7} \ times FS $$
Ma aspetta! Le cose non sono così semplici: per essere più rigorosi, possiamo vedere che la tensione Va può effettivamente assumere qualsiasi valore all'interno di un intervallo. Applicando la definizione di \ $ int () \ $ funzione:
$$ \ frac {Vd} {7} \ times FS \ leq Va < \ frac {(Vd + 1)} {7} \ times FS $$
(b) Ora vedi la funzione di trasferimento mostrata in (b). Nota che se ci fosse un altro passo aggiuntivo di 1/7 FS, potremmo associarlo a un valore digitale completo di 8 (o \ $ 2 ^ N \ $). Ecco! Chiamiamolo Vref:
$$ Vref = \ frac {8} {7} FS $$
Nota che, per il nostro FS = 4.375 V \ $ \ Rightarrow \ $ Vref = 5 V. Vedi l'espressione \ $ FS = \ frac {7} {8} Vref \ $. È un altro modo per affermare che FS rimane 1 LSB sotto Vref. Non ha importanza qui, ma per ADC con compensazione in ingresso di 0,5 LSB, FS sarebbe 1,5 LSB sotto Vref.
(c) Infine riscrivi il tutto basandosi solo su Vref, rimuovendo quel passaggio aggiuntivo. Quindi, otteniamo la funzione di trasferimento mostrata in (c) - simile a quella trovata nei fogli dati, basata interamente sul fattore \ $ 2 ^ N \ $. Sono tutti felici! Ma nota che ci sono 7 passaggi in verticale e 8 passaggi in orizzontale. L'espressione per Vd viene sostituita con:
$$ Vd = int \ left (\ frac {Va} {Vref} \ times 8 \ right) $$
Inoltre:
$$ \ frac {Vd} {8} \ times Vref \ leq Va < \ frac {(Vd + 1)} {8} \ times Vref $$
Funzioni di trasferimento ADC:
Quindi, possiamo usare \ $ (2 ^ N-1) \ $ o \ $ 2 ^ N \ $, poiché sono correttamente associati rispettivamente ai valori FS o Vref. Secondo la trama (c) la cattiva notizia è che non possiamo "misurare" il valore Vref (anzi, identificare quando avviene il passaggio a questo valore). Certo, possiamo superare il problema usando divisori resistivi e amplificatore. operazioni sull'input dell'ADC per far corrispondere il valore che vogliamo. Ma questo potrebbe non valere la pena in pratica: oltre alle differenze molto piccole (per un ADC a 10 bit o superiore), ci sono anche le non idealità del convertitore AD. Infine, la tolleranza del resistore utilizzato potrebbe "rovinare" il tutto.
Un vantaggio nell'usare la divisione per \ $ 2 ^ N \ $ è che in microcontrollori semplici (in particolare a 8 bit) senza avere un'istruzione per la divisione: questo può essere sostituito da più turni a destra.La differenza è che l'arrotondamento per la divisione con segno è "verso zero" e per lo spostamento aritmetico a destra è "infinito negativo".Processori più sofisticati, come quello ARM (diverso dal Cortex-M0), incorporano già istruzioni per la divisione in pochi cicli e turni multipli a ciclo singolo attraverso il cambio barile nativo, con una differenza minima nelle prestazioni.