آموزش کار با ADC در AVR تبدیل سیگنالهای آنالوگ به دیجیتال
آموزش کار با ADC در AVR تبدیل سیگنالهای آنالوگ به دیجیتال در بسیاری از پروژههای الکترونیکی، نیاز به خواندن سیگنالهای آنالوگ و تبدیل آنها به مقادیر دیجیتال وجود دارد. این کار با استفاده از مبدل آنالوگ به دیجیتال (ADC) انجام میشود. در میکروکنترلرهای AVR نیز یک واحد ADC داخلی وجود دارد که میتواند مقادیر آنالوگ را از پینهای مختلف میخواند و آنها را به مقادیر دیجیتال تبدیل میکند.
در این مقاله، ابتدا به تشریح اصول اولیه عملکرد ADC در AVR میپردازیم و سپس به نحوه پیکربندی و استفاده از آن در یک برنامه کاربردی میپردازیم.
1. اصول عملکرد ADC در AVR
ADC یک مبدل آنالوگ به دیجیتال است که مقدار آنالوگ ورودی را به یک مقدار دیجیتال معادل آن تبدیل میکند. واحد ADC در میکروکنترلرهای AVR معمولاً دارای دقتهای مختلفی مانند 8 یا 10 بیت است. این یعنی که سیگنال ورودی آنالوگ به 256 یا 1024 سطح دیجیتال تقسیم میشود.
مقدار دیجیتال خروجی تابعی از ولتاژ مرجع (Vref) و مقدار ورودی (Vin) است. فرمول تبدیل به صورت زیر است:
که n دقت ADC را نشان میدهد (به عنوان مثال 10 بیت).
2. ساختار واحد ADC در AVR
میکروکنترلرهای AVR مانند خانواده ATmega دارای واحد ADC داخلی هستند که با چندین پین آنالوگ مشترک هستند. برای مثال، میکروکنترلر ATmega328P دارای 6 کانال آنالوگ است که هرکدام میتوانند به ADC متصل شوند.
ویژگیهای کلیدی ADC در AVR عبارتند از:
- کانالهای ورودی متعدد: امکان انتخاب بین چندین پین ورودی آنالوگ.
- دقت 10 بیتی: خروجی ADC میتواند بین 0 تا 1023 باشد.
- قابلیت تنظیم ولتاژ مرجع: میتوان از منابع داخلی یا خارجی برای مرجع ولتاژ استفاده کرد.
- کنترل وقفه: امکان استفاده از وقفهها برای واکنش به اتمام عملیات تبدیل.
3. تنظیمات اولیه ADC در AVR
برای استفاده از ADC در AVR، ابتدا باید واحد ADC را پیکربندی کنید. مراحل تنظیم شامل انتخاب کانال، تنظیم ولتاژ مرجع و مقداردهی اولیه ثباتهای ADC میباشد.
3.1 تنظیم ثباتهای ADC
برای شروع کار با ADC، باید برخی از ثباتهای کلیدی تنظیم شوند:
- ADMUX: برای انتخاب کانال ورودی و تنظیم ولتاژ مرجع استفاده میشود.
- ADCSRA: برای فعالسازی ADC، تنظیم پیشتقسیمکننده (Prescaler) و فعالسازی وقفهها استفاده میشود.
مثال:
ADMUX = (1 << REFS0); // انتخاب ولتاژ مرجع به عنوان Vcc
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // فعالسازی ADC و تنظیم Prescaler به 64
3.2 انتخاب کانال ورودی
کانال ورودی برای ADC را با استفاده از ثبات ADMUX تنظیم میکنیم. به عنوان مثال، اگر بخواهیم مقدار آنالوگ روی پین ADC0 را بخوانیم، به این صورت عمل میکنیم:
ADMUX &= ~(1 << MUX0); // انتخاب کانال ADC0
4. شروع تبدیل و خواندن نتیجه
برای شروع تبدیل ADC، باید بیت ADSC را در ثبات ADCSRA تنظیم کنید. این بیت پس از شروع تبدیل به طور خودکار 1 میشود و وقتی تبدیل به پایان رسید، دوباره به 0 تغییر میکند.
مثال:
ADCSRA |= (1 << ADSC); // شروع تبدیل
while (ADCSRA & (1 << ADSC)); // منتظر بمانید تا تبدیل تمام شود
uint16_t adc_value = ADC; // خواندن نتیجه تبدیل
5. نمونه کد برای خواندن ورودی آنالوگ
در اینجا یک نمونه کد کامل برای خواندن مقادیر آنالوگ از پین ADC0 و نمایش آن در یک نمایشگر سریال آورده شده است:
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
void adc_init() {
// انتخاب ولتاژ مرجع Vcc و کانال ADC0
ADMUX = (1 << REFS0);
// فعالسازی ADC و تنظیم Prescaler به 64
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
}
uint16_t adc_read() {
// شروع تبدیل
ADCSRA |= (1 << ADSC);
// انتظار برای اتمام تبدیل
while (ADCSRA & (1 << ADSC));
// برگرداندن مقدار ADC
return ADC;
}
int main(void) {
// مقداردهی اولیه ADC
adc_init();
// مقدارخوانی ADC و نمایش در سریال
while (1) {
uint16_t value = adc_read();
printf("ADC Value: %d\n", value);
_delay_ms(1000);
}
}
6. نکات مهم در کار با ADC
- ولتاژ مرجع (Vref): تنظیم درست ولتاژ مرجع بسیار مهم است. معمولاً Vcc یا یک منبع ولتاژ پایدار دیگر به عنوان مرجع انتخاب میشود.
- سرعت نمونهبرداری: مقدار Prescaler سرعت تبدیل ADC را تعیین میکند. برای دقت بالاتر، باید Prescaler را مناسب انتخاب کنید.
- نویز: سیگنالهای آنالوگ به نویز حساس هستند. استفاده از فیلترهای مناسب یا زمانبندی درست برای خواندن ADC میتواند کیفیت نتایج را بهبود بخشد.
نتیجهگیری
استفاده از ADC در میکروکنترلرهای AVR یکی از مهمترین قابلیتهایی است که به توسعهدهندگان امکان میدهد تا دادههای دنیای واقعی را به شکل دیجیتال پردازش کنند. با توجه به قابلیتهای واحد ADC، میتوان به راحتی سیگنالهای آنالوگ را خواند و از آنها در پروژههای مختلف استفاده کرد.
این آموزش به شما کمک کرد تا با پیکربندی و استفاده از واحد ADC در AVR آشنا شوید. امیدواریم با بهرهگیری از این مقاله، بتوانید پروژههای آنالوگ-دیجیتال خود را با موفقیت به پیش ببرید.
آموزش کار با ADC در AVR تبدیل سیگنالهای آنالوگ به دیجیتال