- מהו אות PWM?
- כיצד להמיר אות PWM למתח אנלוגי?
- תרשים מעגל:
- תכנות MSP לאות PWM:
- בקרת בהירות של LED עם PWM:
מדריך זה הוא חלק מסדרה של מדריכי LaunchPad של MSP430G2 בה אנו לומדים להשתמש ב- MSP430G2 LaunchPad מבית Texas Instruments. עד כה למדנו את יסודות הלוח וכיסינו כיצד לקרוא מתח אנלוגי, להתממשק LCD עם MSP430G2 וכו '. כעת אנו ממשיכים בשלב הבא של למידה על PWM ב- MSP430G2. אנו נעשה זאת על ידי שליטה על בהירות ה- LED על ידי שינוי הפוטנציומטר. אז הפוטנציומטר יחובר לסיכה אנלוגית של ה- MSP430 כדי לקרוא את המתח האנלוגי שלו, ולכן מומלץ לדעת לעבור על מדריך ה- ADC לפני שתמשיך.
מהו אות PWM?
אפנון רוחב הדופק (PWM) הוא אות דיגיטלי הנפוץ ביותר במעגלי בקרה. אות זה מוגדר גבוה (3.3 וולט) ונמוך (0 וולט) בזמן ומהירות מוגדרים מראש. הזמן שבמהלך האות נשאר גבוה נקרא "בזמן" והזמן בו האות נשאר נמוך נקרא "זמן כיבוי". ישנם שני פרמטרים חשובים עבור PWM כמפורט להלן:
מחזור חובה של ה- PWM:
אחוז הזמן בו אות ה- PWM נשאר HIGH (בזמן) נקרא כמחזור חובה. אם האות תמיד פועל הוא במחזור חובה של 100% ואם הוא תמיד כבוי הוא מחזור חובה של 0%.
מחזור עבודה = הפעל זמן / (הפעל זמן + כיבוי זמן)
תדירות PWM:
התדירות של אות PWM קובעת כמה מהר PWM משלים תקופה אחת. תקופה אחת הושלמה להפעלה וכיבוי של אות PWM כפי שמוצג באיור לעיל. במדריך שלנו התדר הוא 500Hz מכיוון שהוא ערך ברירת המחדל שנקבע על ידי ה- Energia IDE.
יש שפע של יישומים לאותות PWM בזמן אמת, אך כדי לתת לך מושג ניתן להשתמש באות ה- PWM לשליטה במנועי סרוו וניתן להמיר אותו גם למתח אנלוגי שיכול לשלוט על בהירות הבהירות של נורית הנורית. בואו נלמד קצת כיצד ניתן לעשות זאת.
להלן מספר דוגמאות PWM עם מיקרו-בקר אחר:
- יצירת PWM באמצעות מיקרו-בקר PIC עם MPLAB ו- XC8
- בקרת מנוע סרוו עם פטל פי
- דימר LED מבוסס Arduino באמצעות PWM
בדוק את כל הפרויקטים הקשורים ל- PWM כאן.
כיצד להמיר אות PWM למתח אנלוגי?
כדי לאותת PWM למתח אנלוגי נוכל להשתמש במעגל שנקרא RC filter. זהו מעגל פשוט ונפוץ ביותר למטרה זו. המעגל כולל רק נגד וקבל בסדרה כפי שמוצג במעגל שלהלן.
אז מה שבעצם קורה כאן הוא שכאשר כאשר האות PWM גבוה הקבל נטען למרות הנגד וכאשר האות PWM הולך ונמוך הקבל מתפזר דרך המטען המאוחסן. בדרך זו תמיד יהיה לנו מתח קבוע ביציאה שיהיה פרופורציונאלי למחזור החובה של PWM.
בגרף המוצג לעיל, הצבע הצהוב הוא אות ה- PWM והצבע הכחול הוא המתח האנלוגי המוצא. כפי שאתה יכול לראות, גל הפלט לא יהיה גל DC טהור, אך הוא אמור מאוד לעבוד עבור היישום שלנו. אם אתה צריך גל DC טהור עבור סוג אחר של יישום, עליך לתכנן מעגל מיתוג.
תרשים מעגל:
תרשים המעגל די פשוט; פשוט יש לו פוטנציומטר ונגד וקבל ליצירת מעגל RC ולד עצמו. הפוטנציומטר משמש לספק מתח אנלוגי על בסיסו ניתן לשלוט על מחזור חובת האות של PWM. פלט הסיר מחובר לפין P1.0 המסוגל לקרוא מתחים אנלוגיים. אז עלינו לייצר אות PWM, שניתן לעשות זאת באמצעות סיכה P1.2, אות PWM זה נשלח למעגל המסנן RC כדי להמיר את אות ה- PWM למתח אנלוגי אשר לאחר מכן ניתן לנורית.
חשוב מאוד להבין שלא כל הסיכה בלוח ה- MSP יכולה לקרוא מתח אנלוגי או יכולה לייצר סיכות PWM. הסיכות הספציפיות שיכולות לבצע את המשימות הספציפיות מוצגות באיור למטה. השתמש בזה תמיד כהנחיה לבחירת הסיכות שלך לתכנות.
הרכיבו את המעגל השלם כמוצג לעיל, תוכלו להשתמש בקרש לחם ובכמה חוטי מגשר ולבצע את החיבורים בקלות. לאחר סיום החיבורים הלוח שלי נראה כמו שמוצג להלן.
תכנות MSP לאות PWM:
לאחר שהחומרה מוכנה נוכל להתחיל בתכנות שלנו. הדבר הראשון בתוכנית הוא להכריז על הסיכות שאנו הולכים להשתמש בהן. כאן אנו נשתמש בסיכה מספר 4 (P1.2) כסיכת הפלט שלנו מכיוון שיש לו את היכולת ליצור PWM. אז אנו יוצרים משתנה ומקצים את שם הסיכה כך שקל להתייחס אליו בהמשך התוכנית. התוכנית המלאה ניתנת בסוף.
int PWMpin = 4; // אנו משתמשים בסיכה הרביעית במודול MSP כסיכת PWM
לאחר מכן אנו נכנסים לפונקציית ההתקנה . לא משנה מה קוד כתוב כאן יבוצע רק פעם אחת, כאן אנו מצהירים כי אנו משתמשים 4 זה ה פיני כמו סיכת פלט מאז PWM הוא פונקציונאלי תפוקה. שים לב שהשתמשנו כאן במשתנה PWMpin במקום במספר 4 כך שהקוד נראה משמעותי יותר
הגדרת חלל () { pinMode (PWMpin, OUTPUT); // ה- PEMpin מוגדר כ- Outptut }
לבסוף אנו נכנסים לפונקציית הלולאה . כל מה שאנחנו כותבים כאן יבוצע שוב ושוב. בתוכנית זו עלינו לקרוא את המתח האנלוגי וליצור אות PWM בהתאם וזה צריך לקרות שוב ושוב. אז ראשית נתחיל בקריאת המתח האנלוגי מהסיכה A0 מכיוון שחיברנו אליו פוטנציומטר.
כאן אנו קוראים את הערך באמצעות הפונקציה AanalogRead , פונקציה זו תחזיר ערך בין 0-1024 בהתבסס על ערך המתח המופעל על הסיכה. לאחר מכן אנו שומרים ערך זה למשתנה הנקרא "val" כמוצג להלן
int val = analogRead (A0); // קרא את ערך ה- ADC מהסיכה A0
עלינו להמיר את הערכים 0 עד 1024 מ- ADC לערכים 0 עד 255 כדי לתת אותו לפונקציית PWM. מדוע עלינו להמיר זאת? אני אגיד את זה בקרוב, אבל בינתיים רק תזכור שאנחנו צריכים להתגייר. כדי להמיר קבוצה אחת של ערכים למערך אחר של אנרג'יה יש פונקציית מפה הדומה לארדואינו. אז אנו ממירים את הערכים 0-1204 ל- 0-255 ושומרים אותו בחזרה במשתנה "val".
val = מפה (val , 0, 1023, 0, 255); // ה- ADC ייתן ערך של 0-1023 להמיר אותו ל- 0-255
כעת יש לנו ערך משתנה של 0-255 בהתבסס על מיקום הפוטנציומטר. כל שעלינו לעשות הוא להשתמש בערך זה על סיכת ה- PWM ניתן לעשות זאת באמצעות השורה הבאה.
analogWrite (PWMpin, val); // כתוב את הערך הזה לסיכת ה- PWM.
בוא נחזור לשאלה מדוע 0-255 נכתב לסיכת PWM. ערך זה 0-255 קובע את מחזור החובה של אות ה- PWM. לדוגמא אם ערך האות הוא 0 אז זה אומר שמחזור החובה הוא 0% עבור 127 זה 50% ועבור 255 זה 100% בדיוק כמו מה שמוצג ומוסבר בראש מאמר זה.
בקרת בהירות של LED עם PWM:
לאחר שהבנתם את החומרה והקוד, הגיע הזמן להשתעשע בעבודת המעגל. העלה את הקוד ללוח MSP430G2 וסובב את כפתור הפוטנציומטר. כאשר אתה מסובב את הכפתור המתח על סיכה 2 ישתנה אשר יקרא על ידי המיקרו-בקר ולפי המתח אותות ה- PWM ייווצרו על סיכה 4. ככל שהמתח גדול יותר, כך מחזור החובה יהיה גדול יותר ולהיפך.
אות PWM זה הופך למתח אנלוגי כדי להדליק נורית LED. הבהירות של LED היא ביחס ישר מחזור עבודת אות PWM. מלבד הנורית על לוח הלחם ניתן להבחין גם בנורת ה- SMD (צבע אדום) המבהירה את בהירותה בדומה למוביל הלוח. זה LED מחובר גם לאותו סיכה, אך אין לו רשת RC ולכן הוא למעשה מהבהב מהר מאוד. אתה יכול לנער את הלוח בחדר חשוך כדי לבדוק את אופיו המהבהב. את העבודה המלאה ניתן לראות בסרטון למטה.
זה הכל לעת עתה אנשים, למדנו כיצד להשתמש באותות PWM בלוח MSP430G2, במדריך הבא שלנו נלמד כמה קל לשלוט על מנוע סרוו באמצעות אותם אותות PWM. אם יש לך ספקות פרסם אותם בסעיף ההערות למטה או בפורומים לעזרה טכנית.