مبتدی⏱ 13 دقیقه مطالعه

PWM (مدولاسیون پهنای پالس) روشی است برای شبیه‌سازی خروجی آنالوگ با استفاده از یک سیگنال دیجیتال که به‌سرعت روشن و خاموش می‌شود. با تغییر «درصد زمان روشن بودن» (Duty Cycle)، می‌توانیم روشنایی LED یا سرعت موتور DC را کنترل کنیم.

PWM (تصویر نمادین)

ایجاد یک سیگنال PWM

PYTHON
from machine import Pin, PWM
from time import sleep

pwm_led = PWM(Pin(2))
pwm_led.freq(1000)   # فرکانس ۱ کیلوهرتز

# نرم شدن و کم‌نور شدن تدریجی LED
while True:
    for duty in range(0, 1024, 10):
        pwm_led.duty(duty)
        sleep(0.01)
    for duty in range(1023, -1, -10):
        pwm_led.duty(duty)
        sleep(0.01)

در میکروپایتون ESP32، مقدار duty معمولاً بین ۰ (خاموش کامل) تا ۱۰۲۳ (روشن کامل) تنظیم می‌شود (در برخی نسخه‌ها با duty_u16 بازهٔ ۰ تا ۶۵۵۳۵ نیز در دسترس است).

💡 نکته

برای کنترل سروموتور نیز از همین کلاس PWM استفاده می‌شود، اما با فرکانس ۵۰ هرتز و duty متناسب با زاویهٔ موردنظر.

مثال: کنترل روشنایی با پتانسیومتر

در درس بعدی با ADC آشنا می‌شوید و می‌توانید مقدار پتانسیومتر را بخوانید و مستقیماً به duty سیگنال PWM نگاشت کنید تا روشنایی LED را با چرخاندن یک پیچ کنترل کنید.

کم‌نور و پرنور شدن تدریجی LED با PWM باز کردن در Wokwi ↗

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود.

❓ بازهٔ معمول مقدار duty در PWM ده‌بیتی ESP32 چقدر است؟
طراحی و توسعه: امین شیخ نجدیglcd.ir