אפנון רוחב הדופק (PWM) הוא טכניקה המשתנה את רוחב הדופק תוך שמירה על תדירות הגל קבועה. טכניקת PWM משמשת בעיקר לשליטה על בהירות ה- LED, מהירות מנוע DC, שליטה במנוע סרוו, או במקרים אחרים, כאשר יש לייצר אות אנלוגי באמצעות מקור דיגיטלי. הסברנו את ה- PWM בפירוט במאמר הקודם.
במדריך זה נדבר על סיכות PWM (אפנון רוחב הדופק) של לוח הפיתוח ESP32. ניתן להשתמש בכל פינים GPIO של לוח הפיתוח ESP32 (למעט כוח, GND, Tx, Rx ו- EN) לקבלת אות ה- PWM. כדוגמה של ESP32 PWM, נבנה מעגל פשוט שמשנה את בהירות LED על פי אותות PWM.
רכיבים נדרשים
- ESP32
- לד
- נגד 330 Ω
- סיר 10k
- קרש לחם
דור ה- PWM
לפני שנסביר את דור ה- PWM ב- ESP32, בואו נדון בכמה מונחים הקשורים ל- PWM.
TON (בזמן): משך הזמן בו האות גבוה.
TOFF (זמן כבוי): משך הזמן בו האות נמוך.
תקופה: זהו סכום זמן ההפעלה וההפסקה של אות ה- PWM.
TotalPeriod = T ON + T OFF
מחזור חובה: אחוז הזמן בו האות היה גבוה בתקופת האות PWM.
מחזור חובה = T ON / T סה"כ * 100
לדוגמא, אם דופק עם תקופה כוללת של 10ms נשאר פועל (גבוה) למשך 5ms. ואז, מחזור החובה יהיה:
מחזור עבודה = 5/10 * 100 = 50% מחזור עבודה
המעגל מכיל נורית LED אחת, נגד ופוטנציומטר 10K. הסיכה השלילית של ה- LED מחוברת ל- GND של ESP32 באמצעות נגר של 330 Ω. אתה יכול להשתמש בכל ערך נגד בין 230 Ω ל 500 Ω. חבר את סיכת ה- LED החיובית ל- GPIO 16 ואת סיכת האות של פוט לסיכת ADC1 (VP) של ESP32.
הסבר קוד ל- ESP32 PWM
הקוד השלם ניתן בסוף העמוד.
קוד זה אינו דורש שום ספריה, אז התחל את הקוד שלך על ידי הגדרת הסיכה, הנורית מחוברת אליו. במקרה שלי, השתמשתי ב- GPIO 16 לחיבור ה- LED.
const int ledPin = 16; // 16 תואם ל- GPIO16
לאחר מכן, הגדר את מאפייני האות PWM בשורות הבאות. אני מגדיר את תדר ה- PWM ל- 9000, ואת הרזולוציה ל- 10, אתה יכול לשנות אותו כדי ליצור אותות PWM שונים. לוחות ESP32 תומכים ברזולוציית PWM מ -1 ביט ל -16 ביט. עליך גם לבחור ערוץ PWM. ESP32 כולל בסך הכל 16 (0 עד 15) ערוצי PWM.
const int freq = 9000; const int ledChannel = 0; רזולוציית const int = 10;
כעת בתוך פונקציית ההתקנה הריקנית () , הגדר את LED PWM עם המאפיינים שהגדרת קודם לכן באמצעות פונקציית ledcSetup () . בשורה הבאה, הגדירו את סיכת ה- GPIO בה מחובר ה- LED. LedcAttachPin () הפונקציה משמשת להגדרת סיכת GPIO והערוץ שיוצר את האות. במקרה שלי השתמשתי ב- ledPin שהוא GPIO 16 ו- ledChannel המתאים לערוץ 0.
הגדרת חלל () {Serial.begin (9600); ledcSetup (ledChannel, freq, רזולוציה); ledcAttachPin (ledPin, ledChannel); }
ב הלולאה הריקה, לקרוא את הסיכה האנלוגית שבו הקופה מחוברת ולאחסן את הקריאה במשתנה שנקראה "דיוטי סייקל" . בהירות ה- LED תגדל או תפחת בהתאם לסיבוב הפוטנציומטר. ה- ledcWrite () דומה מאוד ל- analogWrite ().
לולאה בטלה () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutycycle); עיכוב (15); }
בדיקת אותות ESP32 PWM
כדי לבדוק את אותות ה- PWM של ESP32, חבר את נורית הנורה והפוטנציומטר לפי דיאגרמת המעגל והעלה את הקוד ל- ESP32 שלך. ודא שנבחר הלוח הנכון ויציאת COM. כעת סובב את הפוטנציומטר כדי להגדיל או להקטין את בהירות LED.
עבודה מלאה מוצגת בסרטון הבא. כמו כן, בדוק פרויקטים אחרים מבוססי ESP32 על ידי לחיצה על הקישור.