- חומרים נדרשים:
- חישוב מהירות ומרחק מכוסה:
- דיאגרמת מעגלים והתקנת חומרה:
- סימולציה:
- תכנות PIC16F877A שלך:
- הסבר עבודה:
מדידת המהירות / סל"ד של רכב או מנוע תמיד הייתה פרויקט מרתק עבורנו לנסות. לכן, בפרויקט זה אנו הולכים לבנות אחד באמצעות מיקרו בקרי PIC מוכנים לתעשייה. נשתמש בחתיכת מגנט ובחיישן הול למדידת המהירות. ישנן דרכים / חיישנים אחרים למדידת המהירות, אך השימוש בחיישן אולם הוא זול וניתן להשתמש בו גם בכל סוג של מנוע / רכב. על ידי ביצוע פרויקט זה נשפר גם את כישורינו בלמידת PIC16F877A מכיוון שהפרויקט כרוך בשימוש בפסיקות ושעונים. בסוף פרויקט זה תוכלו לחשב את המהירות והמרחקים המכוסים על ידי כל אובייקט מסתובב ולהציג אותם על גבי מסך LCD בגודל 16x2. בואו נתחיל עם מד מהירות דיגיטלי ומעגל מד מרחק עם PIC.
חומרים נדרשים:
- PIC16F877A
- 7805 ווסת מתח
- חיישן אפקט הול (US1881 / 04E)
- 16 * 2 תצוגת LCD
- חתיכת מגנט קטנה
- חוטי חיבור
- קבלים
- קרש לחם.
- ספק כוח
חישוב מהירות ומרחק מכוסה:
לפני שנתחיל בבניית המעגל, נבין כיצד נשתמש בחיישן הול ובמגנט לחישוב מהירות הגלגל. בעבר השתמשנו באותה טכניקה לבניית מד מהירות Arduino המציג קריאות בטלפון חכם אנדרואיד.
חיישן הול הוא מכשיר שיכול לזהות נוכחות של מגנט על בסיס הקוטביות שלו. אנחנו מדביקים פיסת מגנט קטנה על הגלגל ומניחים את חיישן האולם בקרבתו באופן שבכל פעם שהגלגל מסתובב חיישן האולם מזהה אותו. לאחר מכן אנו משתמשים בעזרת טיימרים והפרעות במיקרו-בקר PIC שלנו כדי לחשב את הזמן שנדרש לסיבוב שלם של הגלגל.
ברגע שידוע הזמן שנלקח נוכל לחשב את הסל"ד על ידי שימוש בנוסחאות הבאות, כאשר 1000 / זמן שנלקח ייתן לנו את ה- RPS והכפלתו נוספת עם 60 תתן לך את הסל"ד
סל"ד = (1000 / לוח זמנים) * 60;
איפה (1000 / לפי לוח הזמנים) נותן את הסיביות לשנייה (מהפכות לשנייה) ומכפילים אותה בכדי להמיר סל"ד לסיבוב לדקות (מהפכות לדקה).
עכשיו כדי לחשב את מהירות הרכב עלינו לדעת את רדיוס הגלגל. בפרויקט שלנו השתמשנו בגלגל צעצוע קטן שרדיוסו 3 ס"מ בלבד. אבל הנחנו שרדיוס הגלגל יהיה 30 ס"מ (0.3 מ ') כדי שנוכל לדמיין את הקריאות.
הערך מוכפל גם עם 0.37699 מכיוון שאנו יודעים שמהירות = (RPM (קוטר * Pi) / 60). הנוסחאות פשוטות עד
v = רדיוס_גלגל * סל"ד * 0.37699;
לאחר שנחשב את המהירות נוכל לחשב את המרחק המכוסה בשיטה דומה. בעזרת סידור האולם והמגנטים שלנו אנו יודעים שכמה פעמים הגלגל הסתובב. אנו מכירים גם את רדיוס הגלגל, באמצעותו אנו יכולים למצוא את היקף הגלגל, בהנחה שרדיוס הגלגל יהיה 0.3 מ '(R) ערכי ההיקף Pi * R * R יהיו 0.2827. המשמעות היא שלכל פעם שחיישן האולם פוגש את המגנט מכסה הגלגל מרחק של 0.2827 מטר.
מרחק_מכוסה = מרחק_מכסה + היקף_מעגל
מאז, עכשיו אנחנו יודעים איך הפרויקט הזה יעבוד נוכל להמשיך לתרשים המעגלים שלנו ולהתחיל לבנות אותו.
דיאגרמת מעגלים והתקנת חומרה:
דיאגרמת המעגלים של פרויקט מד המהירות והמד מרחק הזה היא פשוטה מאוד וניתנת לבנייה על קרש לחם. אם עקבת אחר מדריכי PIC, תוכל גם לעשות שימוש חוזר בחומרה בה השתמשנו ללימוד מיקרו בקרי PIC. כאן השתמשנו באותו לוח perf שנבנה עבור מהבהב LED עם מיקרו-בקר PIC, כמוצג להלן:
חיבורי הסיכות עבור ה- PIC16F877A MCU ניתנים בטבלה שלהלן.
S. לא: |
מספר סיכה |
שם סיכה |
מחובר ל |
1 |
21 |
RD2 |
RS של LCD |
2 |
22 |
RD3 |
E של LCD |
3 |
27 |
RD4 |
D4 של LCD |
4 |
28 |
RD5 |
D5 של LCD |
5 |
29 |
RD6 |
D6 של LCD |
6 |
30 |
RD7 |
D7 של LCD |
7 |
33 |
RB0 / INT |
3 rd PIN של חיישן הול |
לאחר שבנית את הפרויקט שלך הוא אמור להיראות בערך כך בתמונה למטה
כפי שניתן לראות השתמשתי בשתי תיבות להצבת המנוע וחיישן אולם במקום סמוך. אתה יכול לתקן את המגנט על האובייקט המסתובב שלך ולשלם את חיישן האולם קרוב אליו בצורה שתוכל לזהות את המגנט.
הערה: לחיישן אולם יש קוטביות, לכן וודא איזה מוט הוא מזהה והציב אותו בהתאם.
כמו כן וודא כי אתה משתמש בנגד Pull-up עם סיכת הפלט של חיישן האולם.
סימולציה:
הסימולציה לפרויקט זה נעשית באמצעות פרוטאוס. מכיוון שהפרויקט כולל העברת אובייקטים לא ניתן להדגים את הפרויקט השלם באמצעות סימולציה, אך ניתן לאמת את פעולת ה- LCD. פשוט טען את קובץ ה- hex לסימולציה והדמה אותו. תוכל להבחין ב- LCD שעובד כמוצג להלן.
כדי לבדוק אם מד המהירות ומד המרחק פועלים החלפתי את חיישן ההול במכשיר מצב לוגיק. במהלך הסימולציה תוכלו ללחוץ על כפתור מצב ההיגיון כדי להפעיל את ה- Interrupt ולבדוק אם המהירות והמרחק המכוסים מתעדכנים כפי שמוצג לעיל.
תכנות PIC16F877A שלך:
כאמור קודם, נשתמש בעזרת טיימרים והפרעות במיקרו-בקר PIC16F877A כדי לחשב את הזמן שנדרש לסיבוב שלם של הגלגל. למדנו כבר כיצד להשתמש בטיימרים בהדרכה שלנו. נתתי את הקוד המלא של הפרויקט בסוף מאמר זה. בהמשך הסברתי להלן כמה שורות חשובות.
שורות הקוד שלהלן מאותחלות את יציאת D כסיכות פלט עבור ממשק LCD ו- RB0 כסיכת קלט לשימוש בו כסיכה חיצונית. יתר על כן אפשרנו נגד נגיף משיכה פנימי באמצעות OPTION_REG וגם הגדרנו 64 כמכירה מקדימה. לאחר מכן אנו מאפשרים הפרעה גלובלית והיקפית כדי לאפשר הפסקת טיימר והפרעה חיצונית. כדי להגדיר את RB0 כקוטע הפסקה חיצוני INTE צריך להיות גבוה. הערך Overflow is מוגדר להיות 100 כך שבכל מילי-שנייה יופעל דגל הפרעת הטיימר TMR0IF. זה יעזור להפעלת טיימר של אלפית השנייה כדי לקבוע את הזמן שנדרש באלפית השנייה:
TRISD = 0x00; // PORTD הוכרז כפלט לממשק LCD TRISB0 = 1; // DE הגדר את סיכת RB0 כקלט לשימוש כסיכת הפסקה OPTION_REG = 0b00000101; // Timer0 64 כ prescalar // מאפשר גם PULL UPs TMR0 = 100; // טען את ערך הזמן למשך 1ms; delayValue יכול להיות בין 0-256 בלבד TMR0IE = 1; // אפשר סיבית הפסקת טיימר ברישום PIE1 GIE = 1; // אפשר הפרעה גלובלית PEIE = 1; // אפשר את ההפרעה ההיקפית INTE = 1; // אפשר RB0 כסיכת הפרעה חיצונית
הפונקציה שלהלן תבוצע בכל פעם שזוהה הפרעה. אנו יכולים למנות את הפונקציה לפי רצוננו ולכן קראתי לה speed_isr (). תוכנית זו עוסקת בשתי הפרעות האחת היא Timer Interrupt והשנייה Interrupt Interrupt. בכל פעם שמתרחש הפסקת טיימר הדגל TMR0IF הולך גבוה, כדי לנקות ולאפס את ההפרעה עלינו להקטין אותו על ידי הגדרת TMR0IF = 0 כמוצג בקוד להלן.
בטל הפסקה speed_isr () {אם (TMR0IF == 1) // טיימר עלה על גדותיו {TMR0IF = 0; // נקה הפסקת טיימר לדגל mill_sec ++; } אם (INTF == 1) {סל"ד = (1000 / milli_sec) * 60; מהירות = 0.3 * סל"ד * 0.37699; // (בהנחה שרדיוס הגלגל יהיה 30 ס"מ) INTF = 0; // נקה את דגל ההפרעה milli_sec = 0; מרחק = מרחק + 028.2; }}
באופן דומה כאשר מתרחשת הפרעה חיצונית, הדגל INTF יעלה גבוה, יש לנקות זאת גם על ידי הגדרת INTF = 0. הזמן שנדרש נשמר במעקב על ידי הפסקת הטיימר והפסיקה החיצונית קובעת מתי הגלגל השלים סיבוב מלא אחד. עם נתונים אלה המהירות והמרחק המכוסים על ידי הגלגל מחושבים בכל הפרעה חיצונית.
לאחר חישוב המהירות והמרחק הם יכולים להיות מוצגים בפשטות על גבי מסך ה- LCD באמצעות פונקציות ה- LCD שלנו. אם אתה חדש ב- LCD, עיין בממשק LCD שלנו עם מדריך PIC16F877A MCU.
הסבר עבודה:
לאחר שתכין את החומרה והתוכנה, פשוט העלה את הקוד ל- PIC16F877A שלך. אם אתה חדש לגמרי ב- PIC, יהיה עליך לקרוא כמה מדריכים על ידיעת העלאת התוכנית למיקרו-בקר PIC16F877A.
השתמשתי בפוט משתנה כדי להתאים את מהירות המנוע לצורך הדגמה. אתה יכול גם להשתמש בו כדי למצוא יישום בזמן אמת. אם הכל עובד כצפוי, אתה אמור להיות מסוגל לכסות את המהירות בקמ"ש / מרחק ומרחק במונחים של מטרים כפי שמוצג בסרטון להלן.
מקווה שנהניתם מהפרויקט והעבדתם אותו. אם לא, תוכלו להשתמש בסעיף ההערות שלמטה או בפורום כדי לפרסם ספק.