Innholdsfortegnelse:

Arduino AREF Pin: 6 trinn
Arduino AREF Pin: 6 trinn

Video: Arduino AREF Pin: 6 trinn

Video: Arduino AREF Pin: 6 trinn
Video: Уроки Arduino #10 - потенциометры и аналоговые пины 2024, Juli
Anonim
Arduino AREF -pinnen
Arduino AREF -pinnen

I denne opplæringen ser vi på hvordan du kan måle mindre spenninger med større nøyaktighet ved å bruke de analoge inngangspinnene på Arduino eller kompatible brett i forbindelse med AREF -pinnen. Imidlertid vil vi først gjøre en revisjon for å få deg i gang. Vennligst les dette innlegget helt før du arbeider med AREF første gang.

Trinn 1: Revisjon

Revisjon!
Revisjon!

Du husker kanskje at du kan bruke Arduino analogRead () -funksjonen til å måle spenningen til en elektrisk strøm fra sensorer og så videre ved å bruke en av de analoge inngangspinnene. Verdien som returneres fra analogRead () vil være mellom null og 1023, med null som representerer null volt og 1023 som representerer driftsspenningen til Arduino -kortet i bruk.

Og når vi sier driftsspenningen - dette er spenningen som er tilgjengelig for Arduino etter strømforsyningskretsen. For eksempel, hvis du har et typisk Arduino Uno -kort og kjører det fra USB -kontakten - det er sikkert 5V tilgjengelig for kortet fra USB -kontakten på datamaskinen eller huben - men spenningen reduseres noe når strømmen snor seg rundt krets til mikrokontrolleren - eller USB -kilden er bare ikke helt klar.

Dette kan enkelt demonstreres ved å koble en Arduino Uno til USB og sette et multimeter sett for å måle spenning over 5V- og GND -pinnene. Noen brett kommer tilbake så lavt som 4,8 V, noen høyere, men fortsatt under 5V. Så hvis du søker nøyaktighet, må du koble kortet fra en ekstern strømforsyning via DC -kontakten eller Vin -pin - for eksempel 9V DC. Deretter får du en fin 5V, for eksempel bildet etter at det går gjennom effektregulatorkretsen.

Dette er viktig ettersom nøyaktigheten til noen analoge Read () -verdier påvirkes av å ikke ha en ekte 5 V. Hvis du ikke har noe alternativ, kan du bruke noen matematikk i skissen for å kompensere for spenningsfallet. For eksempel, hvis spenningen er 4,8V - vil analogRead () -området på 0 ~ 1023 forholde seg til 0 ~ 4,8V og ikke 0 ~ 5V. Dette kan høres trivielt ut, men hvis du bruker en sensor som returnerer en verdi som en spenning (f.eks. TMP36 temperatursensoren) - vil den beregnede verdien være feil. Så av hensyn til nøyaktigheten, bruk en ekstern strømforsyning.

Trinn 2: Hvorfor returnerer AnalogRead () en verdi mellom 0 og 1023?

Hvorfor gir AnalogRead () en verdi mellom 0 og 1023?
Hvorfor gir AnalogRead () en verdi mellom 0 og 1023?

Dette skyldes oppløsningen til ADC. Oppløsningen (for denne artikkelen) er i hvilken grad noe kan representeres numerisk. Jo høyere oppløsning, desto større nøyaktighet kan noe representeres med. Vi måler oppløsning i form av antall oppløsningsbiter.

For eksempel vil en 1-bits oppløsning bare tillate to (to til en) effekt-null og en. En 2-biters oppløsning tillater fire (to til to) to verdier-null, en, to og tre. Hvis vi prøvde å måle et område på fem volt med en to-bits oppløsning, og den målte spenningen var fire volt, ville ADC-en vår returnere en numerisk verdi på 3-ettersom fire volt faller mellom 3,75 og 5V. Det er lettere å forestille seg dette med bildet.

Så med vårt eksempel ADC med 2-biters oppløsning, kan det bare representere spenningen med fire mulige resulterende verdier. Hvis inngangsspenningen faller mellom 0 og 1,25, returnerer ADC numerisk 0; hvis spenningen faller mellom 1,25 og 2,5, returnerer ADC en tallverdi på 1. Og så videre. Med vår Arduinos ADC-område på 0 ~ 1023-har vi 1024 mulige verdier-eller 2 til effekten 10. Så våre Arduinoer har en ADC med en 10-biters oppløsning.

Trinn 3: Så hva er AREF?

For å gjøre en lang historie kort, når din Arduino tar en analog avlesning, sammenligner den spenningen målt ved den analoge pinnen som brukes mot det som er kjent som referansespenningen. Ved normal analogLes -bruk er referansespenningen styrets driftsspenning.

For de mer populære Arduino -kortene som Uno, Mega, Duemilanove og Leonardo/Yún -kortene, er driftsspenningen på 5V. Hvis du har et Arduino Due -kort, er driftsspenningen 3,3V. Hvis du har noe annet - sjekk Arduino -produktsiden eller spør din brettleverandør.

Så hvis du har en referansespenning på 5V, er hver enhet returnert av analogRead () verdsatt til 0,00488 V. (Dette beregnes ved å dele 1024 i 5V). Hva om vi vil måle spenninger mellom 0 og 2, eller 0 og 4,6? Hvordan ville ADC vite hva som er 100% av spenningsområdet vårt?

Og der ligger årsaken til AREF -pinnen. AREF betyr analog referanse. Det lar oss mate Arduino en referansespenning fra en ekstern strømforsyning. For eksempel, hvis vi vil måle spenninger med et maksimalområde på 3,3V, ville vi mate en fin, jevn 3.3V inn i AREF -pinnen - kanskje fra en spenningsregulator IC.

Da vil hvert trinn i ADC representere rundt 3,22 millivolt (dele 1024 i 3,3). Vær oppmerksom på at den laveste referansespenningen du kan ha er 1.1V. Det er to former for AREF - internt og eksternt, så la oss sjekke dem ut.

Trinn 4: Ekstern AREF

En ekstern AREF er hvor du leverer en ekstern referansespenning til Arduino -kortet. Dette kan komme fra en regulert strømforsyning, eller hvis du trenger 3,3V kan du få det fra Arduino's 3.3V -pin. Hvis du bruker en ekstern strømforsyning, må du koble GND til Arduino's GND -pinne. Eller hvis du bruker Ardunos 3.3V -kilde - bare kjør en jumper fra 3.3V -pinnen til AREF -pinnen.

For å aktivere det eksterne AREF, bruk følgende i oppsett av tomrom ():

analogReference (EXTERNAL); // bruk AREF for referansespenning

Dette setter referansespenningen til det du har koblet til AREF -pinnen - som selvfølgelig vil ha en spenning mellom 1.1V og brettets driftsspenning. Veldig viktig merknad - når du bruker en ekstern spenningsreferanse, må du sette den analoge referansen til EKSTERN før du bruker analogRead (). Dette forhindrer deg i å kortslutte den aktive interne referansespenningen og AREF -pinnen, noe som kan skade mikrokontrolleren på kortet. Om nødvendig for søknaden din, kan du gå tilbake til brettets driftsspenning for AREF (det vil si - tilbake til det normale) med følgende

analogReference (DEFAULT);

Nå for å demonstrere ekstern AREF på jobb. Ved hjelp av en 3.3V AREF måler følgende skisse spenningen fra A0 og viser prosentandelen av total AREF og den beregnede spenningen:

#include "LiquidCrystal.h"

LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

int analoginput = 0; // vår analoge pin

int analogbeløp = 0; // lagrer flyteprosent for innkommende verdi = 0; // brukes til å lagre vår prosentvise verdi flytespenning = 0; // brukes til å lagre spenningsverdi

ugyldig oppsett ()

{lcd.begin (16, 2); analogReference (EXTERNAL); // bruk AREF for referansespenning}

hulrom ()

{lcd.clear (); analogamount = analogRead (analoginngang); prosent = (analogt beløp/1024,00)*100; spenning = analogt beløp*3,222; // i millivolt lcd.setCursor (0, 0); lcd.print ("% av AREF:"); lcd.print (prosentandel, 2); lcd.setCursor (0, 1); lcd.print ("A0 (mV):"); lcd.println (spenning, 2); forsinkelse (250); }

Resultatene av skissen ovenfor er vist i videoen.

Trinn 5: Intern AREF

Mikrokontrollerne på våre Arduino -kort kan også generere en intern referansespenning på 1.1V, og vi kan bruke dette til AREF -arbeid. Bare bruk linjen:

analogReference (INTERNAL);

For Arduino Mega boards, bruk:

analogReference (INTERNAL1V1);

i ugyldig oppsett (), og du er av. Hvis du har en Arduino Mega, er det også en 2,56V referansespenning tilgjengelig som aktiveres med:

analogReference (INTERNAL2V56);

Til slutt - før du bestemmer deg for resultatene fra AREF -pinnen, må du alltid kalibrere avlesningene mot et kjent godt multimeter.

Konklusjon

AREF -funksjonen gir deg mer fleksibilitet med måling av analoge signaler.

Dette innlegget ble brakt til deg av pmdway.com - alt for produsenter og elektronikkentusiaster, med gratis levering over hele verden.

Anbefalt: