مدولاسیون عرض پالس (PWM) یکی از تکنیکهای اساسی و بسیار کاربردی در دنیای آردوینو و الکترونیک است که به ما امکان میدهد توان متوسطی را که به یک دستگاه الکترونیکی میرسد، کنترل کنیم. این روش به جای روشن و خاموش کردن کامل یک قطعه، با تغییر نسبت زمان روشن بودن به زمان خاموش بودن در یک دوره زمانی ثابت، به ما اجازه میدهد تا خروجی "آنالوگ" را از یک پین دیجیتال شبیهسازی کنیم.
PWM چیست و چرا مهم است؟
تصور کنید میخواهید روشنایی یک LED را کم و زیاد کنید یا سرعت یک موتور DC را کنترل کنید. اگر فقط از پینهای دیجیتال معمولی استفاده کنید، LED یا کاملاً روشن است یا کاملاً خاموش، و موتور یا با حداکثر سرعت میچرخد یا متوقف است. PWM این محدودیت را برطرف میکند. با استفاده از PWM، میتوانیم به LED دستور دهیم که مثلاً ۵۰٪ از زمان روشن باشد و ۵۰٪ از زمان خاموش، اما این روشن و خاموش شدن آنقدر سریع اتفاق میافتد که چشم انسان آن را به صورت یک نور با روشنایی متوسط میبیند.
نحوه کار PWM
PWM بر اساس دو مفهوم اصلی کار میکند:
1. فرکانس (Frequency): تعداد دفعاتی که پالس در یک ثانیه تکرار میشود. در آردوینو، فرکانس PWM برای اکثر پینها حدود ۴۹۰ هرتز (Hz) است، به این معنی که پالس تقریباً ۴۹۰ بار در ثانیه تکرار میشود. این فرکانس برای بسیاری از کاربردها به اندازه کافی بالاست که چشم انسان یا گوش آن را به صورت سوسو زدن یا صدای کلیک تشخیص ندهد.
2. چرخه کاری (Duty Cycle): نسبت زمان "روشن" بودن پالس به کل دوره زمانی پالس. این نسبت معمولاً به صورت درصدی بیان میشود.
* اگر چرخه کاری ۰٪ باشد، خروجی همیشه خاموش است.
* اگر چرخه کاری ۵۰٪ باشد، خروجی نیمی از زمان روشن و نیمی از زمان خاموش است.
* اگر چرخه کاری ۱۰۰٪ باشد، خروجی همیشه روشن است.
پینهای PWM در آردوینو
همه پینهای دیجیتال آردوینو قابلیت PWM ندارند. در بردهای آردوینو Uno و Nano، پینهای دیجیتال زیر از PWM پشتیبانی میکنند و با علامت
این پینها میتوانند خروجی PWM تولید کنند.
تابع
برای استفاده از PWM در آردوینو، از تابع
*
*
مثال عملی: کم و زیاد کردن نور یک LED
بیایید یک LED را با استفاده از PWM به آرامی روشن و خاموش کنیم.
مدار:
کد آردوینو:
توضیح کد:
* حلقه دوم: متغیر
کاربردهای دیگر PWM:
PWM یک ابزار قدرتمند در جعبه ابزار آردوینو است که امکان کنترل دقیق و انعطافپذیر خروجیهای دیجیتال را فراهم میکند و به شما اجازه میدهد پروژههای پیچیدهتر و تعاملیتری بسازید.
PWM چیست و چرا مهم است؟
تصور کنید میخواهید روشنایی یک LED را کم و زیاد کنید یا سرعت یک موتور DC را کنترل کنید. اگر فقط از پینهای دیجیتال معمولی استفاده کنید، LED یا کاملاً روشن است یا کاملاً خاموش، و موتور یا با حداکثر سرعت میچرخد یا متوقف است. PWM این محدودیت را برطرف میکند. با استفاده از PWM، میتوانیم به LED دستور دهیم که مثلاً ۵۰٪ از زمان روشن باشد و ۵۰٪ از زمان خاموش، اما این روشن و خاموش شدن آنقدر سریع اتفاق میافتد که چشم انسان آن را به صورت یک نور با روشنایی متوسط میبیند.
نحوه کار PWM
PWM بر اساس دو مفهوم اصلی کار میکند:
1. فرکانس (Frequency): تعداد دفعاتی که پالس در یک ثانیه تکرار میشود. در آردوینو، فرکانس PWM برای اکثر پینها حدود ۴۹۰ هرتز (Hz) است، به این معنی که پالس تقریباً ۴۹۰ بار در ثانیه تکرار میشود. این فرکانس برای بسیاری از کاربردها به اندازه کافی بالاست که چشم انسان یا گوش آن را به صورت سوسو زدن یا صدای کلیک تشخیص ندهد.
2. چرخه کاری (Duty Cycle): نسبت زمان "روشن" بودن پالس به کل دوره زمانی پالس. این نسبت معمولاً به صورت درصدی بیان میشود.
* اگر چرخه کاری ۰٪ باشد، خروجی همیشه خاموش است.
* اگر چرخه کاری ۵۰٪ باشد، خروجی نیمی از زمان روشن و نیمی از زمان خاموش است.
* اگر چرخه کاری ۱۰۰٪ باشد، خروجی همیشه روشن است.
پینهای PWM در آردوینو
همه پینهای دیجیتال آردوینو قابلیت PWM ندارند. در بردهای آردوینو Uno و Nano، پینهای دیجیتال زیر از PWM پشتیبانی میکنند و با علامت
~ (تیلدا) مشخص شدهاند:- پینهای ۳، ۵، ۶، ۹، ۱۰، ۱۱
این پینها میتوانند خروجی PWM تولید کنند.
تابع
analogWrite()برای استفاده از PWM در آردوینو، از تابع
analogWrite() استفاده میکنیم. این تابع دو پارامتر میگیرد:analogWrite(pin, value);pin: شماره پین دیجیتالی که میخواهید خروجی PWM از آن بگیرید (باید یکی از پینهای PWM باشد).value: یک عدد صحیح بین ۰ تا ۲۵۵ که چرخه کاری را مشخص میکند.
0: معادل ۰٪ چرخه کاری (همیشه خاموش).*
127 (تقریباً): معادل ۵۰٪ چرخه کاری.*
255: معادل ۱۰۰٪ چرخه کاری (همیشه روشن).مثال عملی: کم و زیاد کردن نور یک LED
بیایید یک LED را با استفاده از PWM به آرامی روشن و خاموش کنیم.
مدار:
- یک LED را به پین ۹ آردوینو وصل کنید.
- یک مقاومت ۲۲۰ اهمی را به صورت سری با LED (بین LED و پین ۹ یا بین LED و GND) قرار دهید تا جریان را محدود کند.
- پایه بلندتر LED (آند) را به پین ۹ و پایه کوتاهتر (کاتد) را از طریق مقاومت به GND وصل کنید.
کد آردوینو:
C++:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید
توضیح کد:
- در تابع
setup()، پینledPinرا به عنوان خروجی تنظیم میکنیم. - در تابع
loop()، دو حلقهforداریم:
brightness از ۰ تا ۲۵۵ افزایش مییابد. در هر مرحله، analogWrite() با مقدار فعلی brightness فراخوانی میشود و LED به تدریج روشنتر میشود. delay(30) یک مکث کوتاه ایجاد میکند تا تغییر روشنایی به آرامی دیده شود.* حلقه دوم: متغیر
brightness از ۲۵۵ تا ۰ کاهش مییابد و LED به تدریج کمنورتر و در نهایت خاموش میشود.کاربردهای دیگر PWM:
- کنترل سرعت موتور DC: با تغییر چرخه کاری، میتوانیم ولتاژ متوسط اعمال شده به موتور را تغییر داده و سرعت آن را کنترل کنیم.
- کنترل سروو موتورها: اگرچه سروو موتورها از PWM خاصی استفاده میکنند که با
analogWrite()متفاوت است (نیاز به کتابخانه Servo دارد)، اما اساس کار آنها نیز بر پایه پالسهای با عرض متغیر است. - تولید صدا: با تغییر سریع چرخه کاری و فرکانس، میتوانیم صداهای مختلفی را از یک بازر یا بلندگو تولید کنیم.
- کنترل روشنایی نمایشگرها (LCD Backlight): برای تنظیم نور پسزمینه نمایشگرها.
PWM یک ابزار قدرتمند در جعبه ابزار آردوینو است که امکان کنترل دقیق و انعطافپذیر خروجیهای دیجیتال را فراهم میکند و به شما اجازه میدهد پروژههای پیچیدهتر و تعاملیتری بسازید.