ESP32 ADC - Analoge waarden lezen met Arduino IDE

Esp32 Adc Analoge Waarden Lezen Met Arduino Ide



ADC (analoog naar digitaal converter) is een elektronisch circuit dat wordt geleverd met verschillende microcontrollerkaarten of is geïntegreerd in de microcontroller. ADC wordt gebruikt om de analoge spanning van verschillende sensoren om te zetten in digitale vorm. Net als Arduino heeft ESP32 ook een ADC die analoge gegevens kan lezen. Laten we meer te weten komen over ESP32 ADC.

ESP32 ADC Inleiding:

Het ESP32-bord heeft twee geïntegreerde 12-bits ADC's, ook wel SAR-ADC's (Successive Approximation Registers) genoemd. De ESP32-kaart-ADC's ondersteunen 18 verschillende analoge ingangskanalen, wat betekent dat we 18 verschillende analoge sensoren kunnen aansluiten om er input van te krijgen.

Maar dit is hier niet het geval; deze analoge kanalen zijn onderverdeeld in twee categorieën kanaal 1 en kanaal 2, beide kanalen hebben enkele pinnen die niet altijd beschikbaar zijn voor ADC-invoer. Laten we eens kijken wat die ADC-pinnen zijn, samen met anderen.







ESP32 ADC-pinnen

Zoals eerder vermeld heeft het ESP32-bord 18 ADC-kanalen. Van de 18 zijn er slechts 15 beschikbaar in het DEVKIT V1 DOIT-bord met in totaal 30 GPIO's.



Kijk naar je bord en identificeer de ADC-pinnen zoals we ze in de onderstaande afbeelding hebben gemarkeerd:







Kanaal 1 ADC-pinnen

Hieronder volgt de gegeven pintoewijzing van het ESP32 DEVKIT DOIT-bord. ADC1 in ESP32 heeft 8 kanalen, maar het DOIT DEVKIT-bord ondersteunt slechts 6 kanalen. Maar ik garandeer je dat deze nog steeds meer dan genoeg zijn.

ADC1 GPIO-PIN ESP32
CH0 36
CH1 NA in 30-pins versie ESP32 (Devkit MOET)
CH2 DAT
CH3 39
CH4 32
CH5 33
CH6 3. 4
CH7 35

De volgende afbeelding toont ESP32 ADC1-kanalen:



Kanaal 2 ADC-pinnen

DEVKIT DOIT-kaarten hebben 10 analoge kanalen in ADC2. Hoewel ADC2 10 analoge kanalen heeft om analoge gegevens te lezen, zijn deze kanalen niet altijd beschikbaar voor gebruik. ADC2 wordt gedeeld met wifi-stuurprogramma's aan boord, wat betekent dat op het moment dat het bord wifi gebruikt, deze ADC2 niet beschikbaar is. De oplossing voor dit probleem is om ADC2 alleen te gebruiken als het Wi-Fi-stuurprogramma is uitgeschakeld.

Onderstaande afbeelding toont pin-toewijzing van ADC2-kanaal.

Hoe ESP32 ADC te gebruiken

ESP32 ADC werkt op dezelfde manier als Arduino, het enige verschil is dat het 12 bit ADC heeft. Dus het ESP32-bord brengt de analoge spanningswaarden van 0 tot 4095 in digitale discrete waarden in kaart.

  • Als de spanning die wordt gegeven aan ESP32 ADC nul is, is een ADC-kanaal de digitale waarde nul.
  • Als de aan ADC gegeven spanning maximaal 3,3 V is, is de digitale uitvoerwaarde gelijk aan 4095.
  • Om een ​​hogere spanning te meten, kunnen we de spanningsdelermethode gebruiken.

Opmerking: ESP32 ADC is standaard ingesteld op 12-bits, maar het is mogelijk om het te configureren in 0-bit, 10-bit en 11-bit. De 12-bits standaard ADC kan de waarde meten 2^12=4096 en de analoge spanning varieert van 0V tot 3,3V.

ADC-beperking op ESP32

Hier zijn enkele beperkingen van ESP32 ADC:

  • ESP32 ADC kan geen spanning van meer dan 3,3 V rechtstreeks meten.
  • Wanneer Wi-Fi-stuurprogramma's zijn ingeschakeld, kan ADC2 niet worden gebruikt. Er kunnen slechts 8 kanalen van ADC1 worden gebruikt.
  • De ESP32 ADC is niet erg lineair; het laat zien niet-lineariteit gedrag en kan geen onderscheid maken tussen 3.2V en 3.3V. Het is echter mogelijk om ESP32 ADC te kalibreren. Hier is een artikel dat u zal begeleiden bij het kalibreren van ESP32 ADC niet-lineariteitsgedrag.

Niet-lineariteitsgedrag van ESP32 is te zien op de seriële monitor van Arduino IDE.

Programmeer ESP32 ADC met Arduino IDE

De beste manier om de werking van ESP32 ADC te begrijpen, is door een potentiometer te nemen en waarden tegen nulweerstand tot het maximum af te lezen. Hieronder volgt het gegeven circuitbeeld van ESP32 met potentiometer.

Verbind de middelste pin van de potentiometer met digitale pin 25 van ESP32 en 2 terminalpinnen met respectievelijk 3.3V en GND-pin.

Hardware

De volgende afbeelding toont de hardware van ESP32 met potentiometer. Hieronder volgt de lijst met benodigde componenten:

  • ESP32 DEVKIT DOIT-bord
  • Potentiometer
  • Breadboard
  • Doorverbindingsdraden

Code

Open Arduino IDE en upload de onderstaande code op het ESP32-bord. Om te controleren hoe u ESP32 installeert en configureert met Arduino IDE, klik op hier .

const int Pin_Potentiometer = 25 ; /*Potentiometer aangesloten op GPIO 25 (Analoge ADC2_CH8)*/
int Val_Potentiometer = 0 ; /*De afgelezen waarde van de potentiometer wordt hier opgeslagen*/
leegte opstelling ( ) {
Serieel. beginnen ( 115200 ) ; /*Seriële communicatie begint*/
}
leegte lus ( ) {
Val_Potentiometer = analoog lezen ( Pin_Potentiometer ) ; /* Potentiometerwaarde aflezen*/
Serieel. println ( Val_Potentiometer ) ; /*Drukt potentiometerwaarde af*/
vertraging ( 2000 ) ; /*vertraging van 2sec*/
}

Hier in de bovenstaande code initialiseren we digitale pin 25 voor potentiometer op ESP32-bord. Naast invoer wordt een variabele Val_Potentiometer geïnitialiseerd. Volgende Seriële communicatie wordt gestart door de baudrate te definiëren.

In de lus een deel van de code met de functie analogRead() ADC-waarden worden gelezen op pin 25 van ESP32. Vervolgens worden met Serial.print() alle waarden afgedrukt op de seriële monitor.

Uitgang:

Uitgang geeft analoge waarden weer die zijn afgezet tegen digitale discrete waarden. Wanneer de leesspanning maximaal is, dat is 3,3 V, is de digitale uitvoer gelijk aan 4095 en wanneer de leesspanning 0 V is, wordt de digitale uitvoer 0.

Conclusie

Analoog-naar-digitaal-converters worden overal gebruikt, vooral wanneer we microcontrollerkaarten moeten koppelen aan analoge sensoren en hardware. ESP32 heeft twee kanalen voor ADC, namelijk ADC1 en ADC2. Deze twee kanalen vormen samen 18 pinnen voor het koppelen van analoge sensoren. 3 daarvan zijn echter niet beschikbaar op de ESP32 30-pins versie. Lees het artikel voor meer informatie over het lezen van analoge waarden.