- יסודות אות PWM
- הגדרת חומרה ודרישה
- דיאגרמת מעגלים עבור עמעום LED מיקרו-בקר Nu76 N76E003
- סיכות PWM במיקרו בקר N76E003 Nuvoton
- PWM רושם ופונקציות במיקרו בקר N76E003 Nuvoton
- מצבי הפעלה של PWM במיקרו בקר Nuvoton N6E003
- תכנות Nuvoton N76E003 עבור PWM
- מהבהב את הקוד ובודק את התפוקה
אפנון רוחב הדופק (PWM) הוא טכניקה נפוצה במיקרו-בקרים כדי לייצר אות דופק רציף עם תדר מוגדר ומחזור עבודה. בקיצור, PWM עוסק בשינוי רוחב הדופק בזמן שהתדירות קבועה.
אות PWM משמש בעיקר לבקרת מנוע סרוו או בהירות של נורית LED. כמו כן, מכיוון שמיקרו-בקרים יכולים לספק רק לוגיקה 1 (גבוהה) או לוגיקה 0 (נמוכה) על פינות הפלט שלה, היא אינה יכולה לספק מתח אנלוגי משתנה אלא אם משתמשים בממיר DAC או דיגיטלי לאנלוגי. במקרה כזה, ניתן לתכנת את המיקרו-בקר להוציא PWM עם מחזור חובה מגוון אשר ניתן להמיר לאחר מכן למתח האנלוגי המשתנה. בעבר השתמשנו בציוד היקפי של PWM גם במיקרו-בקרים רבים אחרים.
- ARM7-LPC2148 מדריך PWM: בקרת בהירות LED
- אפנון רוחב הדופק (PWM) באמצעות MSP430G2: בקרת בהירות LED
- יצירת PWM באמצעות מיקרו-בקר PIC עם MPLAB ו- XC8
- אפנון רוחב הדופק (PWM) ב- STM32F103C8: מהירות הבקרה של מאוורר DC
- יצירת אותות PWM על סיכות GPIO של מיקרו-בקר PIC
- מדריך PWM של פטל פי
- מדריך PWM עם ESP32
במדריך זה נתממש נורית שנשלטת באמצעות אות PWM זה מיחידת המיקרו N76E003. אנו נעריך איזה סוג של התקנת חומרה אנו נדרשים וכיצד עלינו לתכנת את המיקרו-בקר שלנו. לפני כן, בואו נבין כמה יסודות של אות PWM.
יסודות אות PWM
בתמונה למטה מוצג אות PWM קבוע.
התמונה שלעיל אינה אלא גל מרובע קבוע עם אותו זמן ON ובאותו זמן OFF. נניח שהתקופה הכוללת של האות היא שנייה אחת. לפיכך זמן ההפעלה וההפסקה הוא 500ms. אם נורית LED מחוברת על פני אות זה, נורית ה- LED תידלק למשך 500ms ותכבה למשך 500ms. לכן, בראייה פרספקטיבית, הנורית תידלק עם מחצית מהבהירות בפועל אם היא מופעלת לאות 5V ישיר ללא זמן כיבוי.
כעת, כפי שמוצג בתמונה לעיל, אם משתנה מחזור החובה, נורית ה- LED תידלק עם 25% מהבהירות בפועל באמצעות אותו עיקרון כפי שנדון קודם. אם אתה רוצה לדעת יותר וללמוד על אפנון רוחב הדופק (PWM), אתה יכול לבדוק את המאמר המקושר.
הגדרת חומרה ודרישה
כמו הדרישה של פרויקט זה היא לשלוט על LED באמצעות PWM. נדרש LED לממשק עם N76E003. מכיוון שנורית LED זמינה בלוח הפיתוח N76E003, היא תשמש בפרויקט זה. אין צורך ברכיבים אחרים.
שלא לדבר על כך, אנו זקוקים ללוח הפיתוח מבוסס מיקרו-בקר N76E003 וכן למתכנת Nu-Link. ייתכן שיידרש יחידת אספקת חשמל 5V נוספת אם המתכנת אינו משמש כמקור חשמל.
דיאגרמת מעגלים עבור עמעום LED מיקרו-בקר Nu76 N76E003
כפי שניתן לראות בתרשים שלהלן, נורית הבדיקה זמינה בתוך לוח הפיתוח והיא מחוברת ביציאה 1.4. בצד שמאל קיצוני מוצג חיבור ממשק התכנות.
סיכות PWM במיקרו בקר N76E003 Nuvoton
ל- N76E003 20 פינים מתוכם 10 פינים יכולים לשמש כ- PWM. התמונות שלהלן מציגות את סיכות ה- PWM המודגשות בתיבה המרובעת האדומה.
כפי שאנו רואים, ניתן להשתמש בסיכות PWM המסומנות גם למטרות אחרות. עם זאת, מטרה אחרת זו של הפינים לא תהיה זמינה כאשר הפינים מוגדרים לפלט PWM. פין 1.4 המשמש כסיכת פלט PWM, הוא יאבד את הפונקציונליות האחרת. אבל, זו לא בעיה שכן אין צורך בפונקציונליות אחרת לפרויקט זה.
הסיבה מאחורי בחירת סיכה 1.4 כסיכת פלט היא מכיוון שנורית הבדיקה המובנית מחוברת על אותו סיכה בלוח הפיתוח, ולכן איננו דורשים נוריות חיצוניות. עם זאת, במיקרו-בקר זה מתוך 20 פינים, 10 פינים יכולים לשמש כסיכת פלט של PWM וכל פינים של PWM אחרים יכולים לשמש למטרות הקשורות לפלט.
PWM רושם ופונקציות במיקרו בקר N76E003 Nuvoton
N76E003 משתמש בשעון מערכת או הצפת טיימר 1 מחולקת על ידי שעון PWM עם Prescaler לבחירה בין 1/1 ~ 1/128. ניתן להגדיר את תקופת ה- PWM באמצעות רישום התקופה PWMPH ו- PWMPL של 16 סיביות.
למיקרו-בקר שישה רושמי PWM בודדים המייצרים שישה אותות PWM הנקראים PG0, PG1, PG2, PG3, PG4 ו- PG5. עם זאת, התקופה זהה לכל ערוצי PWM מכיוון שהם חולקים את אותו מונה לתקופה של 16 סיביות, אך מחזור החובה של כל PWM יכול להיות שונה מאחרים, שכן כל PWM משתמש ברישום מחזור חובה של 16 סיביות בשם {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} ו- {PWM5H, PWM5L}. לפיכך, ב- N76E003, ניתן ליצור שישה יציאות PWM באופן עצמאי עם מחזורי עבודה שונים.
בניגוד למיקרו-בקרים אחרים, הפעלת ה- PWM אינה מכניסה את סיכות ה- I / O לפלט ה- PWM שלהם באופן אוטומטי. לפיכך, המשתמש צריך להגדיר את מצב פלט הקלט / פלט.
לכן, כל מה שנדרש ליישום, הצעד הראשון הוא לקבוע או לבחור איזה אחד או שניים או אפילו יותר משני סיכות קלט / פלט כפלט PWM. לאחר בחירת אחד, יש להגדיר את סיכות הקלט / פלט כמצב Push-Pull או כמעין דו כיווני ליצירת אות ה- PWM. ניתן לבחור זאת באמצעות הרישום PxM1 ו- PxM2. שני רושמים אלה מגדירים את מצבי הקלט / פלט בהם x מייצג את מספר היציאה (לדוגמה, יציאה P1.0 הרישום יהיה P1M1 ו- P1M2, עבור P3.0 זה יהיה P3M1 ו- P3M2 וכו ').
את התצורה ניתן לראות בתמונה למטה-
לאחר מכן, השלב הבא הוא לאפשר את ה- PWM בסיכות קלט / פלט מסוימות. לשם כך, המשתמש צריך להגדיר את הרישומים PIOCON0 או PIOCON1. המרשם תלוי במיפוי הסיכות שכן PIOCON0 ו- PIOCON1 שולטים בסיכות שונות התלויים באותות ה- PWM. את התצורה של שני הרשמים הללו ניתן לראות בתמונה למטה-
כפי שאנו רואים, הרישום הנ"ל שולט על 6 תצורות. עבור השאר, השתמשו ברישום PIOCON1.
לפיכך, המרשם לעיל שולט על שאר 4 התצורות.
מצבי הפעלה של PWM במיקרו בקר Nuvoton N6E003
השלב הבא הוא בחירת מצבי הפעולה של PWM. כל PWM תומך בשלושה מצבי פעולה - מצב עצמאי, סינכרוני ומצב הפעלה של זמן מת.
מצב עצמאי מספק את הפתרון שבו ניתן ליצור את ששת אותות ה- PWM באופן עצמאי. זה נדרש מקסימום פעמים כאשר יש להפעיל ולשלוט על פעולות הקשורות לד או זמזמים.
המצב הסינכרוני מגדיר את ה- PG1 / 3/5 באותה פלט PWM פאזה, זהה ל- PG0 / 2/4, כאשר ה- PG0 / 2/4 מספק אותות פלט PWM עצמאיים. זה נדרש בעיקר לבקרת מנועים תלת פאזיים.
מצב החדרת מלח-הזמן הוא קצת מורכב ליישם יישומי מנוע אמיתיים, במיוחד ביישומים תעשייתיים. ביישומים כאלה, יציאת PWM משלימה צריכה להיות הכנסת "זמן מת" המונעת פגיעה בהתקני מיתוג הכוח כגון GPIB. התצורות מוגדרות במצב זה באופן שה- PG0 / 2/4 מספק אותות פלט PWM באותה צורה כמו מצב עצמאי, אך PG1 / 3/5 מספק פלט "אותות PWM מחוץ לשלב" של PG0 / 2/4 בהתאמה. והתעלם מרשם החובה של PG1 / 3/5.
ניתן לבחור מעל שלושה מצבים באמצעות תצורת הרישום שלהלן -
התצורה הבאה היא בחירת סוגי PWM המשתמשים במרשם PWMCON1.
אז, כפי שאנו רואים, שני סוגי PWM זמינים שניתן לבחור באמצעות הרשמה לעיל. ביישור קצה, המונה של 16 סיביות משתמש בפעולה במדרון יחיד על ידי ספירה מ- 0000H לערך המוגדר של {PWMPH, PWMPL}, ואז החל מ- 0000H. צורת גל הפלט מיושרת לקצה השמאלי.
אך, במצב מיושר למרכז, מונה ה 16 סיביות משתמש בפעולת שיפוע כפול על ידי ספירה מ- 0000H ל- {PWMPH, PWMPL} ואז שוב עובר מ- {PWMPH, PWMPL} ל- 0000H על ידי ספירה לאחור. הפלט מיושר למרכז והוא שימושי ליצירת צורות גל שאינן חופפות. עכשיו סוף סוף פעולות הבקרה של PWM שניתן לבדוק ברשומות שלהלן -
כדי להגדיר את מקור השעון, השתמש במרשם בקרת השעון CKCON.
ניתן להסוות את אות הפלט PWM גם באמצעות רישום PMEN. באמצעות רישום זה, המשתמש יכול להסוות את אות הפלט על ידי 0 או 1.
הבא הוא PWM Control Control -
הרישום שלעיל שימושי להפעלת ה- PWM, לטעינת תקופה חדשה ולעומס חובה, לשלוט בדגל PWM ולנקות את מונה PWM.
תצורות הסיביות המשויכות מוצגות להלן-
כדי להגדיר את מחלק השעון, השתמש ברישום PWMCON1 למחלק השעון PWM. הסיבית החמישית משמשת ל- PWM מקובץ המאופשר במצב קבוצה ומספק את אותו מחזור חובה לשלושת זוגות ה- PWM הראשונים.
תכנות Nuvoton N76E003 עבור PWM
הקידוד פשוט והקוד המלא ששימש להדרכה זו נמצא בתחתית דף זה. ה- LED מחובר לסיכת P1.4. לפיכך יש צורך בסיכת P1.4 כדי להשתמש בפלט PWM.
בתוכנית הראשית, ההגדרות נעשות לפי הסדר המתאים. מתחת לשורות קודים מגדיר את ה- PWM ומגדיר את סיכת P1.4 כפלט PWM.
P14_PushPull_Mode;
זה משמש להגדרת הסיכה P1.4 במצב דחיפת משיכה. זה מוגדר בספריית Function_define.h כ-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
השורות הבאות המשמשות להפעלת ה- PWM בסיכה P1.4. זה מוגדר גם בספריית Function_define.h כ-
# הגדר PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = B1_PP פלט PWM1 מאפשר PWM_IMDEPENDENT_MODE;
הקוד שלמטה משמש להגדרת ה- PWM למצב עצמאי. בשנות ה Function_define.h הספרייה, הוא מוגדר כמו שיבה
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
אז עלינו להגדיר את פלט ה- PWM מסוג EDGE. בשנות ה Function_define.h הספרייה, הוא מוגדר כמו שיבה
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
הבא, אנחנו צריכים לנקות את ערך הנגד PWM אשר זמין ב SFR_Macro.h הספריה
#define set_CLRPWM CLRPWM = 1
לאחר מכן, שעון ה- PWM נבחר כשעון ה- Fsys וגורם החלוקה המשמש הוא חלוקת 64.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
שניהם מוגדרים כ-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
מתחת לשורת הקוד משמש להסוות את אות ה- PWM המוצא על ידי 0 המוגדר כ-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
אז עלינו להגדיר את פרק הזמן של אות ה- PWM. פונקציה זו מגדירה את התקופה ברשומות PWMPL ו- PWMPH. מכיוון שמדובר ברישום של 16 סיביות, הפונקציה משתמשת בשיטת העברת סיביות כדי להגדיר את תקופת ה- PWM.
בטל set_PWM_period (ערך int לא חתום) { PWMPL = (ערך & 0x00FF); PWMPH = ((ערך & 0xFF00) >> 8); }
עם זאת, פרט לתקופת 1023 ו- 8 סיביות, משתמשים יכולים גם להשתמש בערכים אחרים. הגדלת התקופה גורמת לעמעום או דהייה חלקים.
set_PWMRUN;
פעולה זו תתחיל את ה- PWM שמוגדר בספריית SFR_Macro.h כ-
#define set_PWMRUN PWMRUN = 1
לאחר מכן, בלולאת הזמן , ה- LED דולק ונמוג ברציפות.
בעוד (1) { עבור (ערך = 0; ערך <1024; ערך + = 10) { set_PWM1 (ערך); Timer1_Delay10ms (3); } עבור (ערך = 1023; ערך> 0; ערך - = 10) { set_PWM1 (ערך); Timer1_Delay10ms (2); } } }
מחזור החובה נקבע על ידי set_PWM1 (); , פונקציה המגדירה את מחזור החובה במרשם PWM1L ו- PWM1H.
בטל set_PWM1 (ערך int לא חתום) { PWM1L = (ערך & 0x00FF); PWM1H = ((ערך & 0xFF00) >> 8); set_LOAD; }
מהבהב את הקוד ובודק את התפוקה
לאחר שהקוד מוכן, פשוט הידור אותו והעלה אותו לבקר. אם אתה חדש בסביבה, בדוק את תחילת העבודה עם מדריך Nuvoton N76E003 כדי ללמוד את היסודות. כפי שניתן לראות מהתוצאה שלהלן, הקוד החזיר 0 אזהרה ו- 0 שגיאות והבהב בשיטת ההברקה המוגדרת כברירת מחדל על ידי Keil. היישום מתחיל לעבוד.
בנייה מחדש התחילה: פרויקט: PWM בניית יעד 'יעד 1' בהרכבת STARTUP.A51… הידור main.c… הידור Delay.c… קישור… גודל תוכנית: נתונים = 35.1 xdata = 0 קוד = 709 יוצר קובץ hex מתוך ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 שגיאות, 0 אזהרות. זמן בנייה שחלף: 00:00:05
החומרה מחוברת למקור החשמל והיא פעלה כצפוי. זהו הבהירות של ה- LED המשולב שהופחת ואז הוגדל כדי לציין את מחזור החובה של PWM.
את העבודה המלאה של מדריך זה ניתן למצוא בסרטון המקושר למטה. מקווה שנהנית מההדרכה ולמדת משהו שימושי אם יש לך שאלות, השאיר אותן בסעיף ההערות או שתוכל להשתמש בפורומים שלנו לשאלות טכניות אחרות.