תוכן עניינים:

צור גל PWM עם מיקרו -בקר PIC: 6 שלבים
צור גל PWM עם מיקרו -בקר PIC: 6 שלבים

וִידֵאוֹ: צור גל PWM עם מיקרו -בקר PIC: 6 שלבים

וִידֵאוֹ: צור גל PWM עם מיקרו -בקר PIC: 6 שלבים
וִידֵאוֹ: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, נוֹבֶמבֶּר
Anonim
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC
צור גל PWM עם מיקרו -בקר PIC

מהו PWM?

PWM עומד למודול רוחב הדופק היא טכניקה שבה רוחב הדופק משתנה.

כדי להבין מושג זה יש לשקול בבירור דופק שעון או כל אות גל מרובע שיש לו מחזור עבודה של 50% כלומר תקופת טון וטוף זהה, משך הזמן הכולל שלגביו האות היה גבוה והמשך שעבורו האות היה נמוך נקרא סך הכל תקופת זמן.

לתמונה המוצגת למעלה יש לגל זה מחזור עבודה של 50%

מחזור תפקיד = (זמן הפעלה / זמן כולל)*100

זמן ON - זמן שהאות שלו היה גבוה

זמן כבוי - זמן אויב אשר האות היה נמוך זמן כולל - סך כל זמן הדופק (זמן הפעלה וכיבוי)

שלב 1: בחירת מיקרו -בקר

בחירת מיקרו -בקר
בחירת מיקרו -בקר

בחירת מיקרו -בקר מתאים לפרויקט זהו החלק המהותי בפרויקט ניתן לייצר אותות PWM בבקרו -מיקרו עם ערוצי PWM (רשימות CCP). לפרויקט זה אני מתכנן להישאר עם pic16f877. תוכל להוריד את קישור גליון הנתונים המופיע להלן

גליון הנתונים של PIC16F877a לחץ כאן

מודול CCP אחראי לייצור אות PWM. CCP1 ו- CCP2 כפולים עם PORTC. PORTC הוא נמל דו כיווני רחב של 8 סיביות. רשם כיווני הנתונים המתאים הוא TRISC. הגדרת bit TRISC (= 1) תגרום לקחת את סיכת ה- PORTC המתאימה כקלט. ניקוי ביט TRISC (= 0) יהפוך את סיכת ה- PORTC המתאימה לפלט.

TRISC = 0; // ניקוי ביט זה יהפוך את PORTC לפלט

שלב 2: הגדר מודול CCP

תצורת מודול CCP
תצורת מודול CCP
תצורת מודול CCP
תצורת מודול CCP

מק ס - מודולים Capture/השוואה/PWM

כל מודול Capture/Compare/PWM (CCP) מכיל רישום של 16 סיביות שיכול לפעול כ:

• רשום לכידת 16 סיביות

• רשום השוואת 16 סיביות

• פנקס מחזורי Master/Slave Duty של PWM

קבע את תצורת CCP1CON למצב PWM

תיאור הרשמה

CCPxCON רישום זה משמש להגדרת מודול ה- CCP לאחסון Capture/Compare/PWM.

CCPRxL רישום זה מחזיק את סיביות 8 Msb של PWM, 2 סיביות תחתונות יהיו חלק מרשם CCPxCON.

TMR2 מונה ריצה חופשי אשר יושווה עם CCPR1L ו- PR2 ליצירת פלט PWM.

כעת אשתמש בינארי לייצג את הביטים להגדרת רשם CCP1CON.

עיין בתמונה למעלה.

CCP1CON = 0b00001111;

אתה יכול גם בפורמט hex

CCP1CON = 0x0F; // הגדרת רשום CCP1CON למצב PWM

שלב 3: הגדרת מודול Timer2 (רשום TMR2)

הגדרת מודול Timer2 (רשום TMR2)
הגדרת מודול Timer2 (רשום TMR2)

טיימר 2 הוא טיימר של 8 סיביות עם מכשיר קדם-מסר ומדריך פוסט-סקאלר. הוא יכול לשמש כבסיס הזמן של PWM עבור מצב ה- PWM של המודולים (ים). רשם TMR2 ניתן לקריאה ולכתיבה והוא נמחק בכל איפוס מכשיר.

רשום T2CON מוצג

הגודל הקדמי והקנה המידה יתאימו את תדירות הפלט של גל ה- PWM שנוצר.

תדירות = תדירות השעון/(4*מסדר טרום*(PR2-TMR2)*ספירת דואר*

איפה Tout = 1/תדירות

T2CON = 0b00000100;

זה ייצור 2.5 KHz @ 1Mhz או 100KHz @ 4MHz קריסטל (כמעט יש מגבלה לתדר PWM זה עיין בגיליון מסוים לפרטים נוספים)

ייצוג משושה

T2CON = 0x04; // הפעל את T2CON ללא תצורה מראש ותצורה לאחר קנה מידה

שלב 4: הגדרת PR2 (רישום תקופות טיימר 2)

למודול Timer2 יש רישום תקופות של 8 סיביות, PR2. טיימר 2 מגדיל מ- 00h עד שהוא תואם PR2 ולאחר מכן מתאפס ל -00h במחזור התוספת הבא. PR2 הוא מרשם קריא וניתן לכתיבה. רשם PR2 מאתחל ל- FFh עם האיפוס.

הגדרת טווח מתאים ל- PR2 תאפשר שימוש לשינוי מחזור ההפעלה של גל ה- PWM שנוצר

PR2 = 100; // הגדר את זמן המחזור ל -100 לשינוי מחזור העבודה בין 0-100

לשם הפשטות אני משתמש ב- PR2 = 100 על ידי יצירת CCPR1L = 80; ניתן להשיג מחזור עבודה של 80%.

שלב 5: הגדר את מודול CCPR1l

מכיוון שניתן להגדיר PR2 = 100 CCPR1l בכל מקום בין 0-100 כדי לקבל את מחזור העבודה הרצוי.

שלב 6: כתוב את הסקיצה עליך MPLAB X IDE הקוד ניתן להלן

כתוב את הסקיצה עליך MPLAB X IDE הקוד ניתן להלן
כתוב את הסקיצה עליך MPLAB X IDE הקוד ניתן להלן

#לִכלוֹל

עיכוב חלל (int a) // פונקציה ליצירת עיכוב {

עבור (int i = 0; i <a; i ++)

{

עבור (int j = 0; j <144; j ++);

}

}

void main ()

{TRISC = 0; // ניקוי ביט זה יהפוך את PORTC לפלט.

CCP1CON = 0x0F; // הגדרת רשום CCP1CON למצב PWM

T2CON = 0x04; // הפעל את T2CON ללא תצורה מראש ותצורה לאחר קנה מידה.

PR2 = 100; // הגדר את זמן המחזור ל -100 לשינוי מחזור העבודה בין 0-100

בעוד (1) {

CCPR1L = 75; // הפיק 75% עיכוב במחזור העבודה (1);

}

}

עשיתי גם שינוי קטן בקוד כך שהתדירות של גל PWM שנוצר

זהו קוד המדומה בפרוטוס וגל PWM הפלט מוצג להלן כדי להעלות זאת על לוחות הפיתוח של התמונות שלך השתמש ב- #include עם פיסות תצורה מתאימות.

תודה

מוּמלָץ: