- מהו PWM (דופק עם אפנון)?
- PWM ב- STM32
- רכיבים נדרשים
- פרטי סיכה של STM32
- תרשים מעגלים וחיבורים
- תכנות STM32
במאמר הקודם ראינו על המרת ADC באמצעות STM32. במדריך זה נלמד על PWM (Modulation Width Modulation) ב- STM32 וכיצד נוכל לשלוט על בהירות ה- LED או על מהירות המאוורר DC בטכניקת PWM.
אנו יודעים שיש שני סוגים של אותות: אנלוגי ודיגיטלי. לאותות אנלוגיים יש מתח כמו (3V, 1V… וכו ') ולאותות דיגיטליים יש (1' ו -0 '). יציאות החיישנים הן מאותות אנלוגיים והאותות האנלוגיים הללו מומרים לדיגיטל באמצעות ADC, מכיוון שמיקרו-בקרים מבינים רק דיגיטלי. לאחר עיבוד ערכי ADC אלה, שוב יש להמיר את הפלט לצורה אנלוגית כדי להניע את המכשירים האנלוגיים. לשם כך אנו משתמשים בשיטות מסוימות כמו ממירי PWM, ממירים דיגיטליים לאנלוגיים (DAC) וכו '.
מהו PWM (דופק עם אפנון)?
PWM היא דרך לשלוט במכשירים האנלוגיים המשתמשים בערך דיגיטלי כמו בקרת מהירות המנוע, בהירותם של נורית וכו '. אנו יודעים כי המנוע והליד עובדים על אות אנלוגי. אך ה- PWM אינו מספק פלט אנלוגי טהור, PWM נראה כמו אות אנלוגי שנעשה על ידי פולסים קצרים, המסופק על ידי מחזור חובה.
מחזור חובה של ה- PWM
אחוז הזמן בו אות ה- PWM נשאר HIGH (בזמן) נקרא כמחזור חובה. אם האות תמיד פועל הוא במחזור חובה של 100% ואם הוא תמיד כבוי הוא מחזור חובה של 0%.
מחזור עבודה = הפעל זמן / (הפעל זמן + כיבוי זמן)
PWM ב- STM32
STM32F103C8 כולל 15 סיכות PWM ו -10 סיכות ADC. ישנם 7 טיימרים וכל פלט PWM מסופק על ידי ערוץ המחובר ל -4 טיימרים. יש לו רזולוציית PWM של 16 סיביות (2 16), כלומר מונים ומשתנים יכולים להיות גדולים כמו 65535. עם קצב שעון של 72 מגה הרץ, יציאת PWM יכולה להיות תקופה מקסימלית של כמילישניות.
- הערך של 65535 נותן בהירות מלאה של נורית ומהירות מלאה של מאוורר DC (מחזור עבודה 100%)
- ערך זהה של 32767 נותן בהירות חדה של נורית ומהירות של מאוורר DC (50% מחזור עבודה)
- והערך של 13107 נותן (20%) מהירות (20%) מהירות (20% מחזור חובה)
במדריך זה אנו משתמשים בפוטנציומטר וב- STM32 כדי לשנות את בהירות ה- LED ואת המהירות של מאוורר DC על ידי טכניקת PWM. LCD 16x2 משמש להצגת ערך ADC (0-4095) ולמשתנה המתוקן (ערך PWM) המוצא (0-65535).
להלן מספר דוגמאות PWM עם מיקרו-בקר אחר:
- יצירת PWM באמצעות מיקרו-בקר PIC עם MPLAB ו- XC8
- בקרת מנוע סרוו עם פטל פי
- דימר LED מבוסס Arduino באמצעות PWM
- אפנון רוחב הדופק (PWM) באמצעות MSP430G2
בדוק את כל הפרויקטים הקשורים ל- PWM כאן.
רכיבים נדרשים
- STM32F103C8
- מאוורר DC
- ULN2003 נהג מנוע IC
- LED (אדום)
- LCD (16x2)
- פוטנציומטר
- קרש לחם
- סוללה 9V
- חוטי מגשר
מאוורר DC: מאוורר ה- DC המשמש כאן הוא מאוורר BLDC ממחשב ישן. הוא דורש אספקה חיצונית ולכן אנו משתמשים בסוללת DC 9V.
ULN2003 IC Driver Driver: הוא משמש להנעת המנוע לכיוון אחד מכיוון שהמנוע הוא חד כיווני וגם כוח חיצוני נדרש למאוורר. למידע נוסף על מעגל נהגי מנוע מבוסס ULN2003 כאן. להלן תרשים התמונות של ULN2003:
סיכות (IN1 עד IN7) הן סיכות קלט ו- (OUT 1 ל- OUT 7) הן סיכות יציאה מתאימות. ל- COM ניתן מתח מקור חיובי הנדרש למכשירי פלט.
נורת LED: משתמשים בצבע אדום אדום אשר פולט אור אדום. ניתן להשתמש בכל צבעים.
פוטנציומטרים: משתמשים בשני פוטנציומטרים, אחד מהם הוא עבור מחלק מתח עבור קלט אנלוגי ל- ADC ואחר נועד לשליטה על בהירות הנורית.
פרטי סיכה של STM32
כפי שניתן לראות סיכות PWM מסומנות בתבנית גל (~), ישנם 15 פינים כאלה, סיכות ADC מיוצגות בצבע ירוק, 10 פינים ADC נמצאים שם המשמשים לכניסות אנלוגיות.
תרשים מעגלים וחיבורים
חיבורי STM32 עם רכיבים שונים מוסברים להלן:
STM32 עם קלט אנלוגי (ADC)
הפוטנציומטר הקיים בצד שמאל של המעגל משמש כווסת מתח המווסת מתח מהסיכה 3.3V. הפלט מהפוטנציומטר כלומר הסיכה המרכזית של הפוטנציומטר מחובר לסיכת ADC (PA4) של STM32.
STM32 עם LED
סיכת הפלט STM32 PWM (PA9) מחוברת לסיכה החיובית של ה- LED דרך נגד סדרתי וקבל.
נורית LED עם נגד וקבל
נגד בסדרה וקבל במקביל מחוברים עם LED ליצירת גל אנלוגי נכון מפלט PWM כיוון שהפלט האנלוגי אינו טהור מהפיקוח ישירות מפין PWM.
STM32 עם ULN2003 & ULN2003 עם מאוורר
פין פלט STM32 PWM (PA8) מחובר לסיכת הקלט (IN1) של ULN2003 IC וסיכת הפלט המתאימה (OUT1) של ULN2003 מחוברת לחוט שלילי של מאוורר DC.
סיכה חיובית של מאוורר DC מחוברת לסיכת COM של ULN2003 IC והסוללה החיצונית (9V DC) מחוברת גם היא לאותו סיכת COM של ULN2003 IC. סיכת GND של ULN2003 מחוברת לסיכה GND של STM32 והסוללה השלילית מחוברת לאותו סיכה GND.
STM32 עם LCD (16x2)
פין LCD לא |
שם פין LCD |
שם פין STM32 |
1 |
קרקע (GND) |
קרקע (G) |
2 |
VCC |
5V |
3 |
VEE |
סיכה ממרכז הפוטנציומטר |
4 |
בחר הרשמה (RS) |
PB11 |
5 |
קריאה / כתיבה (RW) |
קרקע (G) |
6 |
הפעל (EN) |
PB10 |
7 |
נתונים נתונים 0 (DB0) |
אין חיבור (NC) |
8 |
נתונים ביט 1 (DB1) |
אין חיבור (NC) |
9 |
נתונים ביט 2 (DB2) |
אין חיבור (NC) |
10 |
נתונים ביט 3 (DB3) |
אין חיבור (NC) |
11 |
נתונים ביט 4 (DB4) |
PB0 |
12 |
נתונים ביט 5 (DB5) |
PB1 |
13 |
נתונים ביט 6 (DB6) |
PC13 |
14 |
נתונים ביט 7 (DB7) |
PC14 |
15 |
LED חיובי |
5V |
16 |
LED שלילי |
קרקע (G) |
פוטנציומטר בצד ימין משמש לבקרת הניגודיות של צג ה- LCD. הטבלה שלעיל מציגה את החיבור בין LCD ל- STM32.
תכנות STM32
כמו ההדרכה הקודמת, תיכנתנו את ה- STM32F103C8 עם Arduino IDE דרך יציאת USB ללא שימוש במתכנת FTDI. כדי ללמוד על תכנות STM32 עם Arduino IDE לחץ על הקישור. אנחנו יכולים להמשיך בתכנות כמו בארדואינו. הקוד השלם ניתן בסוף.
בקידוד זה אנו ניקח ערך אנלוגי קלט מסיכת ADC (PA4) המחובר לסיכה המרכזית של הפוטנציומטר השמאלי ואז להמיר את הערך האנלוגי (0-3.3V) לפורמט דיגיטלי או שלם (0-4095). ערך דיגיטלי זה ניתן בנוסף כפלט PWM לבקרת בהירות LED ומהירות מאוורר DC. LCD 16x2 משמש להצגת ADC וערך ממופה (ערך פלט PWM).
ראשית עלינו לכלול קובץ כותרת LCD, להכריז על סיכות LCD ולאתחל אותם באמצעות הקוד שלמטה. למידע נוסף על ממשק LCD עם STM32 כאן.
#לִכלוֹל
לאחר מכן הצהירו והגדירו את שמות הסיכות באמצעות הסיכה של STM32
const int analoginput = PA4; // קלט מפוטנציומטר const int led = PA9; // פלט LED const int מאוורר = PA8; // פלט מאוורר
כעת בתוך ההתקנה () , עלינו להציג כמה הודעות ולנקות אותן לאחר מספר שניות ולציין את סיכת הכניסה ואת סיכות הפלט של PWM
lcd.begin (16,2); // הכנת LCD lcd.clear (); // מנקה את LCD lcd.setCursor (0,0); // מגדיר את הסמן בשורה 0 ובעמודה 0 lcd.print ("מעגל מעגל"); // מציג מעגל Digest lcd.setCursor (0,1); // מגדיר את הסמן בעמודה 0 ובשורה 1 lcd.print ("PWM באמצעות STM32"); // מציג PWM באמצעות עיכוב STM32 (2000); // זמן עיכוב lcd.clear (); // מנקה את pinMode LCD (קלט אנלוגי, INPUT); // הגדר אנלוגי קלט במצב סיכה כ- pinMode קלט (led, PWM); // הגדר מצב סיכה הוביל כ- PinMode של פלט PWM (מאוורר, PWM); // הגדר מאוורר במצב סיכה כפלט PWM
סיכת הכניסה האנלוגית (PA4) מוגדרת כ- INPUT על ידי pinMode (כניסה אנלוגית, INPUT), סיכת ה- LED מוגדרת כפלט PWM על ידי pinMode (led, PWM) וסיכת המאוורר מוגדרת כ- PWM על ידי pinMode (מאוורר, PWM) . כאן מחברים את סיכות הפלט של PWM ל- LED (PA9) ומאוורר (PA8).
לאחר מכן בפונקציית loop void () , אנו קוראים את האות האנלוגי מהסיכה ADC (PA4) ואוחסנים אותו במשתנה שלם הממיר מתח אנלוגי לערכים שלמים דיגיטליים (0-4095) על ידי שימוש בקוד למטה int valueadc = analogRead (analoginput));
דבר חשוב לציין כאן הוא פינים של PWM שהם ערוצים של STM32 עם רזולוציה של 16 סיביות (0-65535) ולכן עלינו למפות את זה עם ערכים אנלוגיים באמצעות פונקציית מפה כמו להלן
int result = map (valueadc, 0, 4095, 0, 65535).
אם לא משתמשים במיפוי לא נקבל מהירות מלאה של מאוורר או בהירות מלאה של נורית LED על ידי שינוי הפוטנציומטר.
לאחר מכן אנו כותבים את פלט ה- PWM ל- LED על ידי שימוש בפונקציות pwmWrite (led, result) ו- PWM למאוורר באמצעות פונקציות pwmWrite (מאוורר, תוצאה ).
לבסוף אנו מציגים את ערך הקלט האנלוגי (ערך ADC) ואת ערכי הפלט (ערכי PWM) בתצוגת LCD באמצעות הפקודות הבאות
lcd.setCursor (0,0); // מגדיר סמן בשורה 0 ובעמודה 0 lcd.print ("ADC value ="); // מדפיס את המילים "" lcd.print (valueadc); // מציג valueadc lcd.setCursor (0,1); // מגדיר את הסמן בעמודה 0 ובשורה 1 lcd.print ("פלט ="); // מדפיס את המילים "" lcd.print (תוצאה); // מציג תוצאת ערך
הקוד השלם עם סרטון הדגמה מופיע להלן.