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

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

مفهوم Duty Cycle در سیگنال 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 اجرا شود. اگر جعبهٔ بالا بیش از حد سیاه/خالی ماند، صفحه را رفرش کنید یا از دکمهٔ «باز کردن در Wokwi» بالا استفاده کنید.

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