تعديل عرض النبضة (Pulse Width Modulation (PWM)) هو أسلوب يغير عرض النبضة مع الحفاظ على تردد الموجة ثابتًا. تستخدم تقنية PWM بشكل أساسي للتحكم في سطوع LED ، وسرعة محرك DC ، والتحكم في محرك سيرفو ، أو في حالات أخرى ، حيث يتعين إنشاء إشارة تناظرية باستخدام مصدر رقمي. شرحنا PWM بالتفصيل في المقالة السابقة.
في هذا البرنامج التعليمي ، سنتحدث عن دبابيس PWM (تعديل عرض النبضة) بلوحة تطوير ESP32. يمكن استخدام جميع دبابيس GPIO بلوحة تطوير ESP32 (باستثناء Power و GND و Tx و Rx و EN) للحصول على إشارة PWM. كمثال على ESP32 PWM ، سنبني دائرة بسيطة تغير سطوع LED وفقًا لإشارات PWM.
المكونات مطلوبة
- ESP32
- يؤدى
- 330 المقاوم
- 10 كيلو وعاء
- اللوح
جيل PWM
قبل شرح جيل PWM على ESP32 ، دعونا نناقش بعض المصطلحات المرتبطة بـ PWM.
TON (في الوقت المحدد): المدة الزمنية التي تكون فيها الإشارة عالية.
TOFF (وقت الإيقاف): المدة الزمنية عندما تكون الإشارة منخفضة.
الفترة الزمنية: هي مجموع وقت إشارة PWM ووقت التوقف.
TotalPeriod = T ON + T OFF
دورة التشغيل: النسبة المئوية للوقت الذي كانت فيه الإشارة عالية أثناء فترة إشارة PWM.
دورة العمل = T ON / T Total * 100
على سبيل المثال ، إذا ظل نبضة بإجمالي فترة 10 مللي ثانية في وضع التشغيل (مرتفع) لمدة 5 مللي ثانية. بعد ذلك ، ستكون دورة العمل:
دورة العمل = 5/10 * 100 = 50٪ دورة عمل
تحتوي الدائرة على مؤشر LED واحد ، ومقاوم ، ومقياس جهد 10 كيلو. يتم توصيل دبوس LED السالب بـ GND الخاص بـ ESP32 من خلال المقاوم 330. يمكنك استخدام أي قيمة مقاومة بين 230 Ω و 500. قم بتوصيل دبوس LED الموجب بـ GPIO 16 ودبوس إشارة الوعاء بدبوس ADC1 (VP) في ESP32.
شرح كود ESP32 PWM
الكود الكامل موجود في نهاية الصفحة.
لا يتطلب هذا الرمز أي مكتبة ، لذا ابدأ الكود الخاص بك عن طريق تحديد الدبوس ، يتم إرفاق LED به في حالتي ، استخدمت GPIO 16 لتوصيل مؤشر LED.
const int ledPin = 16 ؛ // 16 يتوافق مع GPIO16
بعد ذلك ، قم بتعيين خصائص إشارة PWM في الأسطر التالية. قمت بضبط تردد PWM على 9000 ، والدقة على 10 ، يمكنك تغييرها لتوليد إشارات PWM مختلفة. تدعم لوحات ESP32 دقة PWM من 1 بت إلى 16 بت. تحتاج أيضًا إلى اختيار قناة PWM. يحتوي ESP32 على إجمالي 16 (0 إلى 15) قناة PWM.
التكرار كثافة العمليات = 9000 ؛ const int ledChannel = 0 ؛ دقة كثافة العمليات = 10 ؛
الآن داخل وظيفة الإعداد الفارغ () ، قم بتكوين LED PWM بالخصائص التي قمت بتعيينها مسبقًا باستخدام وظيفة ledcSetup () . في السطر التالي ، حدد دبوس GPIO حيث يتم توصيل مؤشر LED. و ledcAttachPin () يتم استخدام الدالة لتحديد دبوس GPIO والقناة التي يعمل على إنشاء إشارة. في حالتي ، استخدمت ledPin وهو GPIO 16 وقناة ledChannel التي تتوافق مع القناة 0.
إعداد باطل () {Serial.begin (9600) ؛ إعداد ledc (قناة led ، التكرار ، الدقة) ؛ ledcAttachPin (ledPin ، ledChannel) ؛ }
في الحلقة الفارغة ، اقرأ الدبوس التناظري حيث يتم توصيل الوعاء وقم بتخزين القراءة في متغير يسمى "dutyCycle" . سيزداد سطوع LED أو ينقص وفقًا لدوران مقياس الجهد. و ledcWrite () هي مشابهة جدا ل analogWrite ().
حلقة باطلة () {dutyCycle = analogRead (A0) ؛ ledcWrite (ledChannel ، dutyCycle) ؛ تأخير (15) ؛ }
اختبار إشارات ESP32 PWM
لاختبار إشارات ESP32 PWM ، قم بتوصيل مؤشر LED ومقياس الجهد وفقًا لمخطط الدائرة ، وقم بتحميل الرمز إلى ESP32 الخاص بك. تأكد من تحديد اللوحة الصحيحة ومنفذ COM. الآن قم بتدوير مقياس الجهد لزيادة أو تقليل سطوع LED.
يظهر العمل الكامل في الفيديو أدناه. تحقق أيضًا من المشاريع الأخرى القائمة على ESP32 باتباع الرابط.