راه اندازی مبدل آنالوگ به دیجیتال ESP32

به آموزش به معرفی روش راه اندازی مبدل آنالوگ به دیجیتال (ADC ) ESP32 می پردازیم.

ورودی های آنالوگ ADC

هنگامی که ESP32 یک مقدار آنالوگی رو میخونه یعنی میتونه مقدار ولتاژی بین صفر تا ۳.۳ ولت رو اندازی گیری کنه. ولتاژی که اندازه گیری میشه در مرحله بعدی (تبدیل شدن از آنالوگ به دیجیتال) به یک مقداری بین صفر تا ۴۰۹۵ تخصیص داده میشه.

صفر ولت به عدد صفر و ۳.۳ ولت به ۴۰۹۵ و ولتاژهای بین صفر تا ۳.۳ ولت به عددی مابین ۰ تا ۴۰۹۵ اختصاص داده میشه.

ADC غیر خطی است

خب احتمالا شما تصوری رفتاری ایده آل و خطی از ESP32 دارین اما در واقعیت رفتاری غیرخطی مطابق با شکل زیر داره :

این عملکرد غیرخطی روی تشخیص ولتاژ تاثیر داره که ESP32 مقادیر بین ۳.۲. ولت و ۳.۳ ولت رو یکسان در نظر می گیره و به عدد ۴۰۹۵ اختصاص میده .

همینطور این رفتار رو برای ولتاژهای خیلی کم، بین ۰ تا ۰.۱ ولت هم تکرار میکنه و مقدار دیجیتالی صفر رو به این بازه اختصاص میده.

دستور ()analogRead

خب برای اینکه ESP32 یک مقدار آنالوگی رو بخونه به راحتی و با دستور ()analogRead این کار انجام میشه . پایه GPIO ای که به وسیله اون کار خوندن انجام میشه رو به عنوان آرگومان ورودی این دستور تعریف کنید:

analogRead(GPIO);

ESP32 تعداد ۱۸ تا کانال مختلف برای گرفتن ورودی داره. و در برد DEVKIT V1 DOIT  (ورژنی که ۳۰ تا GPIO داره) فقط کانال ۱۵ قابل استفاده است.

 طبق شکل زیر پین های ADC رو به ESP32 متصل کنید(بخش هایی که با خط قرمز مشخص شدن):

این پین های ورودی آنالوگ رزولوشن ۱۲ بیتی دارن یعنی زمانی که یک مقدار آنالوگی خونده میشه در حوزه دیجیتال به مقداری بین ۰ تا ۴۰۹۵ اختصاص داده میشه.

نکته : باید بهش توجه داشته باشید اگر از WIFI استفاده می کنید همزمان  ADC2 هم قابل استفاده نیست و در این شرایط به طور همزمان با WIFI فقط ADC1 قابل استفاده است.

دستورهای دیگه ای که بسیار کاربردی هستن !

analogReadResolution(resolution)

بیت های نمونه و رزولوشن رو که مقداری بین ۹ (۰ تا ۵۱۱) تا ۱۲ (۰ تا ۴۰۹۵) بیت است، تعیین کنید. رزولوشن پیش فرض ۱۲ بیت است.

analogSetWidth(width) 

بیت های نمونه و رزولوشن رو که مقداری بین ۹ (۰ تا ۵۱۱) تا ۱۲ (۰ تا ۴۰۹۵) بیت است، تعیین کنید. رزولوشن پیش فرض ۱۲ بیت است.

analogSetCycles(cycles)

تعداد سیکل ها در هر سمپل رو تعریف کنید که مقدار پیش فرض ۸ هست (۰ تا ۲۵۵). 

analogSetSamples(samples) 

تعداد نمونه ها رو تعیین کنید . مقدار پیش فرض ۱ هست .

analogSetClockDiv(attenuation)

کلاک ADC را تنظیم کنید مقدار پیش فرض ۱ (۰ تا ۲۵۵) است.

analogSetAttenuation(attenuation) 

مقدار تضعیف برای همه پین های ورودی رو تنظیم کنید . پیش فرض ۱۱db است . مقادیر قابل قبول :

  • ADC_0db : هیچ تضعیفی اعمال نمیشه و ADC تا حدود ۸۰۰mV اندازه گیری می کنه.  (به ورودی ۱ ولت مقدار ۱۰۸۸ اختصاص داده میشه)
  • ADC_2_5db : ورودی ADC در این مقدار تضعیف داره و آستانه اندازه گیری تا حدود ۱۱۰۰mV  بیشتر میشه (مقدار ولتاژ ورودی ۱ ولت را به عدد ۳۷۲۲ اختصاص میده)
  • ADC_6db : در این حالت هم ورودی ADC تضعیف داره و آستانه اندازه گیری تا حدود ۱۳۵۰mV  بیشتر میشه (مقدار ولتاژ ورودی ۱ ولت را به عدد ۳۰۳۳ اختصاص میده)
  • ADC_11db : در این حالت هم ورودی ADC تضعیف داره و آستانه اندازه گیری تا حدود ۲۶۰۰mV  بیشتر میشه (مقدار ولتاژ ورودی ۱ ولت را به عدد ۱۵۷۵ اختصاص میده)
analogSetPinAttenuation(pin, attenuation) 

با این دستور برای هر پین مشخصی می توان تضعیف معینی رو اعمال کرد . مقدار پیش فرض ADC_11db است .

adcAttachPin(pin)

با این دستور میشه هر پینی رو به ADC متصل کرد و نتیجه به صورت صحیح و خطا اعلام میشه.

adcStart(pin), adcBusy(pin) and resultadcEnd(pin) 

با این دستورات باسی از ADC که به پین متصل کردیم راه اندازی میشه و بررسی میشه که باس مورد نظر آزاد و یا مشغوله ( با پیغام صحیح و خطا اعلام میشه). این نتیجه با عدد صحیح ۱۶ بیتی مشخص میشه .

خواندن داده های آنالوگ از پتانسیومتر با ESP32

برای درک بیشتر مطلب با هم مثالی رو بررسی می کنیم. تو این مثال داده های آنالوگ از پتاسیومتر دریافت میشه. المان های دیگه ای که برای این مثال نیاز داریم :

  • ESP32
  • پتانسیومتر
  • بِردبُرد
  • سیم جامپر

شماتیک این مدار در شکل زیر مشخص شده!

پین وسط پتانسیومتر به GPIO شماره ۳۴ متصل میشه.

کد برنامه

کد زیر را در Arduino IDE کپی کنید :

// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) 
const int potPin = 34;

// variable for storing the potentiometer value
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // Reading potentiometer value
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

با این کد به سادگی مقادیر از پتانسیومتر دریافت و به پورت سریال منتقل میشه.

کد برنامه رو با مشخص کردن شماره GPIO مشخص می کنیم. در این مثال پین شماره ۳۴ تنظیم شده.

const int potPin = 34;
In the setup(), initialize a serial communication at a baud rate of 115200.
Serial.begin(115200);
In the loop(), use the analogRead()function to read the analog input from the potPin.
potValue = analogRead(potPin);
Finally, print the values read from the potentiometer in the serial monitor.
Serial.println(potValue);

مرحله بعدی آپلود کردن کد هست.

تست برنامه

بعد از آپلود کردن کد و زدن کلید ریست ESP32 ، قسمت پورت سریال رو در باد ریت ۱۱۵۲۰۰ تنظیم کنید. حالا پتانسیومتر رو بچرخونید و مقادیر نتیجه که در حال تغییر هستن رو می بیند! کمترین عدد ۰ و بیشترین عدد ۴۰۹۵ رو می بینید.

پایان آموزش روش راه اندازی مبدل آنالوگ به دیجیتال (ADC ) ESP32

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...