Den analoge AREF-reference | Arduino Shop and Tutorials

    • Opløsningen af ADC-konverterne.
    • De interne sammenligningsreferencer i Arduino.
    • Den eksterne AREF-reference.

Materiale påkrævet.

Spanien Spanien Mexico
UNO Starter Kit UNO Starter Kit
MEGA Starter Kit
MEGA Starter Kit MEGA Starter Kit MEGA Starter Kit MEGA Starter Kit MEGA Starter Kit

Analog til digital konvertering

I en tidligere session har vi allerede sagt, at Arduino har 6 analog til digital konvertere (ADC), som er pins A0 til A5, og vi sagde, at de er i stand til at konvertere spændingsværdier op til maksimalt 5V, som er referencespændingen på Arduino.

Vi sagde også, at en af de vigtigste egenskaber ved konverteren er antallet af bits, som definerer den finesse, hvormed vi kan kvantificere konverteringen til digitalt format. I Arduinos tilfælde er der 10 bit, som den håndterer i de analoge porte, hvilket betyder, at dens opløsning er 210 = 1.024 mulige værdier.

Jo højere denne opløsning er, jo bedre er dens evne til at tilnærme sig den reelle værdi, hvis omregning vi leder efter.

  • Det er vigtigt at forstå, at en konvertering til digitalt af et analogt signal altid er en tilnærmelse, og selv i det usandsynlige tilfælde, at den analoge værdi er præcis, hvad konverteren fortæller os, vil vi altid have en usikkerhed.
  • På en Arduino-konverter med 10-bit opløsning er hvert måleskridt 5V/1024 = 0,0048828125 V, lige under 5mV, hvilket betyder, at den ikke kan skelne mellem spændingsværdier, hvis forskel er mindre end dette.

Suden at gå for meget i detaljer er det værd at sige, at det, en ADC-konverter gør, er at sammenligne det signal, som vi ønsker at kvantificere ved indgangen, med en referencespænding, som den sammenligner med.

Med andre ord giver en ADC ikke absolutte værdier, men en kvantificeret sammenligning i forhold til en referenceværdi. Så i TMP36-temperatursensor-sessionen har vi beregnet indgangsspændingen på en af de analoge pins som aflæsningen ganget med et forhold mellem den maksimale værdi af 5V-indgangen og den maksimale værdi målt af 1024-konverteren.

Da de signaler, vi normalt håndterer på Arduino, ligger omkring 5V, er det rimeligt at sammenligne med 5V, fordi industrien også har en lang række sensorer, hvis maksimale værdi returnerer 5V.

Men i stigende grad producerer industrien 3,3V-elektronik, Arduino DUE selv er et eksempel herpå, og hvis vi bruger vores ADC’er til at digitalisere spidsværdier af 3,3V-signaler, mister vi nøjagtighed og opløsning, fordi vi spilder en del af de mulige sammenligninger, faktisk en tredjedel.

I praksis betyder det, at 3,3 V er den maksimale indgangsspænding i forhold til 5 V, at vi aldrig vil få aflæsninger, der er større end 1.024 * 3,3 /5 = 675, og vi vil stadig have 5 5 V indgangstrin.

Men hvis konverteren er en spændingskomparator, hvis vi kunne ændre den spændingsværdi, vi sammenligner med, til 3,3 V, ville trinene være 3,3 V/1024 = 0,00322265625 eller 3,2 mV. Det vil sige, at vi har forbedret opløsningen af vores konverter uden at bruge en krone.

Så i en ideel situation bør den sammenligningsspænding, som vi udfører konverteringen fra analog til digital, være den maksimalt mulige værdi af indgangssignalet. For det er der, vi får den bedst mulige opløsning med denne konverter.

Arduino-fyrene var opmærksomme på dette problem, og derfor har de inkluderet en ekstern pin, som vi ikke har brugt før nu, og som gør det muligt at tilslutte en ekstern referencespænding, som det signal, vi aflæser på vores A0 til A5-gates, sammenlignes med.

Denne pin er mærket AREF (Analog Reference) og ligger to pins over den digitale pin 13:

Anvendelse af den eksterne analoge reference

Spørgsmålet om den analoge reference, som vi sammenligner prøverne i gate A0-A6 med, er så vigtigt, at Arduino har flere interne spændinger at sammenligne med, som vi kan aktivere for at ændre referencen.

For at aktivere en 1,1V intern reference på en Arduino UNO skal du bruge instruktionen

analogReference(INTERNAL);

Hvis du i stedet bruger en MEGA, kan du udelukkende bruge:

analogReference(INTERNAL1V1);
analogReference(INTERNAL2V56);

som vil aktivere henholdsvis 1,1V og 2,56V referencer.

Hvis du bruger DEFAULT-tasten, er du tilbage til standard 5V-referencen på stort set alle Arduino-modeller.

analogReference(DEFAULT);
  • Bekymr dig om DEFAULT-referencen, for på DUE betyder den 3,3V, fordi det er dens referencespænding. Sørg for dette, før du bruger den.

Når vi tilslutter en referencespænding til AREF-pinden, skal vi fortælle Arduino’en, at vi ønsker at bruge den. Og det gør vi med instruktionen

analogReference(EXTERNAL);

Brug hovedet, når du ændrer den analoge reference, for hvis du ikke er forsigtig, spiser du Arduino til middag. Det er relativt nemt at lave rod med visse handlinger, der virker uskyldige:

  • Sørg for, at hvis du bruger en ekstern reference, at Arduinoens og referencens GND’er er de samme ved at forbinde dem sammen. Hvis du ikke gør dette, har du en meget dårlig prognose ved den første ændring.
  • Brug under ingen omstændigheder mindre end 0v på AREF-stiften (ELLER et signal, der varierer og kan have negative transienter), da resultatet er uforudsigeligt.
  • Hvis du tilslutter en ekstern referencespænding, må du ikke kalde analogRead(), før du udfører analogReference(EXTERNAL)-instruktionen, fordi du vil kortslutte det interne sammenligningssignal til den eksterne spænding ved AREF og muligvis benytte lejligheden til at købe den nye Arduino, som du er så ivrig efter at købe.
  • Forbind ikke AREF med mindre end 1V eller mere end 5V, du kan ikke bare indstille 12 og forvente, at den giver dig en værdi.

Testkredsløb

Vi vil opsætte et testkredsløb med et I2C-display, som vi så i sessionen… og et potentiometer. Men denne gang vil vi forbinde potentiometerets ender med GND og 3,3V, så den centrale pin, som vi vil aflæse med A1, aldrig kan overstige 3,3V, hvilket simulerer en sensor med denne maksimale værdi.

Når vi drejer på potentiometeret, vil vi aflæse et spændingsfald mellem 0V og 3,3V. og aflæsningen af A1-pinden vil give værdier mellem 0 og 670, da vi befinder os i det tilfælde, som vi definerede lidt ovenfor.

Programmet vil blot aflæse A1-analogpinden og sende dens værdi til et I2C-display med 16 tegn på to linjer, som vi så i sessionen….

Indholdet er kun tilgængeligt for abonnenter. Få adgang til indholdet!

Her er en mini-video med potentiometeraflæsningerne

Hvis vi nu tilslutter Arduinos interne 3,3V spænding til AREF-pinden, får vi et kredsløb som dette:

Lad os se programmet nu:

Her er en video med forskellen:

Sessionsresumé

I dette arduinkursus har vi lært følgende:

    • Vi har insisteret på spørgsmålet om den analoge til digitale konvertering, og vi har set, at det grundlæggende er en sammenligning i forhold til en referenceværdi.
    • Vi har set, at vi kan bruge en intern eller ekstern spændingsværdi ud over den sædvanlige 5V.
    • Vi kender nu de præcise instruktioner til at aktivere den eksterne reference og de forholdsregler, der skal tages ved brug af den.