ESP32 ADC – Læs analoge værdier med Arduino IDE

Esp32 Adc Laes Analoge Vaerdier Med Arduino Ide



ADC (analog til digital konverter) er et elektronisk kredsløb, der leveres med forskellige mikrocontrollerkort eller integreret inde i mikrocontrolleren. ADC bruges til at konvertere den analoge spænding fra forskellige sensorer til digital form. Ligesom Arduino har ESP32 også en ADC, som kan læse analoge data. Lad os finde ud af mere om ESP32 ADC.

ESP32 ADC Introduktion

ESP32-kortet har to integrerede 12-bit ADC'er, også kendt som SAR (Successive Approximation Registers) ADC'er. ESP32-kortets ADC'er understøtter 18 forskellige analoge inputkanaler, hvilket betyder, at vi kan tilslutte 18 forskellige analoge sensorer for at modtage input fra dem.

Men det er ikke tilfældet her; disse analoge kanaler er opdelt i to kategorier kanal 1 og kanal 2, begge disse kanaler har nogle ben, der ikke altid er tilgængelige for ADC input. Lad os se, hvad disse ADC-stifter er sammen med andre.







ESP32 ADC-stifter

Som tidligere nævnt har ESP32-kortet 18 ADC-kanaler. Ud af 18 er kun 15 tilgængelige i DEVKIT V1 DOIT-kortet med i alt 30 GPIO'er.



Se på dit board og identificer ADC-stifterne, som vi fremhævede dem på billedet nedenfor:







Kanal 1 ADC-ben

Følgende er den givne pinmapping af ESP32 DEVKIT DOIT-kort. ADC1 i ESP32 har 8 kanaler, men DOIT DEVKIT-kortet understøtter kun 6 kanaler. Men jeg garanterer, at disse stadig er mere end nok.

ADC1 GPIO PIN ESP32
CH0 36
CH1 NA i 30-bens version ESP32 (Devkit SKAL)
CH2 AT
CH3 39
CH4 32
CH5 33
CH6 3. 4
CH7 35

Følgende billede viser ESP32 ADC1-kanaler:



Kanal 2 ADC-stifter

DEVKIT DOIT-kort har 10 analoge kanaler i ADC2. Selvom ADC2 har 10 analoge kanaler til at læse analoge data, er disse kanaler ikke altid tilgængelige til brug. ADC2 deles med indbyggede WiFi-drivere, hvilket betyder, at på det tidspunkt, hvor kortet bruger WIFI, vil disse ADC2 ikke være tilgængelige. Løsningen på dette problem er kun at bruge ADC2, når Wi-Fi-driveren er slukket.

Nedenstående billede viser pinmapping af ADC2-kanal.

Sådan bruges ESP32 ADC

ESP32 ADC fungerer på samme måde som Arduino. Den eneste forskel her er, at den har 12 bit ADC. Så ESP32-kortet kortlægger de analoge spændingsværdier fra 0 til 4095 i digitale diskrete værdier.

  • Hvis spændingen givet til ESP32 ADC er nul en ADC-kanal, vil den digitale værdi være nul.
  • Hvis spændingen givet til ADC er maksimal betyder 3,3V, vil den digitale udgangsværdi være lig med 4095.
  • For at måle højere spænding kan vi bruge spændingsdelermetoden.

Bemærk: ESP32 ADC er som standard indstillet til 12-bit, men det er muligt at konfigurere det til 0-bit, 10-bit og 11-bit. 12-bit standard ADC kan måle værdi 2^12=4096 og den analoge spænding går fra 0V til 3,3V.

ADC-begrænsning på ESP32

Her er nogle begrænsninger for ESP32 ADC:

  • ESP32 ADC kan ikke direkte måle spænding større end 3,3V.
  • Når Wi-Fi-drivere er aktiveret, kan ADC2 ikke bruges. Kun 8 kanaler af ADC1 kan bruges.
  • ESP32 ADC er ikke særlig lineær; det viser ikke-linearitet adfærd og kan ikke skelne mellem 3,2V og 3,3V. Det er dog muligt at kalibrere ESP32 ADC. Her er en artikel, der vil guide dig til at kalibrere ESP32 ADC ikke-linearitetsadfærd.

Ikke-linearitetsadfærd af ESP32 kan ses på den serielle skærm af Arduino IDE.

Programmer ESP32 ADC ved hjælp af Arduino IDE

Den bedste måde at forstå, hvordan ESP32 ADC fungerer, er at tage et potentiometer og aflæse værdier mod nul modstand til maksimum. Følgende er det givne kredsløbsbillede af ESP32 med potentiometer.

Forbind potentiometerets midterste ben med digital pin 25 på ESP32 og 2 terminalben med henholdsvis 3,3V og GND pin.

Hardware

Følgende billede viser hardwaren til ESP32 med potentiometer. Følgende er listen over nødvendige komponenter:

  • ESP32 DEVKIT DOIT board
  • Potentiometer
  • Brødbræt
  • Jumper ledninger

Kode

Åbn Arduino IDE og upload nedenstående kode i ESP32-kortet. For at kontrollere, hvordan du installerer og konfigurerer ESP32 med Arduino IDE, klik her .

konst int Pin_Potentiometer = 25 ; /*Potentiometer tilsluttet til GPIO 25 (Analog ADC2_CH8)*/
int Val_Potentiometer = 0 ; /*Potentiometer aflæst værdi vil blive gemt her*/
ugyldig Opsætning ( ) {
Seriel. begynde ( 115200 ) ; /*Seriel kommunikation begynder*/
}
ugyldig sløjfe ( ) {
Val_Potentiometer = analogLæs ( Pin_Potentiometer ) ; /*Aflæse potentiometerværdi*/
Seriel. println ( Val_Potentiometer ) ; /*Udskriver potentiometerværdi*/
forsinke ( 2000 ) ; /*forsinkelse på 2 sek.*/
}

Her i ovenstående kode initialiserer vi digital pin 25 til potentiometer på ESP32-kort. Næste for at tage input initialiseres en variabel Val_Potentiometer. Næste Seriel kommunikation initieres ved at definere baudrate.

I den sløjfe en del af koden ved hjælp af analogRead()-funktionen ADC-værdier vil blive læst på pin 25 på ESP32. Næste ved at bruge Serial.print() udskrives alle værdier på den serielle monitor.

Produktion

Output viser analoge værdier kortlagt mod digitale diskrete værdier. Når læsespændingen er maksimal, er 3,3V digital udgang lig med 4095, og når læsespændingen er 0V bliver den digitale udgang 0.

Konklusion

Analog til digital omformere bruges overalt, især når vi skal forbinde mikrocontrollerkort med analoge sensorer og hardware. ESP32 har to kanaler til ADC, som er ADC1 og ADC2. Disse to kanaler giver tilsammen 18 ben til at forbinde analoge sensorer. 3 af dem er dog ikke tilgængelige på ESP32 30-pin versionen. For at se mere om læsning af analoge værdier læs artiklen.