ESP32 ADC – Четене на аналогови стойности с Arduino IDE

Esp32 Adc Cetene Na Analogovi Stojnosti S Arduino Ide



ADC (аналогово-цифров преобразувател) е електронна схема, която се доставя с различни микроконтролерни платки или е интегрирана вътре в микроконтролера. ADC се използва за преобразуване на аналоговото напрежение от различни сензори в цифрова форма. Подобно на Arduino, ESP32 също има ADC, който може да чете аналогови данни. Нека да разберем повече за ESP32 ADC.

ESP32 ADC Въведение

Платката ESP32 има два интегрирани 12-битови ADC, известни също като SAR (Регистри за последователно приближение) ADC. ADC на платката ESP32 поддържат 18 различни аналогови входни канала, което означава, че можем да свържем 18 различни аналогови сензора, за да приемаме входни данни от тях.

Но тук не е така; тези аналогови канали са разделени на две категории канал 1 и канал 2, като и двата канала имат някои изводи, които не винаги са налични за ADC вход. Нека да видим какви са тези ADC щифтове заедно с други.







ESP32 ADC щифтове

Както споменахме по-рано, платката ESP32 има 18 ADC канала. От 18 само 15 са налични в платката DEVKIT V1 DOIT с общо 30 GPIO.



Погледнете вашата платка и идентифицирайте щифтовете на ADC, както ги подчертахме на изображението по-долу:







Канал 1 ADC щифтове

Следва даденото картографиране на щифтовете на платката ESP32 DEVKIT DOIT. ADC1 в ESP32 има 8 канала, но платката DOIT DEVKIT поддържа само 6 канала. Но гарантирам, че те са повече от достатъчни.

ADC1 GPIO PIN ESP32
CH0 36
CH1 NA в 30-пинова версия ESP32 (Devkit ТРЯБВА)
CH2 ЧЕ
CH3 39
CH4 32
CH5 33
CH6 3. 4
CH7 35

Следното изображение показва ESP32 ADC1 канали:



Канал 2 ADC щифтове

Платките на DEVKIT DOIT имат 10 аналогови канала в ADC2. Въпреки че ADC2 има 10 аналогови канала за четене на аналогови данни, тези канали не винаги са налични за използване. ADC2 се споделя с вградените WiFi драйвери, което означава, че по времето, когато платката използва WIFI, тези ADC2 няма да са налични. Решението на този проблем е да използвате ADC2 само когато Wi-Fi драйверът е изключен.

Изображението по-долу показва картографиране на щифтове на ADC2 канал.

Как да използвате ESP32 ADC

ESP32 ADC работи по подобен начин като Arduino, единствената разлика тук е, че има 12-битов ADC. И така, платката ESP32 картографира аналоговите стойности на напрежението, вариращи от 0 до 4095, в цифрови дискретни стойности.

  • Ако напрежението, дадено на ESP32 ADC, е нула, цифровата стойност на ADC канал ще бъде нула.
  • Ако напрежението, дадено на ADC, е максимално, означава 3,3 V, изходната цифрова стойност ще бъде равна на 4095.
  • За измерване на по-високо напрежение можем да използваме метода на делителя на напрежението.

Забележка: ESP32 ADC по подразбиране е настроен на 12 бита, но е възможно да го конфигурирате на 0 бита, 10 бита и 11 бита. 12-битовият ADC по подразбиране може да измерва стойност 2^12=4096 и аналоговото напрежение варира от 0V до 3.3V.

Ограничение на ADC на ESP32

Ето някои ограничения на ESP32 ADC:

  • ESP32 ADC не може директно да измерва напрежение, по-голямо от 3,3 V.
  • Когато Wi-Fi драйверите са активирани, ADC2 не може да се използва. Могат да се използват само 8 канала на ADC1.
  • ESP32 ADC не е много линеен; това показва нелинейност поведение и не може да направи разлика между 3.2V и 3.3V. Въпреки това е възможно да се калибрира ESP32 ADC. Тук е статия, която ще ви насочи да калибрирате нелинейното поведение на ADC ESP32.

Нелинейното поведение на ESP32 може да се види на серийния монитор на Arduino IDE.

Програмирайте ESP32 ADC с помощта на Arduino IDE

Най-добрият начин да разберете работата на ESP32 ADC е да вземете потенциометър и да прочетете стойности срещу нулево съпротивление до максимум. Следва даденото изображение на веригата на ESP32 с потенциометър.

Свържете средния щифт на потенциометъра с цифров щифт 25 на ESP32 и 2 клемни щифта съответно с 3,3 V и GND щифт.

Хардуер

Следното изображение показва хардуера на ESP32 с потенциометър. Следва списъкът с необходимите компоненти:

  • Платка ESP32 DEVKIT DOIT
  • Потенциометър
  • Бредборд
  • Джъмперни проводници

Код

Отворете Arduino IDE и качете кода по-долу в платката ESP32. За да проверите как да инсталирате и конфигурирате ESP32 с Arduino IDE, щракнете тук .

конст вътр Pin_Потенциометър = 25 ; /*Потенциометър, свързан към GPIO 25 (Аналогов ADC2_CH8)*/
вътр Val_Потенциометър = 0 ; /*Прочетената стойност на потенциометъра ще се съхранява тук*/
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ; /*Серийната комуникация започва*/
}
невалиден цикъл ( ) {
Val_Потенциометър = analogRead ( Pin_Потенциометър ) ; /*Отчитане на стойността на потенциометъра*/
Сериен. println ( Val_Потенциометър ) ; /*Отпечатва стойността на потенциометъра*/
забавяне ( 2000 г ) ; /*закъснение от 2сек*/
}

Тук в горния код инициализираме цифров щифт 25 за потенциометър на платката ESP32. След това се инициализира променлива Val_Potentiometer. Следващата серийна комуникация се инициира чрез определяне на скоростта на предаване.

В цикъл част от кода, използващ функцията analogRead(), стойностите на ADC ще бъдат прочетени на пин 25 на ESP32. След това с помощта на Serial.print() всички стойности се отпечатват на серийния монитор.

Изход

Изходът показва аналогови стойности, съпоставени с цифрови дискретни стойности. Когато напрежението за четене е максимално, което е 3,3 V, цифровият изход е равен на 4095, а когато напрежението за четене е 0 V, цифровият изход става 0.

Заключение

Аналогово-цифровите преобразуватели се използват навсякъде, особено когато трябва да свързваме микроконтролерни платки с аналогови сензори и хардуер. ESP32 има два канала за ADC, които са ADC1 и ADC2. Тези два канала се комбинират, за да осигурят 18 пина за свързване на аналогови сензори. Въпреки това, 3 от тях не са налични във версията с 30 пина ESP32. За да видите повече относно четенето на аналогови стойности, прочетете статията.