آموزش کامل PWM در ESP8266 و ESP32 + کنترل شدت نور LED (گامبهگام و حرفهای)
PWM یا مدولاسیون پهنای پالس یکی از مهمترین قابلیتهای دنیای الکترونیک و میکروکنترلرهاست. وقتی با ESP8266 یا ESP32 کار میکنیم، تقریباً غیرممکن است پروژهای بسازیم که به PWM نیاز نداشته باشد: از کنترل LED و نورپردازی گرفته تا کنترل سرعت موتور، سروو، پمپ آب، رباتیک و حتی ساخت سیستمهای نورپردازی سینمای خانگی
مقالات مفید دیگر جهت آشنایی با بردهای ESP:
فهرست کامل مطالب
-
PWM چیست و چرا استفاده میشود؟
-
اصول علمی PWM (فرکانس، رزولوشن، Duty Cycle)
-
تفاوت PWM نرمافزاری و سختافزاری
-
PWM در ESP8266
-
PWM در ESP32 و سیستم LEDC
-
تعیین فرکانسهای مناسب برای LED، موتور، سروو و RGB
-
تشخیص پایههای مناسب PWM در ESP
-
انجام پروژه LED Fade در ESP8266
-
انجام پروژه LED Fade در ESP32
-
کنترل PWM با پتانسیومتر
-
کنترل RGB LED و ساخت نورپردازی حرفهای
-
کنترل موتور DC با PWM
-
کنترل سرووموتور
-
کنترل PWM از طریق وبسرور
-
جلوگیری از نویز، فلیکر و ریست شدن
-
تکنیکهای حرفهای PWM (Gamma Correction، Smooth Fade)
-
API حرفهای Fade در ESP32
-
تولید موج سینوسی و مثلثی با PWM
-
اندازهگیری PWM با اسیلوسکوپ
-
عیبیابی کامل مشکلات PWM
-
جمعبندی
۱. PWM چیست؟
PWM مخفف Pulse Width Modulation بهمعنی مدولاسیون پهنای پالس است. هدف PWM ایجاد یک ولتاژ متوسط کنترلشده است.
بهجای تغییر مقدار ولتاژ واقعی (مثلاً ۰ تا ۳٫۳ ولت)، ما سیگنال دیجیتال را خیلی سریع روشن و خاموش میکنیم.
به این ترتیب:
-
اگر 10% زمان روشن باشد → خروجی ≈ 0.3V
-
اگر 50% روشن باشد → خروجی ≈ 1.6V
-
اگر 90% روشن باشد → خروجی ≈ 3.0V
PWM شبیه دیممر دیجیتال است
اما با دقت فوقالعاده بالا و بدون تلفات انرژی.
۲. مفاهیم پایه PWM (مهم برای درک حرفهای)
۱) Duty Cycle
نسبت زمان ON به کل سیکل:
مثلاً Duty 25% یعنی:
🟩■■■ → کمنور
🟩🟩🟩🟩🟩■■■■■■ → پُرنور
۲) فرکانس PWM
تعداد سیکل در ثانیه.
-
فرکانس پایین (مثل 100Hz) → LED فلیکر میزند
-
فرکانس مناسب LED → 1kHz – 8kHz
-
فرکانس مناسب موتور → 10kHz – 20kHz
-
فرکانس مناسب فن → بالای 20kHz برای حذف صدا
۳) رزولوشن PWM
تعداد پلههای بین ۰ تا ۱۰۰٪.
در ESP مقدار رزولوشن تأثیر مستقیم روی نرمی نور یا حرکت دارد:
-
۸ بیت → ۲۵۶ پله
-
۱۰ بیت → ۱۰۲۴ پله
-
۱۲ بیت → ۴۰۹۶ پله
-
۱۶ بیت → ۶۵۵۳۶ پله
ESP32 قادر است ۱۶ بیت رزولوشن واقعی بدهد که برای نورپردازی حرفهای یک مزیت است.
۳. PWM نرمافزاری vs سختافزاری
| ویژگی | نرمافزاری (ESP8266) | سختافزاری (ESP32 – LEDC) |
|---|---|---|
| دقت | متوسط | بسیار بالا |
| تداخل با WiFi | زیاد | تقریباً صفر |
| ثبات فرکانس | متغیر | پایدار |
| تعداد کانالها | فقط یکی | ۱۶ کانال مستقل |
| مناسب موتور | خیر | عالی |
| مناسب نور RGB | بله | بسیار عالی |
۴. PWM در ESP8266
ESP8266 PWM را با تابع معروف analogWrite() در Arduino Core اجرا میکند.
ویژگیها:
-
رزولوشن: ۱۰ بیت
-
فرکانس: حدود 1kHz
-
کمی وابسته به WiFi
-
مناسب LED و RGB
-
کمتر مناسب موتور
تغییر فرکانس PWM:
۵. PWM در ESP32 (سیستم LEDC فوق حرفهای)
ESP32 دارای یک واحد سختافزاری اختصاصی است:
LED Control Peripheral (LEDC)
مزایا:
-
۱۶ کانال مستقل
-
Two Speed Mode (پرفورمنس بالا)
-
رزولوشن تا ۱۶ بیت
-
فرکانس تا ۴۰MHz
-
عدم تأثیر WiFi
-
امکان اعمال Fade بهصورت سختافزاری (!)
این سطح از امکانات در هیچ میکروکنترلر Arduino مانند وجود ندارد.
۶. فرکانس مناسب PWM برای کاربردهای مختلف
| کاربرد | فرکانس پیشنهادی |
|---|---|
| LED تکرنگ | 1kHz – 5kHz |
| RGB LED | 5kHz – 12kHz |
| فن DC | 20kHz (برای حذف صدا) |
| موتور گیربکسی | 10kHz – 20kHz |
| سروو | ثابت 50Hz |
| بوزر اکتیو | 1kHz – 3kHz |
| رله Solid State | 1kHz طبق دیتاشیت |
۷. پایههای PWM در ESP
ESP8266 (بهتر است از پایههای زیر استفاده نشود):
-
GPIO0
-
GPIO2
-
GPIO15
به دلیل وابستگی به حالت بوت.
ESP32 (پایههای فقط ورودی):
-
GPIO34
-
GPIO35
-
GPIO36
-
GPIO39
پایههای توصیهشده PWM:
GPIOs: 4, 5, 12–19, 21–23, 25–27, 32–33
۸. پروژه LED Fade در ESP8266
۹. پروژه LED Fade در ESP32
۱۰. پروژه: کنترل PWM با پتانسیومتر
مدار:
-
وسط پتانسیومتر → ADC
-
یک طرف → GND
-
طرف دیگر → 3.3V
کد ESP32:
۱۱. کنترل RGB LED
RGB = سه LED مجزا
با سه کانال PWM:
تولید رنگینکمان:
۱۲. کنترل موتور DC با PWM
هیچوقت موتور را مستقیماً به ESP وصل نکنید.
از درایورهای زیر استفاده کنید:
-
L298N
-
L293D
-
MX1508
-
BTS7960 (برای موتورهای قوی)
مثال:
۱۳. کنترل سرووموتور با PWM
در ESP8266 از کتابخانه Servo استفاده کنید.
در ESP32 بهتر است کتابخانه ESP32Servo را نصب کنید.
۱۴. کنترل PWM از طریق وبسرور
این بخش یکی از محبوبترینها در گوگل است.
اسلایدر HTML → ارسال به ESP → تغییر نور LED
۱۵. جلوگیری از فلیکر، نویز و ریست شدن ESP
مهمترین علت ریست: تغذیه ضعیف
لینک مقاله مرتبط:
«روشهای تغذیه صحیح ESP و جلوگیری از ریست شدن»
راهکارها:
-
تغذیه حداقل 1A واقعی
-
خازن 470µF + 100µF + 10µF نزدیک ماژول
-
زمین مشترک
-
حذف سیمهای بلند
-
حذف نویز با دیود و سلف هنگام کار با موتور
۱۶. تکنیکهای حرفهای PWM
۱) Gamma Correction
چشم انسان نسبت خطی به نور ندارد.
۲) Soft Fade بدون Delay
۳) موج سینوسی با PWM
برای نورپردازی حرفهای:
۱۷. API سختافزاری Fade در ESP32
ESP32 بهصورت سختافزاری Fade ایجاد میکند!
امکانات:
-
Fade در مدت زمان دلخواه
-
بدون استفاده از delay
-
کاملاً نرم و حرفهای
۱۸. تولید موج مثلثی / مربعی / سینوسی
ESP32 به دلیل LEDC حرفهای قابلیت تولید انواع موج را دارد.
برای پروژههای:
-
PWM-controlled DAC
-
Audio PWM
-
نورپردازی موزیکال
-
رانندگی حرفهای موتور
این تکنیک پرکاربرد است.
۱۹. ابزارهای تست PWM
1) اسیلوسکوپ
اگر دارید عالی است.
2) Logic Analyzer
با ۱۰۰ هزار تومان هم میتوانید بخرید.
3) مولتیمتر True RMS
برای اندازهگیری میانگین ولتاژ PWM مناسب است.
۲۰. عیبیابی کامل PWM در ESP
| مشکل | علت | راهحل |
|---|---|---|
| LED فلیکر میزند | فرکانس پایین | فرکانس >5kHz |
| موتور لرزش دارد | PWM نرمافزاری | استفاده از ESP32 |
| رنگ RGB درست نیست | رزولوشن کم | رزولوشن 12bit |
| ESP ریست میشود | تغذیه ضعیف | خازن + تغذیه 1A |
| PWM تغییر نمیکند | پایه فقط ورودی است | GPIO34–39 ممنوع |
| WiFi کند میشود | ESP8266 Busy | Delay کمتر + فرکانس پایینتر |
۲۱. جمعبندی
در این مقاله به صورت کاملاً جامع و حرفهای تمام مفاهیم PWM در ESP8266 و ESP32 را بررسی کردیم.
اکنون قادر هستید:
-
نور LED را نرم و دقیق کنترل کنید
-
RGB بسازید
-
موتور کنترل کنید
-
سروو راهاندازی کنید
-
PWM تحت وب بسازید
-
از LEDC در ESP32 برای موجهای دقیق استفاده کنید
-
مشکلات نویز و ریست را کاملاً حل کنید