Sommario:
- Passaggio 1: revisione
- Passaggio 2: perché AnalogRead() restituisce un valore compreso tra 0 e 1023?
- Passaggio 3: quindi cos'è l'AREF?
- Passaggio 4: AREF esterno
- Passaggio 5: AREF interno
Video: Il Pin AREF di Arduino: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
In questo tutorial vedremo come misurare tensioni più piccole con maggiore precisione utilizzando i pin di ingresso analogico sul tuo Arduino o su una scheda compatibile insieme al pin AREF. Tuttavia, prima faremo alcune revisioni per aggiornarti. Si prega di leggere questo post interamente prima di lavorare con AREF la prima volta.
Passaggio 1: revisione
Potresti ricordare che puoi usare la funzione Arduino analogRead() per misurare la tensione di una corrente elettrica dai sensori e così via usando uno dei pin di ingresso analogico. Il valore restituito da analogRead() sarebbe compreso tra zero e 1023, con zero che rappresenta zero volt e 1023 che rappresenta la tensione operativa della scheda Arduino in uso.
E quando diciamo la tensione operativa, questa è la tensione disponibile per Arduino dopo il circuito di alimentazione. Ad esempio, se hai una tipica scheda Arduino Uno e la esegui dalla presa USB - certo, ci sono 5 V disponibili per la scheda dalla presa USB sul tuo computer o hub - ma la tensione si riduce leggermente mentre la corrente si avvolge intorno al circuito al microcontrollore o la sorgente USB non è all'altezza.
Questo può essere facilmente dimostrato collegando un Arduino Uno a USB e mettendo un multimetro impostato per misurare la tensione attraverso i pin 5V e GND. Alcune schede torneranno a partire da 4,8 V, altre più alte ma ancora al di sotto di 5 V. Quindi, se stai cercando la precisione, alimenta la tua scheda da un alimentatore esterno tramite la presa CC o il pin Vin, ad esempio 9 V CC. Quindi, dopo aver attraversato il circuito del regolatore di potenza, avrai un bel 5V, ad esempio l'immagine.
Questo è importante in quanto la precisione di qualsiasi valore analogRead() sarà influenzata dal fatto che non si dispone di un vero 5 V. Se non si dispone di alcuna opzione, è possibile utilizzare alcuni calcoli nel disegno per compensare il calo di tensione. Ad esempio, se la tua tensione è 4,8 V, l'intervallo analogRead() di 0~1023 si riferirà a 0~4,8 V e non a 0~5 V. Questo può sembrare banale, tuttavia se stai usando un sensore che restituisce un valore come tensione (ad esempio il sensore di temperatura TMP36) - il valore calcolato sarà sbagliato. Quindi, per motivi di precisione, utilizzare un alimentatore esterno.
Passaggio 2: perché AnalogRead() restituisce un valore compreso tra 0 e 1023?
Ciò è dovuto alla risoluzione dell'ADC. La risoluzione (per questo articolo) è il grado in cui qualcosa può essere rappresentato numericamente. Maggiore è la risoluzione, maggiore è la precisione con cui è possibile rappresentare qualcosa. Misuriamo la risoluzione in termini di numero di bit di risoluzione.
Ad esempio, una risoluzione a 1 bit consentirebbe solo due valori (due alla potenza di uno): zero e uno. Una risoluzione a 2 bit consentirebbe quattro valori (da due alla potenza di due): zero, uno, due e tre. Se provassimo a misurare un intervallo di cinque volt con una risoluzione di due bit e la tensione misurata fosse di quattro volt, il nostro ADC restituirebbe un valore numerico di 3, poiché quattro volt cadono tra 3,75 e 5 V. È più facile immaginarlo con l'immagine.
Quindi con il nostro esempio ADC con risoluzione a 2 bit, può rappresentare solo la tensione con quattro possibili valori risultanti. Se la tensione di ingresso scende tra 0 e 1,25, l'ADC restituisce 0 numerico; se la tensione scende tra 1,25 e 2,5, l'ADC restituisce un valore numerico di 1. E così via. Con l'intervallo ADC del nostro Arduino di 0~1023 - abbiamo 1024 valori possibili - o 2 alla potenza di 10. Quindi i nostri Arduino hanno un ADC con una risoluzione a 10 bit.
Passaggio 3: quindi cos'è l'AREF?
Per farla breve, quando il tuo Arduino effettua una lettura analogica, confronta la tensione misurata sul pin analogico utilizzato con quella che è nota come tensione di riferimento. Nell'uso normale di AnalogRead, la tensione di riferimento è la tensione operativa della scheda.
Per le schede Arduino più diffuse come le schede Uno, Mega, Duemilanove e Leonardo/Yún, la tensione di esercizio è di 5V. Se hai una scheda Arduino Due, la tensione di esercizio è di 3,3V. Se hai qualcos'altro, controlla la pagina del prodotto Arduino o chiedi al fornitore della tua scheda.
Quindi, se hai una tensione di riferimento di 5V, ogni unità restituita da analogRead() è valutata a 0,00488 V. (Questo è calcolato dividendo 1024 in 5V). E se volessimo misurare tensioni tra 0 e 2, o 0 e 4.6? Come fa l'ADC a sapere qual è il 100% del nostro intervallo di tensione?
E qui sta il motivo del perno AREF. AREF significa Riferimento Analogico. Ci consente di alimentare l'Arduino con una tensione di riferimento da un alimentatore esterno. Ad esempio, se vogliamo misurare tensioni con un intervallo massimo di 3,3 V, inseriremo un bel 3,3 V uniforme nel pin AREF, forse da un circuito integrato del regolatore di tensione.
Quindi ogni passo dell'ADC rappresenterebbe circa 3,22 millivolt (dividi 1024 in 3,3). Nota che la tensione di riferimento più bassa che puoi avere è 1,1 V. Esistono due forme di AREF: interna ed esterna, quindi diamo un'occhiata.
Passaggio 4: AREF esterno
Un AREF esterno è il punto in cui fornisci una tensione di riferimento esterna alla scheda Arduino. Questo può provenire da un alimentatore regolato o, se hai bisogno di 3,3 V, puoi ottenerlo dal pin 3,3 V di Arduino. Se stai usando un alimentatore esterno, assicurati di collegare il GND al pin GND di Arduino. Oppure, se stai utilizzando la sorgente a 3,3 V di Arduno, esegui semplicemente un ponticello dal pin da 3,3 V al pin AREF.
Per attivare l'AREF esterno, utilizzare quanto segue in void setup():
analogReference(ESTERNO); // usa AREF per la tensione di riferimento
Questo imposta la tensione di riferimento a qualunque cosa tu abbia collegato al pin AREF - che ovviamente avrà una tensione compresa tra 1,1 V e la tensione di funzionamento della scheda. Nota molto importante - quando si utilizza un riferimento di tensione esterno, è necessario impostare il riferimento analogico su EXTERNAL prima di usare analogRead(). Ciò eviterà di cortocircuitare la tensione di riferimento interna attiva e il pin AREF, che può danneggiare il microcontrollore sulla scheda. Se necessario per la tua applicazione, puoi tornare alla tensione operativa della scheda per AREF (ovvero tornare alla normalità) con il seguente
analogReference(DEFAULT);
Ora per dimostrare l'AREF esterno al lavoro. Utilizzando un AREF da 3,3 V, il disegno seguente misura la tensione da A0 e visualizza la percentuale dell'AREF totale e la tensione calcolata:
#include "LiquidCrystal.h"
LCD a cristalli liquidi (8, 9, 4, 5, 6, 7);
int ingresso analogico = 0; // il nostro pin analogico
int valoreanalogico = 0; // memorizza il valore in ingresso float percentuale = 0; // usato per memorizzare il nostro valore percentuale float voltage =0; // usato per memorizzare il valore di tensione
configurazione nulla()
{ lcd.begin(16, 2); analogReference(ESTERNO); // usa AREF per la tensione di riferimento }
ciclo vuoto()
{ lcd.clear(); analogamount=analogRead(ingresso analogico); percentuale=(importoanalogico/1024,00)*100; tensione=quantitàanalogica*3.222; // in millivolt lcd.setCursor(0, 0); lcd.print("% di AREF: "); lcd.print(percentuale, 2); lcd.setCursor(0, 1); lcd.print("A0 (mV): "); lcd.println(tensione, 2); ritardo(250); }
I risultati dello schizzo sopra sono mostrati nel video.
Passaggio 5: AREF interno
I microcontrollori sulle nostre schede Arduino possono anche generare una tensione di riferimento interna di 1,1 V e possiamo usarla per il lavoro AREF. Usa semplicemente la riga:
analogReference(INTERNO);
Per le schede Arduino Mega, utilizzare:
analogReference(INTERNAL1V1);
in void setup() e sei fuori. Se hai un Arduino Mega è disponibile anche una tensione di riferimento di 2,56V che si attiva con:
analogReference(INTERNAL2V56);
Infine, prima di stabilire i risultati dal pin AREF, calibrare sempre le letture rispetto a un multimetro noto e funzionante.
Conclusione
La funzione AREF offre maggiore flessibilità nella misurazione dei segnali analogici.
Questo post ti è stato presentato da pmdway.com: tutto per i produttori e gli appassionati di elettronica, con consegna gratuita in tutto il mondo.
Consigliato:
Connettore ICSP per Arduino Nano senza intestazione pin saldata ma pin Pogo: 7 passaggi
Connettore ICSP per Arduino Nano senza intestazione pin saldata ma pin Pogo: crea un connettore ICSP per Arduino Nano senza intestazione pin saldata sulla scheda ma pin Pogo. - BP75-E2 (testa conica da 1,3 mm) Sonda per test a molla Pogo Pin
Rilevatore di metalli con puntatore pin Arduino fai da te: 3 passaggi
Rilevatore di metalli con puntatore pin Arduino fai-da-te: un metal detector tradizionale può localizzare un oggetto sepolto e darti una posizione approssimativa dell'oggetto al di sotto del terreno Un pinpointer ti consente di individuare la posizione di un oggetto, fare un buco più piccolo durante lo scavo ed estrarre l'oggetto . Inoltre, può
Display a 4 cifre e 7 segmenti 14 pin con Arduino: 3 passaggi
Display a 4 cifre e 7 segmenti a 14 pin con Arduino: è sempre una buona idea verificare se un dispositivo funziona correttamente o meno se quel componente ha un numero molto elevato di pin. In questo progetto, ho testato il mio display a 14 pin a 4 cifre e 7 segmenti. Tutti i 7 segmenti visualizzeranno da 0 a 9 contemporaneamente
Lego Arduino Nano Senza Alloggiamento Pin Header: 3 Passaggi
Lego Arduino Nano senza custodia per pin di intestazione: avevo bisogno di una custodia per il mio Arduino Nano che non avesse pin di intestazione saldati. Lo volevo bello e piccolo
Presa ISP da 6 pin a 8 pin: 4 passaggi
Presa ISP da 6 pin a 8 pin: il motivo per cui ho realizzato principalmente questo progetto era programmare l'ATTiny45, che ha una connessione a 8 pin, mentre il mio USBtinyISP (da Ladyada) ha solo una connessione a 10 pin e 6 pin. Dopo aver curiosato su Internet per circa 3-4 settimane non ho trovato nulla che