Inhoudsopgave:

De Arduino AREF-pin - Ajarnpa
De Arduino AREF-pin - Ajarnpa

Video: De Arduino AREF-pin - Ajarnpa

Video: De Arduino AREF-pin - Ajarnpa
Video: Demonstrating the Arduino's external AREF pin 2024, Juli-
Anonim
De Arduino AREF-pin
De Arduino AREF-pin

In deze tutorial bekijken we hoe je kleinere spanningen nauwkeuriger kunt meten met behulp van de analoge ingangspinnen op je Arduino of compatibele kaart in combinatie met de AREF-pin. Maar eerst zullen we wat revisie doen om je op de hoogte te houden. Lees dit bericht a.u.b. volledig door voordat u voor het eerst met AREF gaat werken.

Stap 1: Revisie

Herziening!
Herziening!

U herinnert zich misschien dat u de Arduino-functie analogRead() kunt gebruiken om de spanning van een elektrische stroom van sensoren enzovoort te meten met behulp van een van de analoge ingangspinnen. De waarde die wordt geretourneerd door analogRead() zou tussen nul en 1023 liggen, waarbij nul nul volt vertegenwoordigt en 1023 de bedrijfsspanning van het gebruikte Arduino-bord vertegenwoordigt.

En als we de bedrijfsspanning zeggen, is dit de spanning die beschikbaar is voor de Arduino na het voedingscircuit. Als je bijvoorbeeld een typisch Arduino Uno-bord hebt en het via de USB-aansluiting gebruikt – er is zeker 5V beschikbaar voor het bord via de USB-aansluiting op je computer of hub – maar de spanning wordt iets verlaagd naarmate de stroom rond de circuit naar de microcontroller - of de USB-bron is gewoon niet op orde.

Dit kan eenvoudig worden aangetoond door een Arduino Uno op USB aan te sluiten en een multimeterset te plaatsen om de spanning over de 5V- en GND-pinnen te meten. Sommige boards komen terug tot slechts 4,8 V, sommige hoger maar nog steeds onder de 5V. Dus als je op zoek bent naar nauwkeurigheid, voed je board dan via een externe voeding via de DC-aansluiting of Vin-pin, zoals 9V DC. Dan gaat dat door het stroomregelaarcircuit en heb je een mooie 5V, bijvoorbeeld het beeld.

Dit is belangrijk omdat de nauwkeurigheid van alle analogRead()-waarden wordt beïnvloed door het ontbreken van een echte 5 V. Als je geen optie hebt, kun je wat wiskunde in je schets gebruiken om de spanningsdaling te compenseren. Als uw spanning bijvoorbeeld 4,8 V is, heeft het analogeRead()-bereik van 0~1023 betrekking op 0~4,8V en niet op 0~5V. Dit klinkt misschien triviaal, maar als u een sensor gebruikt die een waarde als spanning retourneert (bijv. de TMP36-temperatuursensor), is de berekende waarde verkeerd. Gebruik daarom voor de nauwkeurigheid een externe voeding.

Stap 2: Waarom retourneert AnalogRead() een waarde tussen 0 en 1023?

Waarom retourneert AnalogRead() een waarde tussen 0 en 1023?
Waarom retourneert AnalogRead() een waarde tussen 0 en 1023?

Dit komt door de resolutie van de ADC. De resolutie (voor dit artikel) is de mate waarin iets numeriek kan worden weergegeven. Hoe hoger de resolutie, hoe nauwkeuriger iets kan worden weergegeven. We meten resolutie in termen van het aantal bits resolutie.

Een resolutie van 1 bit zou bijvoorbeeld slechts twee (twee tot de macht van één) waarden toestaan - nul en één. Een 2-bits resolutie zou vier (twee tot de macht van twee) waarden toestaan: nul, één, twee en drie. Als we zouden proberen een bereik van vijf volt te meten met een resolutie van twee bits, en de gemeten spanning was vier volt, zou onze ADC een numerieke waarde van 3 retourneren - aangezien vier volt tussen 3,75 en 5V valt. Het is gemakkelijker om je dit voor te stellen met het beeld.

Dus met ons voorbeeld-ADC met een resolutie van 2 bits, kan het alleen de spanning weergeven met vier mogelijke resulterende waarden. Als de ingangsspanning tussen 0 en 1,25 valt, geeft de ADC de numerieke 0 terug; als de spanning tussen 1,25 en 2,5 valt, retourneert de ADC een numerieke waarde van 1. En zo verder. Met het ADC-bereik van onze Arduino van 0 ~ 1023 - we hebben 1024 mogelijke waarden - of 2 tot de macht 10. Onze Arduino's hebben dus een ADC met een resolutie van 10 bits.

Stap 3: Dus wat is AREF?

Om een lang verhaal kort te maken: wanneer uw Arduino een analoge meting uitvoert, vergelijkt hij de spanning die wordt gemeten op de analoge pin die wordt gebruikt met wat bekend staat als de referentiespanning. Bij normaal gebruik van analogRead is de referentiespanning de bedrijfsspanning van de kaart.

Voor de meer populaire Arduino boards zoals de Uno, Mega, Duemilanove en Leonardo/Yún boards is de bedrijfsspanning 5V. Als je een Arduino Due-bord hebt, is de bedrijfsspanning 3,3V. Als je iets anders hebt, kijk dan op de Arduino-productpagina of vraag het aan je bordleverancier.

Dus als je een referentiespanning van 5V hebt, wordt elke eenheid die wordt geretourneerd door analogRead() gewaardeerd op 0,00488 V. (Dit wordt berekend door 1024 te delen in 5V). Wat als we spanningen tussen 0 en 2, of 0 en 4,6 willen meten? Hoe zou de ADC weten wat 100% van ons spanningsbereik is?

En daarin ligt de reden voor de AREF-pin. AREF betekent Analoge REFERENTIE. Het stelt ons in staat om de Arduino een referentiespanning van een externe voeding te voeden. Als we bijvoorbeeld spanningen willen meten met een maximaal bereik van 3,3V, zouden we een mooie soepele 3,3V in de AREF-pin voeren - misschien van een spanningsregelaar-IC.

Dan zou elke stap van de ADC ongeveer 3,22 millivolt vertegenwoordigen (verdeel 1024 in 3,3). Merk op dat de laagste referentiespanning die u kunt hebben 1,1 V is. Er zijn twee vormen van AREF - intern en extern, dus laten we ze eens bekijken.

Stap 4: Externe AREF

Een externe AREF is waar u een externe referentiespanning aan het Arduino-bord levert. Dit kan afkomstig zijn van een gereguleerde voeding, of als je 3.3V nodig hebt, kun je het krijgen van de 3.3V-pin van de Arduino. Als u een externe voeding gebruikt, zorg er dan voor dat u de GND aansluit op de GND-pin van de Arduino. Of als u de 3.3V-bron van de Arduno gebruikt, voert u gewoon een jumper uit van de 3.3V-pin naar de AREF-pin.

Om de externe AREF te activeren, gebruikt u het volgende in void setup():

analogeReferentie (EXTERN); // gebruik AREF voor referentiespanning

Dit stelt de referentiespanning in op alles wat u hebt aangesloten op de AREF-pin - die natuurlijk een spanning heeft tussen 1,1 V en de bedrijfsspanning van het bord. Zeer belangrijke opmerking - wanneer u een externe spanningsreferentie gebruikt, moet u de analoge referentie instellen op EXTERN voordat u analogRead() gebruikt. Dit voorkomt dat u de actieve interne referentiespanning en de AREF-pin kortsluit, wat de microcontroller op het bord kan beschadigen. Indien nodig voor uw toepassing, kunt u terugkeren naar de bedrijfsspanning van de kaart voor AREF (dat wil zeggen - terug naar normaal) met het volgende

analogeReferentie (STANDAARD);

Nu externe AREF aan het werk demonstreren. Met behulp van een 3,3V AREF meet de volgende schets de spanning van A0 en geeft het percentage van de totale AREF en de berekende spanning weer:

#include "LiquidCrystal.h"

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

int analoge ingang = 0; // onze analoge pin

int analoog bedrag = 0; // slaat inkomende waarde float percentage = 0 op; // gebruikt om onze procentuele float-spanning = 0 op te slaan; // gebruikt om de spanningswaarde op te slaan

ongeldige setup()

{ lcd.begin (16, 2); analogeReferentie (EXTERN); // gebruik AREF voor referentiespanning}

lege lus()

{ lcd.wissen(); analogamount=analogRead (analoge invoer); percentage=(analoogbedrag/1024,00)*100; spanning=analoge hoeveelheid*3.222; // in millivolt lcd.setCursor (0, 0); lcd.print("% van AREF: "); lcd.print(percentage, 2); lcd.setCursor(0, 1); lcd.print("A0 (mV): "); lcd.println(spanning, 2); vertraging (250); }

De resultaten van de bovenstaande schets worden getoond in de video.

Stap 5: Interne AREF

De microcontrollers op onze Arduino-boards kunnen ook een interne referentiespanning van 1,1 V genereren en deze kunnen we gebruiken voor AREF-werk. Gebruik gewoon de regel:

analogeReferentie (INTERN);

Gebruik voor Arduino Mega-kaarten:

analogeReferentie(INTERN1V1);

in void setup() en je bent vertrokken. Als je een Arduino Mega hebt, is er ook een referentiespanning van 2,56V beschikbaar die wordt geactiveerd met:

analogeReferentie (INTERNAL2V56);

Ten slotte - voordat u de resultaten van uw AREF-pin afrekent, moet u de metingen altijd kalibreren met een bekende goede multimeter.

Conclusie

De AREF-functie geeft je meer flexibiliteit bij het meten van analoge signalen.

Dit bericht aangeboden door pmdway.com - alles voor makers en elektronica-enthousiastelingen, met gratis levering wereldwijd.

Aanbevolen: