Il riferimento analogico AREF | Arduino Shop and Tutorials
Obiettivi
-
- La risoluzione dei convertitori ADC.
- I riferimenti interni di confronto in Arduino.
- Il riferimento esterno AREF.
Materiale richiesto.
Spagna | Spagna | Messico | |
---|---|---|---|
UNO Starter Kit | UNO Starter Kit | ||
MEGA Starter Kit | |||
MEGA Starter Kit | MEGA Starter Kit | MEGA Starter Kit | MEGA Starter Kit |
La conversione analogico-digitale
In una sessione precedente abbiamo già detto che Arduino ha 6 convertitori analogico-digitali (ADC) che sono i pin da A0 a A5, e abbiamo detto che sono in grado di convertire valori di tensione fino a un massimo di 5V, che è la tensione di riferimento su Arduino.
Abbiamo anche detto che una delle caratteristiche chiave del convertitore è il suo numero di bit, che definisce la finezza con cui possiamo quantificare quella conversione in digitale. Nel caso di Arduino, ci sono 10 bit che gestisce nelle porte analogiche, il che significa che la sua risoluzione è di 210 =1.024 valori possibili.
Più alta è questa risoluzione, migliore è la capacità di approssimare il valore reale di cui stiamo cercando la conversione.
- È importante capire che una conversione in digitale di un segnale analogico è sempre un’approssimazione, e anche nel caso improbabile che il valore analogico sia esattamente quello che ci dice il convertitore, avremo sempre un’incertezza.
- Su un convertitore Arduino con risoluzione di 10 bit, ogni passo di misurazione è 5V/1024 = 0,0048828125 V, poco meno di 5mV, il che significa che non può discriminare tra valori di tensione la cui differenza è inferiore a questo.
Senza entrare troppo nei dettagli, vale la pena dire che ciò che fa un convertitore ADC è confrontare successivamente il segnale che vogliamo quantificare all’ingresso, con una tensione di riferimento rispetto alla quale fa dei confronti.
In altre parole, un ADC non fornisce valori assoluti, ma fornisce un confronto quantificato relativo a un valore di riferimento. Così, nella sessione del sensore di temperatura TMP36, abbiamo calcolato la tensione d’ingresso su uno dei pin analogici come la lettura moltiplicata per un rapporto tra il valore massimo dell’ingresso 5V e il massimo misurato dal convertitore 1024.
Poiché i segnali che normalmente gestiamo su Arduino sono intorno ai 5V, il confronto con 5V è la cosa ragionevole da fare, perché l’industria ha anche tutta una gamma di sensori il cui valore massimo restituisce 5V.
Ma sempre più spesso l’industria produce elettronica a 3,3V, lo stesso Arduino DUE ne è un esempio, e se usiamo i nostri ADC per digitalizzare i segnali di picco a 3,3V, stiamo perdendo precisione e risoluzione, perché stiamo sprecando una parte dei confronti possibili, in effetti un terzo.
In pratica, essendo 3,3V la massima tensione d’ingresso rispetto a 5V significa che non avremo mai letture superiori a 1.024 * 3,3 /5 = 675 e avremo ancora passi di 5mV in ingresso.
Ma se il convertitore è un comparatore di tensione, se potessimo cambiare il valore di tensione con cui confrontiamo a 3,3V, i passi sarebbero 3,3V/1024 = 0,00322265625 o 3,2 mV. Vale a dire che abbiamo migliorato la risoluzione del nostro convertitore e senza spendere un centesimo.
Quindi, in una situazione ideale, la tensione di confronto rispetto alla quale eseguiamo la conversione da analogico a digitale, dovrebbe essere il massimo valore possibile del segnale di ingresso. Perché è allora che avremo la migliore risoluzione possibile con quel convertitore.
I ragazzi di Arduino, erano consapevoli di questo problema ed è per questo che hanno incluso un pin esterno, che non avevamo usato fino ad ora, che permette di collegare una tensione di riferimento esterna, rispetto alla quale il segnale che leggiamo sulle nostre porte da A0 a A5 sarà confrontato.
Questo pin è etichettato AREF (Analog Reference) e si trova due pin sopra il pin digitale 13:
Utilizzando il riferimento analogico esterno
La questione del riferimento analogico con cui confrontiamo i campioni nelle porte A0-A6 è così importante che Arduino fornisce diverse tensioni interne da confrontare con cui possiamo attivare per cambiare il riferimento.
Per abilitare un riferimento interno di 1,1V su un Arduino UNO usate l’istruzione
analogReference(INTERNAL);
Se invece state usando un MEGA potete usare esclusivamente:
analogReference(INTERNAL1V1);
analogReference(INTERNAL2V56);
Che abiliterà rispettivamente i riferimenti 1,1V e 2,56V.
Se usate il tasto DEFAULT, tornate al riferimento standard di 5V su quasi tutti i modelli Arduino.
analogReference(DEFAULT);
- Fate attenzione al riferimento DEFAULT, perché sul DUE significa 3.3V perché è la sua tensione di riferimento. Assicuratevi di questo prima di usarlo felicemente.
Quando colleghiamo una tensione di riferimento al pin AREF, dobbiamo dire ad Arduino che vogliamo usarla. E lo facciamo con l’istruzione
analogReference(EXTERNAL);
Usa la testa quando modifichi il riferimento analogico, perché se non stai attento, mangerai Arduino per cena. È relativamente facile incasinarsi con certe azioni che sembrano innocenti:
- Assicuratevi che se usate un riferimento esterno i GND di Arduino e del riferimento siano gli stessi collegandoli insieme. Non fare questo ha una prognosi molto negativa al primo cambio.
- Non usare in nessun caso meno di 0v sul pin AREF (O un segnale che varia e può avere transitori negativi) perché il risultato è imprevedibile.
- Se collegate una tensione di riferimento esterna, non chiamate analogRead() prima di eseguire l’istruzione analogReference(EXTERNAL), perché metterete in cortocircuito il segnale di confronto interno con la tensione esterna a AREF, ed eventualmente coglierete l’occasione per comprare quel nuovo Arduino che siete così desiderosi di comprare.
- Non collegare ad AREF meno di 1V o più di 5V, non puoi semplicemente impostare 12 e aspettarti che ti dia un valore.
Circuito di prova
Impostiamo un circuito di prova con un display I2C come abbiamo visto nella sessione… e un potenziometro. Ma questa volta, collegheremo alle estremità del potenziometro GND e 3,3V in modo che nel pin centrale che leggeremo con A1, non possa mai superare i 3,3V simulando un sensore con quel valore massimo.
Come giriamo il potenziometro, leggeremo una caduta di tensione tra 0V e 3,3V. e la lettura del pin A1, darà valori compresi tra 0 e 670, dato che siamo nel caso che abbiamo definito poco sopra.
Il programma leggerà semplicemente il pin analogico A1 e invierà il suo valore a un display I2C di 16 caratteri per due righe come abbiamo visto nella sessione….
Ecco un mini-video con le letture del potenziometro
Se ora colleghiamo la tensione interna di 3,3V di Arduino al pin AREF, avremo un circuito come questo:
Vediamo ora il programma:
Ecco un video con la differenza:
Riassunto della sessione
In questo corso di arduino abbiamo imparato quanto segue:
-
- Abbiamo insistito sulla questione della conversione da analogico a digitale e abbiamo visto che fondamentalmente è un confronto con un valore di riferimento.
- Abbiamo visto che possiamo usare un valore di tensione interno o esterno, diverso dai soliti 5V.
- Ora conosciamo le istruzioni precise per attivare quel riferimento esterno e le precauzioni da prendere quando lo si usa.