The AREF analog reference | Arduino Shop and Tutorials
Objectives
-
- De resolutie van de ADC-converters.
- De interne vergelijkingsreferenties in Arduino.
- De externe AREF-referentie.
Nodig materiaal.
Spanje | Mexico | ||
---|---|---|---|
UNO Starter Kit | UNO Starter Kit | ||
MEGA Starter Kit | |||
MEGA Starter Kit | MEGA Starter Kit | MEGA Starter Kit | MEGA Starter Kit |
De analoog/digitaal-conversie
In een vorige sessie hebben we al gezegd dat Arduino 6 analoog/digitaal-converters (ADC) heeft, die pinnen A0 tot A5 zijn, en we zeiden dat ze spanningswaarden kunnen omzetten tot een maximum van 5V, wat de referentiespanning op de Arduino is.
Wij hebben ook gezegd dat een van de hoofdkenmerken van de convertor het aantal bits is, dat de fijnheid bepaalt waarmee wij die omzetting in digitaal kunnen kwantificeren. In het geval van de Arduino zijn er 10 bits die hij verwerkt in de analoge poorten, hetgeen betekent dat zijn resolutie 210 =1.024 mogelijke waarden bedraagt.
Hoe hoger deze resolutie is, des te beter is het vermogen om de werkelijke waarde te benaderen waarvan we de omzetting zoeken.
- Het is belangrijk te begrijpen dat een omzetting naar digitaal van een analoog signaal altijd een benadering is, en zelfs in het onwaarschijnlijke geval dat de analoge waarde precies is wat de convertor ons vertelt, zullen we altijd een onzekerheid hebben.
- Op een Arduino-omzetter met 10-bits resolutie is elke meetstap 5V/1024 = 0,0048828125 V, iets minder dan 5mV, wat betekent dat hij geen onderscheid kan maken tussen spanningswaarden waarvan het verschil kleiner is dan dit.
Zonder al te veel in detail te treden, is het de moeite waard te zeggen dat wat een ADC-omzetter doet, is het signaal dat we willen kwantificeren aan de ingang, achtereenvolgens vergelijken met een referentiespanning waartegen hij vergelijkingen maakt.
Met andere woorden, een ADC levert geen absolute waarden, maar levert een gekwantificeerde vergelijking ten opzichte van een referentiewaarde. Dus, in de TMP36 Temperatuursensor sessie, hebben we de ingangsspanning op een van de Analoge pinnen berekend als de meting vermenigvuldigd met een verhouding van de maximum waarde van de 5V ingang tot het maximum gemeten door de 1024 converter.
Aangezien de signalen die we normaal op de Arduino verwerken rond 5V liggen, is vergelijken met 5V het redelijkste om te doen, omdat de industrie ook een hele reeks sensoren heeft waarvan de maximum waarde 5V teruggeeft.
Maar in toenemende mate produceert de industrie 3,3V elektronica, de Arduino DUE zelf is daar een voorbeeld van, en als we onze ADC’s gebruiken om piek 3,3V signalen te digitaliseren, verliezen we aan nauwkeurigheid en resolutie, omdat we een deel van de mogelijke vergelijkingen verspillen, in feite een derde.
In de praktijk betekent 3,3V als maximale ingangsspanning ten opzichte van 5V dat we nooit metingen groter dan 1.024 * 3,3 /5 = 675 zullen hebben en dat we nog steeds ingangsstappen van 5mV zullen hebben.
Maar als de converter een spanningsvergelijker is, als we de spanningswaarde waarmee we vergelijken zouden kunnen veranderen in 3,3V, zouden de stappen 3,3V/1024 = 0,00322265625 of 3,2 mV zijn. Dat wil zeggen dat wij de resolutie van onze convertor hebben verbeterd en dat zonder een cent uit te geven.
Dus in een ideale situatie moet de vergelijkingsspanning waartegen wij de conversie van analoog naar digitaal uitvoeren, de maximaal mogelijke waarde van het ingangssignaal zijn. Want dan hebben we de best mogelijke resolutie met die convertor.
De jongens van Arduino waren zich bewust van dit probleem en daarom hebben ze een externe pin toegevoegd, die we tot nu toe nog niet hadden gebruikt, waarmee je een externe referentiespanning kunt aansluiten, waarmee het signaal dat we aflezen op onze A0 tot A5 poorten zal worden vergeleken.
Deze pen is gelabeld als AREF (Analoge Referentie) en bevindt zich twee pinnen boven de digitale pen 13:
Gebruik van de externe analoge referentie
De kwestie van de analoge referentie waartegen we de samples in gates A0-A6 vergelijken is zo belangrijk dat de Arduino verschillende interne spanningen levert om mee te vergelijken die we kunnen activeren om de referentie te wijzigen.
Om een 1.1V interne referentie op een Arduino UNO te activeren gebruikt u de instructie
analogReference(INTERNAL);
Als u een MEGA gebruikt kunt u exclusief gebruiken:
analogReference(INTERNAL1V1);
analogReference(INTERNAL2V56);
Waardoor respectievelijk 1.1V en 2.56V referenties geactiveerd worden.
Als u de DEFAULT-toets gebruikt, bent u terug bij de standaard 5V-referentie op vrijwel alle Arduino-modellen.
analogReference(DEFAULT);
- Waarschuw de DEFAULT-referentie, want op de DUE betekent dit 3,3V omdat dat zijn referentiespanning is. Wees hier zeker van voor je het gelukkig gebruikt.
Wanneer we een referentiespanning aansluiten op de AREF pin, moeten we de Arduino vertellen dat we deze willen gebruiken. En dat doen we met de instructie
analogReference(EXTERNAL);
Gebruik je hoofd bij het modificeren van de analoge referentie, want als je niet oppast, eet je Arduino als avondeten. Het is relatief eenvoudig om te knoeien met bepaalde acties die onschuldig lijken:
- Zorg ervoor dat als je een externe referentie gebruikt dat de GND’s van de Arduino en de referentie hetzelfde zijn door ze aan elkaar te koppelen. Dit niet doen heeft een zeer slechte prognose bij de eerste verandering.
- Gebruik in geen geval minder dan 0v op de AREF pin (OF een signaal dat varieert en negatieve transiënten kan hebben) omdat het resultaat onvoorspelbaar is.
- Als u een externe referentiespanning aansluit, roep dan niet analogRead() op voordat u de instructie analogReference(EXTERNAL) uitvoert, want u zult het interne vergelijkingssignaal kortsluiten met de externe spanning op AREF, en mogelijk van de gelegenheid gebruik maken om die nieuwe Arduino te kopen die u zo graag wilt kopen.
- Niet aansluiten op AREF minder dan 1V of meer dan 5V, je kunt niet zomaar 12 instellen en verwachten dat het je een waarde geeft.
Testcircuit
We gaan een testcircuit opzetten met een I2C display zoals we in de sessie hebben gezien.. en een potentiometer. Maar deze keer zullen we aan de uiteinden van de potentiometer GND en 3.3V aansluiten, zodat de centrale pin die we met A1 zullen aflezen, nooit boven de 3.3V kan komen, waarmee we een sensor met die maximale waarde simuleren.
Als we de potentiometer draaien, zullen we een spanningsval aflezen tussen 0V en 3.3V. en het lezen van de A1 pin, zal waarden geven tussen 0 en 670, aangezien we in het geval zijn dat we hierboven gedefinieerd hebben.
Het programma zal gewoon de A1 analoge pin lezen en de waarde naar een I2C display sturen van 16 karakters bij twee lijnen zoals we zagen in de sessie….
Hier is een mini-video met de potentiometerstanden
Als we nu de interne 3,3V spanning van de Arduino aansluiten op de AREF pin, krijgen we een schakeling als deze:
Laten we nu het programma zien:
Hier is een video met het verschil:
Samenvatting
In deze arduino-cursus hebben we het volgende geleerd:
-
- We hebben de kwestie van de analoog-digitaal-conversie aangekaart en we hebben gezien dat het in principe gaat om een vergelijking met een referentiewaarde.
- We hebben gezien dat we een interne of externe spanningswaarde kunnen gebruiken, anders dan de gebruikelijke 5V.
- We weten nu de precieze instructies om die externe referentie te activeren en de voorzorgsmaatregelen die we moeten nemen bij het gebruik ervan.