معرفی ADC
مبدل آنالوگ به دیجیتال (Analog to Digital Converter) را به اختصار ADC میگویند. که برای تبدیل ولتاژ آنالوگ به یک عدد دیجیتال به کار میرود.چیپ ESP8266 دارای یک بلاک ADC درونی 10 بیتی است که تنها یک ورودی دارد. یعنی تنها یک پین برای خواندن ولتاژ خارجی دارد.
وقتی در مورد ADC ماژول ESP8266 جستجو میکنیم، شاید با اسمهای دیگر آن برخورد کنیم:
- ADC (Analog-to-digital Converter)
- TOUT
- Pin6
- A0
- Analog Pin 0
که منظور از تمام آنها یکی است. رزولوشن ADC در ESP8266 ها 10 بیت است و این مقدار قابل تغییر نیست. که به معنای این است که مقدار 0 تا 1023 را به ما میدهد. برای 0 ولت عدد 0 و برای 1 ولت عدد 1023 را به ما نشان میدهد.
رنج ولتاژ ورودیای که میتوان به این پین اعمال کرد از 0 تا 1 ولت میباشد. هرچند که در بوردهای توسعه یافتهای که از هستهی ESP8266 استفاده میکنند، یک تقسیم کنندهی ولتاژ قرار داده شده است که این رنج را به 0 تا 3.3 ولت تغییر داده است. مانند NodeMCU. ولی همیشه قبل از استفاده از هر بوردی حتما دیتاشیت آنرا بخوانید.
در مدلهای ابتدایی تر از ESP8266 حتی پینی خارجی برای ADC وجود ندارد. مانند ESP8266-01. ولی این قابلیت در چیپ وجود دارد و میتوان با لحیم کاری از آن استفاده کرد.
واحد ADC بصورت داخلی برای اندازه گیری ولتاژ ورودی خود ماژول هم استفاده میشود. ولی نمیتوان همزمان هم ولتاژ خود ماژول را خواند و هم پین خارجی را.
نگاه دقیقتر
ADC آنقدر هم که فکر میکنیم به تغییر ولتاژ حساس نیست. و در واقع یک نمودار خطی نیست. در زیر نموداری از تغییر ولتاژ و مقدار ADC را میبینید که آنچنان خطی هم نیست.
کمی تخصصی
برای تنظیم ADC چه بخواهیم ولتاژ خارجی را بخواند، چه ولتاژ داخلی، در بایت 107 ام از فایل “esp_init_data_default.bin” قابل تنظیم است. توجه داشته باشید که این بایتها از صفر شروع میشود. این فایل جزو فایلهای سیستمی ESP8266 است که هنگام آپلود کردن برنامه به ESP8266 ارسال میشود.
107 امین بایت “esp_init_data_default.bin” به اسم “vdd33_const” نامیده میشود. برای خواندن ولتاژ داخلی یعنی ولتاژی که برای تغذیهی ESP8266 به پایهی VDD اعمال شده است، این بایت باید 0XFF یا 255 شود. با تغییر عدد این بایت “vdd33_const” می توان از امکانات دیگر ADC استفاده کرد. برای اطلاعات بیشتر باید دیتا شیت ESP8266 را مطالعه کنید.
ولی وقتی از نرم افزار آردوینو استفاده می کنیم لازم نیست که این بایت را خودمان تغییر دهیم و فانکشن هایی برای آن موجود است.
فانکشنهای ADC
analogRead(A0)
این فانکشن برای خواندن ولتاژ خارجی استفاده میشود.
()ESP.getVcc
این فانکشن برای خواندن ولتاژ راه انداز ماژول ESP8266 استفاده میشود. وقتی از این امکان میخواهیم استفاده کنیم نباید به پایهی ADC ولتاژی اعمال شده باشد.
این مُدها می تواند ADC_TOUT برای خواندن ولتاژ خارجی و ADC_VCC برای خواندن ولتاژ سیستم باشد. که بصورت پیش فرض این مُد ADC_TOUT است.
نمونه کدی برای خواندن ولتاژ خارجی:
void setup() { Serial.begin(9600); } void loop() { Serial.print("ADC Value: ");Serial.println(analogRead(A0)); delay(300); }
نمونه کدی برای خواندن ولتاژ داخلی:
ADC_MODE(ADC_VCC); void setup() { Serial.begin(9600); } void loop() { Serial.print("System voltage(mV): ");Serial.println(ESP.getVcc()); delay(300); }
دیدگاه ها :