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

חלק 3: GPIO: הרכבת ARM: קו עוקב: TI-RSLK: 6 שלבים
חלק 3: GPIO: הרכבת ARM: קו עוקב: TI-RSLK: 6 שלבים

וִידֵאוֹ: חלק 3: GPIO: הרכבת ARM: קו עוקב: TI-RSLK: 6 שלבים

וִידֵאוֹ: חלק 3: GPIO: הרכבת ARM: קו עוקב: TI-RSLK: 6 שלבים
וִידֵאוֹ: פגישה 7 - ״שלט רחוק״ ל-Raspberry Pi. גיבוי המחשב 2024, יולי
Anonim
Image
Image
החומרה
החומרה

שלום. זהו הפרק הבא בו אנו ממשיכים להשתמש בהרכבת ARM (במקום שפה ברמה גבוהה יותר). ההשראה להנחיה זו היא Lab 6 של ערכת הלמידה של מערכת הרובוטיקה של Texas Instruments, או TI-RSLK.

אנו נשתמש במיקרו -בקר מהערכה, לוח הפיתוח של MSP432 LaunchPad, אך אולי תמצא משהו שימושי לחילוץ מהוראה זו גם אם אינך משתמש ב- LaunchPad או עוקב אחר T. I. תכנית לימודים.

התחלנו בהרצאת ARM המציגה את סביבת הפיתוח וכיצד ליצור פרויקט.

הרכבה הבאה להוראה על ARM הציגה כיצד לתקשר עם קלט/פלט (GPIO).

לאחר מכן הרחבנו את הידע שלנו והצגנו פונקציות, שליטה על נוריות ומתגים.

כעת בעזרת הוראה זו, אנו יכולים להשתמש במה שלמדנו כדי לעשות משהו יותר כיף, שימושי יותר: לזהות קו.

זה יכול לעזור לנו בהמשך כשאנחנו בונים רובוט עוקב-קו.

בתכנית הלימודים, רוב התכנות מתבצע ב- C או C ++, אך כדאי להכיר את ההרכבה לפני שנתחיל בשפות ברמה גבוהה יותר ובספריות.

שלב 1: החומרה

החומרה
החומרה
החומרה
החומרה
החומרה
החומרה

אני לא רוצה לחדש את החומרה בפירוט, מכיוון שכבר יש מקורות, אבל נוסיף הסברים במידת הצורך.

עבור מדריך זה נשתמש במערך חיישן ההשתקפות של פולולו מכיוון שהוא מגיע כחלק מ- TI-RSLK (ערכת הרובוטים). זה זה המשמש בקורס, ובמעבדה 6 של תכנית הלימודים.

אם אין לך את זה, אתה יכול להשתמש בכל גלאי IR (או סדרות כאלה) שמפיק אות דיגיטלי, HIGH או LOW, לנוכחות והיעדרות.

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

מערך ההחזרה כולל גלאים קרובים מאוד זה לזה. זה אומר שאנחנו צריכים לקבל אותות זיהוי מרובים, תלוי כמובן בעובי הקו.

אם כן, אז אם הרובוט אינו מוטבע ישירות עם הקו, הוא אמור להחזיר פלט שהקו רחב יותר ממה שהוא צריך להיות (כי אנחנו בזווית).

להסבר טוב יותר של האמור לעיל, עיין במסמך Lab 6.

לעזרה בחיווט / חיבור החיישן ללוח הפיתוח MSP432 LaunchPad, להלן מספר הוראות מועילות.

הוספתי גם אותן הוראות pdf (דומות?) לשלב זה.

אם אתה קורא בעיון את מסמכי Pololu, הם מסבירים את הסיבה ל"עקיפת 3.3V ", שתרצה לקפוץ אם אתה משתמש 3.3V במקום 5V.

מכיוון שאנו עדיין לא בונים את הרובוט, אך אנו רק לומדים על הרכבה של ARM ועל אופן האינטראקציה עם חלקים (תת -מערכות) של הרובוט, איננו צריכים לפעול לפי ההנחיות לעיל עד הסוף.

לעת עתה, חיבור מערך חיישן הקווים רק רותח/מוריד עד להלן:

  • חבר 3.3V ו- GND מלוח MSP432 למערך החיישנים.
  • חבר סיכת יציאה (אני מציע P5.3) מה- MSP432 אל סיכת ההפעלה של LED במערך חיישן הקווים. סיכה זו על החיישן היא בין 3.3V ל- GND.
  • חבר את כל שמונה הפינים/סיביות של יציאה אחת (אני מציע P7.0 עד P7.7) לשמונה הפינים של מערך החיישנים המסומן "1" עד "8". אלה הקווים שיעלו גבוה או נמוך בהתאם למה שהם חשים.

כפי שאתה יכול לראות בתמונות של שלב זה, ובסרטון, לא חיברתי את החיישן לשלדת הרובוט, כי רציתי קל לתכנת, איתור באגים, בדיקות, למידה.

אז עם כל מה שקשור, אנחנו מוכנים להיכנס לתוכנה.

שלב 2: עוקב אחר השורות

עוקב אחר הקו
עוקב אחר הקו
עוקב אחר הקו
עוקב אחר הקו

חיישן מערך ההחזר הוא די מגניב מכיוון שהוא יכול לעזור בשתי דרכים לפחות.

  • קבע הוא הרובוט שבמרכזו קו או נסחף לצד אחד.
  • האם הרובוט מיושר לכיוון הקו, או שהוא בזווית.

כל אחד מגלאי המערך מספק בעצם מידע אחד, גבוה או נמוך.

הרעיון הוא לשלב את כל הביטים האלה למספר בודד או לתבנית סיביות אחת, ולהשתמש בתבנית זו כדי לקבל החלטות (על מנת לזוז נכון).

שלב 3: לפני שנוכל באמת להתחיל…

.. עלינו ללמוד משהו חדש על תכנות הרכבה של ARM. ואני לא מתכוון רק להנחיה נוספת. אלה נוטים להיות מינוריים.

עד כה לא השתמשנו ב"ערימה "בתוכניות שלנו.

הסתמכנו על השימוש ברוב מרשמי המעבד העולמיים ברחבי תת -שורות שונות.

הדבר היחיד שעשינו היה לשמור ולשחזר את כתובת LR (רישום הקישורים) לפונקציה אחת - זו שכינתה מספר פונקציות אחרות. (אני משתמש כאן ב"פונקציה "ו"תת -שגרה" לסירוגין).

מה שעשינו לא טוב. מה אם נרצה לקנן פונקציות אחרות? מה אם יש לנו יותר מרמת קינון אחת?

בדוגמאות קודמות, בחרנו להשתמש ברשם R6 כאחסון עבור LR או כתובת החזרה. אבל אם נרצה לבצע קינון נוסף/עמוק יותר, לא נוכל להמשיך לשנות את הערך של R6. נצטרך לבחור עוד רישום. ועוד אחת. ואז זה הופך להיות מעיק לעקוב אחר איזה מרשם מעבד ליבה מחזיק באיזה LR לשחזר לאיזו פונקציה.

אז עכשיו נסתכל על ה"ערימה ".

שלב 4: הערימה

להלן חומר קריאה המסביר את הערימה.

אני תומך גדול יותר בכמה רעיונות:

  • רק כמה תיאוריה שנדרשת, לכו על המעשיות במהירות
  • ללמוד לפי הצורך, להתמקד בעצם לעשות משהו ולא רק תרגילים או דוגמאות ללא תכלית.

יש הרבה תיעוד ARM ו- MSP432 באינטרנט שמדבר על הערימה, כך שלא אעשה את כל זה מחדש. אני גם הולך לשמור על השימוש בערימה כאן למינימום המוחלט - שמירת כתובת ההחזרה (רישום הקישורים).

בעיקרו של דבר, אנו צריכים רק הוראות:

PUSH {רשימת רשימות}

POP {רשימת רשימות}

או, במקרה שלנו, ספציפית:

דחף {LR}

POP {LR}

אז פונקציית הרכבה/תת -שגרה תיראה כך:

funcLabel:.asmfunc

PUSH {LR}; זו כנראה צריכה להיות אחת ההנחיות הראשונות לכניסה.; לעשות עוד קוד כאן..; בלה בלה בלה…; אוקיי, סיימנו עם הפונקציה, מוכנים לחזור לפונקציית השיחות POP {LR}; זה משחזר את כתובת ההחזרה הנכונה לחזור לשיחות; פוּנקצִיָה. BX LR; החזר.endasmfunc

הסרטון עובר דוגמה חיה למספר פונקציות מקוננות.

שלב 5: התוכנה

בקובץ המצורף שכותרתו "MSP432_Chapter …" יש הרבה מידע טוב על היציאות של ה- MSP432, וממסמך זה אנו מקבלים את היציאות, הרישומים, הכתובות, וכו '. הוא מעט מיושן. עם זאת, לא ראיתי את הכתובות המפורטות המפורטות ליציאה 5 ומעלה. (רק "פונקציות חלופיות"). אבל זה עדיין שימושי.

אנו הולכים להשתמש בשני יציאות. P5, P7, P1 ו- P2.

פלט P5.3 (סיביות בודדת) יהיה לשליטה ב- IR LED-enable על החיישן. אנו משתמשים ב- P5.3 מכיוון שהוא סיכה חשופה באותו כותרת כמו שאר חיבורי MSP432 המגיעים למערך החיישנים.

P7.0 עד P7.7 יהיו שמונה התשומות שאוספות את הנתונים מהחיישן; מה שהוא "רואה".

P1.0 הוא הנורית האדומה היחידה ונוכל להשתמש בה כדי לתת לנו כמה אינדיקציות לנתונים.

P2.0, P2.1, P2.2 הוא ה- RGB LED ואנו יכולים להשתמש גם בזה, עם אפשרויות הצבע השונות שלו, כדי לתת לנו אינדיקציה לנתוני החיישן.

אם עברת את הוראות ההוראה הקודמות הקשורות לכל זה, אז אתה כבר יודע כיצד להגדיר את התוכנית.

פשוט יש סעיף הצהרות על היציאות והסיביות וכו '.

יהיה לך קטע "ראשי".

צריכה להיות לולאה, שבה אנו קוראים ברציפות את הנתונים מ- P7, מקבלים החלטה על הנתונים האלה ומדליקים את שני הלדים בהתאם.

להלן שוב כתובות רישום הנמל:

  • GPIO P1: 0x4000 4C00 + 0 (כתובות שוות)
  • GPIO P2: 0x4000 4C00 + 1 (כתובות אי זוגיות)
  • GPIO P3: 0x4000 4C00 + 20 (כתובות שוות)
  • GPIO P4: 0x4000 4C00 + 21 (כתובות אי זוגיות)
  • GPIO P5: 0x4000 4C00 + 40 (כתובות שוות)
  • GPIO P6: 0x4000 4C00 + 41 (כתובות אי זוגיות)
  • GPIO P7: 0x4000 4C00 + 60 (כתובות שוות)
  • GPIO P8: 0x4000 4C00 + 61 (כתובות אי זוגיות)
  • GPIO P9: 0x4000 4C00 + 80 (כתובות שוות)
  • GPIO P10: 0x4000 4C00 + 81 (כתובות אי זוגיות)

מה שמודגש הוא מה נשתמש עבור הוראה זו.

תכנית שלבי קריאת גלאי IR

להלן psuedo-code לכתיבת התוכנית ב- C, אך היא עדיין שימושית, ונעקוב אחריה די בגרסת ההרכבה של התוכנית.

תוכנית ראשית 0) אתחל // יציאות בעוד (1) {1) הגדר P5.3 גבוה (הפעל נורית IR) 2) הפוך את P7.0 ליציאה והגדר אותו גבוה (טעינת הקבל) 3) המתן 10 לנו, Clock_Delay1us (10); 4) הפוך את P7.0 לכניסה 5) הפעל את הלולאה הזו 10, 000 פעמים א) קרא P7.0 (ממיר מתח ב- P7.0 לבינארי) ב) פלט בינארי ל- P1.0 (מאפשר לך לראות בינארי בזמן אמת) 6) הגדר P5.3 נמוך (כבה נורית IR, חיסכון בחשמל) 7) המתן 10 אלפיות השנייה, Clock_Delay1ms (10); } // חזור (חזרה ל- while ())

שלב 6: בואו נשפר את הקוד

מטרתו או השימוש במערך ה- LED של Pololu IR הוא לזהות קו, ולדעת אם הרובוט (העתיד) מרוכז ישירות בקו, או בצד אחד. כמו כן, מכיוון שלקו יש עובי מסוים, אם מערך החיישנים ניצב ישירות לקו, מספר N של החיישנים יהיה קריאה שונה מהשאר, ואילו אם מערך ה- LED LED נמצא בזווית כלשהי (לא בניצב), אז זוגות N+1 או N+2 IR/גלאי IR צריכים כעת לתת קריאה שונה.

לפיכך, בהתאם לכמה חיישנים המצביעים על נוכחות הקו, עלינו לדעת אם אנו מרוכזים, ואם אנו זוויתיים או לא.

לניסוי אחרון זה, בואו רק נראה אם נוכל לקבל את הנורית האדומה ואת נורית ה- RGB לתת לנו מידע נוסף על מה שמערך החיישנים מספר לנו.

הסרטון נכנס לכל הפרטים. הקוד הסופי מצורף גם הוא.

זה משלים את סדרת מכלול ARM הקשור ל- GPIO. אנו מקווים לחזור עם אסיפת ARM נוספת במועד מאוחר יותר.

תודה.

מוּמלָץ: