בפרויקט זה אנו נשתמש באחת התכונות של ATmega32A כדי להתאים את הבהירות של נורית 1 ואט. השיטה בה משתמשים להתאמת מהירות ה- LED היא PWM (Pulse Width Modulation). מדריך PWM של מיקרו-בקר AVR זה מסביר בפירוט את תפיסת ה- PWM ויצירת ה- PWM (ניתן גם לבדוק את מעגל הגנרטור הפשוט הזה של PWM). שקול מעגל פשוט כפי שמוצג באיור.
כעת, אם המתג באיור לעיל נסגר ברציפות לאורך זמן, הנורה תידלק ברציפות במהלך אותה תקופה. אם המתג סגור למשך 8ms ונפתח למשך 2ms לאורך מחזור של 10ms, הנורה תהיה דולקת רק בזמן 8ms. כעת המסוף הממוצע לאורך תקופה של 10 ms = זמן הפעלה / (זמן הפעלה + זמן כיבוי), זה נקרא מחזור חובה והוא 80% (8 / (8 + 2)), כך הממוצע מתח המוצא יהיה 80% ממתח הסוללה.
במקרה השני, המתג סגור למשך 5ms ונפתח למשך 5ms לאורך 10ms, כך שמתח המסוף הממוצע ביציאה יהיה 50% ממתח הסוללה. נניח אם מתח הסוללה הוא 5 וולט ומחזור החובה הוא 50% וכך מתח המסוף הממוצע יהיה 2.5 וולט.
במקרה השלישי מחזור העבודה הוא 20% ומתח המסוף הממוצע הוא 20% ממתח הסוללה.
ב- ATMEGA32A יש לנו ארבעה ערוצי PWM, כלומר OC0, OC1A, OC1B ו- OC2. כאן נשתמש בערוץ OC0 PWM כדי לשנות את בהירות ה- LED.
רכיבים נדרשים
חוּמרָה:
מיקרו-בקרה ATmega32
ספק כוח (5V)
מתכנת AVR-ISP
קבל 100uF, נורית 1Watt
טרנזיסטור TIP127
כפתורים (2 חתיכות)
קבלים 100nF (104) (2 חתיכות), נגדים 100Ω ו- 1kΩ (2 חתיכות).
תוֹכנָה:
סטודיו אטמל 6.1
פרוגיספ או קסם פלאש
תרשים מעגל והסבר עבודה
האיור לעיל מציג את תרשים המעגל של דימר LED עם מיקרו בקר AVR (ניתן גם לבדוק את מעגל ה- LED העמום הפשוט הזה).
ב- ATmega, לארבעה ערוצי PWM, קבענו ארבעה פינים. אנחנו יכולים לקחת רק פלט PWM רק בסיכות אלה. מכיוון שאנו משתמשים ב- PWM0 עלינו לקחת אות PWM בסיומת OC0 (PORTB 3 rd PIN). כפי שמוצג באיור אנו מחברים את בסיס הטרנזיסטור לפין OC0 כדי להניע את נורית החשמל. כאן דבר נוסף הוא מעל ארבעה ערוצי PWM, שניים הם ערוצי PWM של 8 סיביות. אנו הולכים להשתמש כאן בערוץ PWM של 8 סיביות.
קבלים מחוברים לכל אחד מהכפתורים כדי למנוע קפיצה. בכל פעם שלוחצים על כפתור יהיה קצת רעש בסיכה. למרות שרעש זה מתייצב באלפיות השנייה. עבור בקר הפסגות החדות לפני ההתייצבות משמשות כמפעילות. ניתן לבטל את האפקט הזה על ידי תוכנה או חומרה, כדי שהתוכנית תהיה פשוטה. אנו משתמשים בשיטת חומרה על ידי הוספת קבלים לדיבור.
הקבלים מבטלים את ההשפעה של הקפצת כפתורים.
ב- ATMEGA ישנן כמה דרכים לייצר PWM, הן:
1. שלב PWM נכון
2. מהיר PWM
כאן נשמור על הכל פשוט, לכן נשתמש בשיטת FAW PWM כדי ליצור את אות ה- PWM.
ראשית לבחור את תדירות ה- PWM, זה תלוי ביישום בדרך כלל, עבור נורית כל תדר גדול מ- 50Hz היה עושה. מסיבה זו אנו בוחרים בשעון הנגד 1MHZ. אז אנחנו לא בוחרים שום prescalar. Prescalar הוא מספר שנבחר כל כך כדי לקבל שעון נגד פחות. לדוגמה, אם שעון המתנד הוא 8Mhz, אנו יכולים לבחור במאגר מקדים של '8' כדי לקבל שעון 1MHz למונה. המקלדת הנבחרת נבחרת על פי תדירות. אם אנו רוצים עוד פולסים לתקופת זמן עלינו לבחור במערכת prescalar גבוהה יותר.
עכשיו כדי להוציא את ה- PWM המהיר של השעון 50 הרץ מה- ATMEGA, עלינו לאפשר את הסיביות המתאימות ברישום " TCCR0 ". זהו המרשם היחיד שעלינו לטרוח, לקבלת 8bit FAST PWM.
כאן, 1. CS00, CS01, CS02 (YELLOW) - בחר במקלדת הקדם לבחירת שעון הנגד. הטבלה עבור prescalar המתאים מוצגת בטבלה שלהלן. אז לקידום מראש (שעון מתנד = שעון נגד).
אז CS00 = 1, שני ביטים אחרים הם אפס.
2. WGM01 ו- WGM00 משתנים לבחירת מצבי ייצור צורת גל, על בסיס הטבלה למטה, לקבלת PWM מהיר. יש לנו WGM00 = 1 ו- WGM01 = 1;
3. כעת אנו יודעים כי PWM הוא אות בעל יחס חובה שונה או זמני כיבוי מופעלים אחרים. עד עכשיו בחרנו בתדירות ובסוג ה- PWM. הנושא העיקרי של פרויקט זה טמון בחלק זה. לקבלת יחס חובה שונה, אנו הולכים לבחור ערך בין 0 ל 255 (2 ^ 8 בגלל 8 סיביות). נניח שאנחנו בוחרים ערך 180, כאשר המונה מתחיל לספור מ- 0 ומגיע לערך 180, ייתכן שתגובת הפלט תופעל. הטריגר הזה עשוי להיות הפוך או לא הפוך. כלומר ניתן לומר שהפלט צריך להרים למעלה עם הגעה לספירה, או שאפשר לומר לו למשוך למטה כשהוא מגיע לספירה.
בחירה זו של משיכה כלפי מעלה או מטה נבחרת על ידי סיביות CM00 ו- CM01.
כפי שמוצג בטבלה, כדי שהפלט יעלה גבוה בהשוואה והתפוקה תישאר גבוהה עד לערך המקסימלי (כפי שמוצג באיור בתחתית). עלינו לבחור במצב היפוך לשם כך, לכן COM00 = 1; COM01 = 1.
כפי שמוצג באיור שלהלן, OCR0 (פלט השוואת רישום 0) הוא הבייט המאחסן את הערך שבחר המשתמש. אז אם נשנה OCR0 = 180, הבקר מפעיל את השינוי (גבוה) כאשר המונה מגיע ל -180 מ- 0.
כעת לצורך שינוי בהירות ה- LED עלינו לשנות את יחס DUTY של אות ה- PWM. על מנת לשנות את יחס החובה, עלינו לשנות את ערך ה- OCR0. כאשר אנו משנים ערך זה של OCR0, לוקח לדלפק זמן אחר להגיע ל- OCR0. אז הבקר מושך את הפלט גבוה בזמנים שונים.
אז עבור PWM של מחזורי חובה שונים, עלינו לשנות את ערך ה- OCR0.
במעגל יש לנו שני כפתורים. כפתור אחד מיועד להגדלת ערך ה- OCR0 וכך גם ה- DUTY RATIO של אות ה- PWM, והשני הוא להפחתת ערך ה- OCR0 וכך גם ה- DUTY RATIO של ה- PWM.