ADC؛ تبدیل ولتاژ به عدد
دنیای واقعی فقط صفر و یک نیست. سنسورهایی داریم که ولتاژ بین ۰ و ولتاژ مرجع تولید میکنند. ADC این ولتاژ را به عدد تبدیل میکند. اگر ADC دهبیتی باشد، ۱۰ بیت یعنی 2^10 = 1024 سطح؛ معمولا عدد ۰ تا ۱۰۲۳.
رزولوشن به معنی دقت مطلق نیست. نویز، ولتاژ مرجع و کیفیت سنسور هم روی نتیجه اثر دارند.
PWM؛ کنترل میانگین با پالس
PWM خروجی آنالوگ واقعی نیست. Pin با سرعت بین HIGH/LOW سوئیچ میکند و نسبت زمان HIGH به کل دوره را Duty Cycle مینامیم.
25%: █___█___█___
50%: ██__██__██__
75%: ███_███_███_
برای LED چشم ما میانگین روشنایی را میبیند؛ برای موتور Driver میتواند اثر توان متوسط متفاوت ایجاد کند. فرکانس PWM هم در بعضی کاربردها مهم است.
Timer؛ ساعت داخلی برای زمانبندی
Timer سختافزاری شمارندهای است که با Clock جلو میرود. MCU میتواند از آن برای PWM، اندازهگیری زمان یا Interrupt دورهای استفاده کند. این باعث میشود بسیاری از کارهای زمانی بدون توقف کامل CPU انجام شوند.
UART / Serial
UART بیتها را سریالی منتقل میکند. در Arduino، Serial اغلب برای ارتباط برد با کامپیوتر و دیدن Log استفاده میشود:
Serial.begin(9600);
Serial.println(sensorValue);
دو طرف باید تنظیمات سازگار مثل Baud Rate داشته باشند. اگر Baud اشتباه باشد ممکن است متن نامفهوم ببینی.
یک سناریوی کامل
پتانسیومتر → ADC → عدد → تصمیم برنامه → PWM → روشنایی LED. در همین زنجیره میتوان مقدار ADC و Duty Cycle را روی Serial چاپ کرد و فهمید مشکل در ورودی است یا خروجی.
تمرین
اگر ADC دهبیتی مقدار ۵۱۲ بدهد، در مدل ایدهآل تقریبا وسط محدوده است. توضیح بده چگونه همین مقدار را به PWM تقریبا ۵۰٪ تبدیل میکنی. لازم نیست فرمول دقیق map را حفظ کنی؛ باید بفهمی محدوده ورودی و خروجی فرق دارند و باید Scale شوند.