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

L I G H T S: 5 שלבים
L I G H T S: 5 שלבים

וִידֵאוֹ: L I G H T S: 5 שלבים

וִידֵאוֹ: L I G H T S: 5 שלבים
וִידֵאוֹ: Кто-нибудь из вас слышал о полуночной игре? Страшные истории. Мистика. Ужасы 2024, נוֹבֶמבֶּר
Anonim
L I G H T S
L I G H T S

מטרתו של פרויקט הגמר הזה הייתה ליצור משהו שיתמקד בקיימות ויישום מושגי עיצוב דיגיטלי, וכדי לעשות זאת, החלטתי לעצב מערכת חיסכון באנרגיה ניתנת להרחבה באמצעות vhdl ויוצרה עבור לוח Basys 3 (סדרת Artix-7 35T). ניתן להרחבה מכיוון שניתן להכניס כל מספר חיישנים לחדר ולכל מספר מערכות אלה ניתן להציב סביב בניין או בית. מה שהמערכת הזו הייתה עושה, היא תיאורטית לחסוך אלפי דולרים בבנייה מסחרית ולהקטין אחוז גדול מצריכת האנרגיה בקהילות מגורים קטנות יותר על ידי יישום מערכת מחוברת של אורות מבוקרים באופן פעיל ופסיבי, גלאי תנועה, טיימרים המוצגים על שבעה תצוגות קטע, ו מתגי שליטה. דוגמה זו עוסקת במערכת אחת עם שלושה גלאי תנועה, מתג ראשי, מתג ידני/רגיל, ארבעה תצוגות של שבעה קטעים ואור יחיד שהמערכת שולטת בו.

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

למערכת זו שני מצבים, האחד עם הטיימר כאמור לעיל, והשני שבו יש מתג השולט על האורות באופן ידני (התעלמות מחיישנים). יש מתג ראשי המאפשר למשתמש לבחור באיזה מצב הוא רוצה להשתמש בהתבסס על כל אחד שהוא מרגיש יחסוך יותר אנרגיה בסך הכל. לְשֶׁעָבַר. חדר כגון מסדרון יכול להפיק תועלת ממצב הטיימר הפסיבי- המשתמשים אינם בטוחים מתי אנשים יעברו דרכם, אך הדלקת וכיבוי האורות בכל פעם שהם נכנסים ויוצאים תהיה אי נוחות, ואילו חדר כזה כמו חדר שינה עם משתמש יחיד יהיה טוב יותר להפעיל ידנית. ומתג האב יעזור במקרים כמו שאדם שגר בחדר השינה יעזוב לתקופה ממושכת, ואז ניתן לכבות את מתג האב והמצב טיימר יפעל לחסכון באנרגיה ביעילות רבה יותר.

אז במערכת זו, יש שתי מכונות מדינה, אחת היא מכונת המדינה הראשית, ועוד אחת עבור טיימר הספירה לאחור. למכשיר המדינה הראשי יש חמישה מצבים המוגדרים ככאלה: 1. "נורות דולקות, זוהתה תנועה" (id = 000), 2. "נורות דולקות, לא זוהתה תנועה" (id = 001), 3. "נורות דולקות, אין תנועה זוהה "(id = 010), 4." מופעל ידנית "(id = 011), ו- 5." כבוי ידנית "(id = 100). למכשיר מצב ראשי זה יש ארבע כניסות: מתג הראשי (ms), המתג הידני/רגיל (ns), אות גבוה כאשר לפחות מתג אחד מזהה תנועה, והוא נמוך אחרת (orx) ואות שהוא גבוה לאחר סיום הטיימר, והוא נמוך אחרת (td). למכשיר המדינה הראשי יש שתי יציאות: אורות (אורות) ואות המציין מתי להפעיל את טיימר הספירה לאחור (טיימר) או (t) (שניהם משמשים לסירוגין).

למכשיר המדינה השני, טיימר הספירה לאחור, יש 12 מצבים: 10 מתוכם כוללים מזהים המשויכים למספר ששבעת הקטע מציג- "seg 10" (id = 1010), "seg 9" (id = 1001), […], "Seg 2" (id = 0010), "seg 1" (id = 0001) ושני המצבים האחרים שניהם מציגים אפס, המייצגים את הטיימר כבוי- כך שיש את ה"ריק 1 "הריק הראשון (id = 1111) והריק השני "ריק 2" (id = 0000). לטיימר הספירה לאחור יש קלט אחד: טיימר (t), ושלושה יציאות: המספר המוצג בינארי עם ארבעה סיביות (bin) ואות המציין את הטיימר נעשה (td).

שלב 1: תרשים קופסה שחורה

תרשים קופסה שחורה
תרשים קופסה שחורה

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

  • השעון משמש לשעון מכונת המדינה הראשית ומפענח שבעה קטעים; יש צורך בשעון איטי יותר עבור הדלפק למטה, כך שיש מודול מחלק שעונים שלוקח את קלט השעון ויוצא שעון איטי יותר עבור המונה למטה.
  • משתנה הביניים (אורקס) בעטיפה קשור לחיישני התנועה ויהיה גבוה אם לפחות אחד מהחיישנים יזהה משהו, ונמוך אחרת; המשוואה הבולנית לכך היא רק orx = s (2) או s (1) או s (0).
  • ה- fsm הראשי שולט באיזה מצב כללי המערכת נמצאת, בהתאם לכניסות (orx, ms, ns, td) ויוצא את המצב הנוכחי שבו הוא נמצא (sm) מוצג בפשטות עם שני האותות המשמשים אותו (טיימר ואורות).

    • (טיימר) הוא אות עטיפה הנשלח אל מונה ה- fsm כקלט שלו ונשלט על ידי המצב הנוכחי של ה- fsm הראשי. הוא מציין מתי להפעיל את הטיימר.
    • (אורות) הוא אות עטיפה המשמש לשליטה במנורה ונשלט על ידי המצב הנוכחי של ה- fsm הראשי.
  • מונה ה- fsm למטה שולט במה שש הקטע מציג בהתאם לקלט (טיימר) ומפיק את המצב הנוכחי בו הוא (sd) המוצג בפשטות עם שני האותות שהוא משמש עבורו (td ו- bin).

    • (td) הוא אות עטיפה שנשלח ל- fsm הראשי ככניסתו ונשלט על ידי המצב הנוכחי של ה- counter counter fsm. הוא מתפקד כאות משוב המציין מתי מתבצע הטיימר.
    • (bin) הוא אות עטיפה של ארבע סיביות המחובר לארבעה סיביות אפס ("0000" ו- bin) ושמונה הסיביות המשולבות נשלחות אל (q), אות עטיפה של שמונה סיביות, שנשלח בתורו לשבעה מפענח קטע תחת (ALU_VAL).
  • מודול שבעת הקטעים זהה לזה של Polylearn; הכניסות העיקריות שלה לוקחות מספר 8 סיביות (סל) עד (ALU_VAL) להצגה על ארבע תצוגות שונות של שבעה קטעים באמצעות היציאות (SEGMENTS) לאות העטיפה (seg) ו- (DISP_EN) לעטיפה (disp_en).

    • מאחר ששניים או יותר משבע תצוגות קטע אינן יכולות להציג ספרות שונות בו זמנית, יש צורך בשעון כדי לעבור בין ארבעת החלקים, המציג את הספרה המתאימה בכל פעם שכל צד מופעל בנפרד, ורכיבה על אופניים במהירות מספקת הופכת את ssegs נראה מופעל בבת אחת.
    • (סימן ותוקף) הם קבועים לאורך כל תוכנית זו, כך ש (סימן) מוגדר לצמיתות נמוך ו (תקף) מוגדר גבוה לצמיתות.
    • (ALU_VAL) לוקח את אות העטיפה (q) כקלט, המייצג את המספר שיוצג בתצוגת שבעת הקטע בינארית.
    • הפלט (SEGMENTS) נשלח לאות עטיפה של שמונה סיביות (seg) ו- (DISP_EN) לאות עטיפה של ארבע סיביות (disp_en).
  • יש גם מודול D flip flop שלא מוצג במפורש בתרשים, אך נחוץ לשתי מכונות המדינה כתת -מודולים ועוזר למדינות להתגבר באופן סינכרוני.

    • (3) אלה נחוצים עבור ה- fsm הראשי מכיוון ש 2^(3) = 8> 5 מצבים לקידוד
    • (4) מתוכם נדרשים עבור מונה ה- fsm למטה מאז 2^4 = 16> 12 מצבים לקידוד

שלב 2: מכונות מדינה

מכונות מדינה
מכונות מדינה

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

ה- fsm הראשי קובע:

"אורות דולקים, זוהה תנועה" (id = 000)

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

  • יציאות: אורות = 1 וטיימר = 0
  • נשאר במצב זה כאשר ms = 1 ו- orx = 1.
  • הולך לקבוע "אורות דולקים, לא זוהה תנועה" אם ms = 1 ו- orx = 0.
  • הולך למצב "מופעל ידנית" אם ms = 0 ו- ns = 1.
  • הולך למצב "כבוי ידני" אם ms = 0 ו- ns = 0.

"נדלק, לא זוהה תנועה" (id = 001)

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

  • יציאות: אורות = 1 וטיימר = 1.
  • נשאר במצב זה כאשר ms = 1 ו- orx = 0 ו- td (טיימר מסתיים) = 0.
  • הולך לקבוע "אורות דולקים, תנועה זוהתה" אם ms = 1 ו- orx = 1.
  • הולך לקבוע "נדלק, לא מזוהה תנועה" אם ms = 1 ו- orx = 0 ו- td = 1.
  • הולך למצב "מופעל ידנית" אם ms = 0 ו- ns = 1.
  • הולך למצב "כבוי ידני" אם ms = 0 ו- ns = 0.

"נדלק, לא זוהה תנועה" (id = 010)

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

  • יציאות: אורות = 0 וטיימר = 0.
  • נשאר במצב זה כאשר ms = 1 ו- orx = 0.
  • הולך לקבוע "אורות דולקים, תנועה זוהתה" אם ms = 1 ו- orx = 1.
  • הולך למצב "מופעל ידנית" אם ms = 0 ו- ns = 1.
  • הולך למצב "כבוי ידני" אם ms = 0 ו- ns = 0.

"מופעל ידנית" (id = 011)

אורות דולקים, גלאי תנועה אינם רלוונטיים, כך שמס כבויה ו- ns מופעל.

  • יציאות: אורות = 1 וטיימר = 0.
  • נשאר במצב זה כאשר ms = 0 ו- ns = 1.
  • הולך למצב "כבוי ידני" אם ms = 0 ו- ns = 0.
  • הולך למצב "נדלק, אין זיהוי תנועה אם ms = 1.

"כבה ידנית" (id = 100)

אורות כבויים, גלאי תנועה אינם רלוונטיים, ולכן ms כבוי, ו- ns כבוי.

  • יציאות: אורות = 0 וטיימר = 0.
  • נשאר במצב זה כאשר ms = 0 ו- ns = 0.
  • הולך למצב "מופעל ידנית" אם ms = 0 ו- ns = 1.
  • הולך למצב "נדלק, אין זיהוי תנועה אם ms = 1.

מונה למטה קובע:

"Seg 10" (id = 1010)

תצוגת שבעה קטעים מציגה 10.

  • יציאות: bin = "1010" ו- td = 0.
  • הולך למצב "seg 9" אם טיימר = 1.
  • מציין "ריק 2" אם טיימר = 0.

"סג 9" (id = 1001)

תצוגת שבעה קטעים מציגה 9.

  • יציאות: bin = "1001" ו- td = 0.
  • הולך למצב "seg 8" אם טיימר = 1.
  • מציין "ריק 2" אם טיימר = 0.

(מצבים "Seg 8" עד "Seg 2" מושמטים מכיוון שהם עוקבים אחר אותו תבנית כמו "Seg 10" ו- "Seg 9" ואין צורך בהסבר)

"סג 1" (id = 0001)

תצוגת שבעה קטעים מציגה 1.

  • יציאות: bin = "0001" ו- td = 0.
  • עובר למצב "ריק 2" בקצה העולה הבא של השעון (אין צורך בקלט).

"ריק 2" (id = 1111)

תצוגת שבעה קטעים מציגה 0. המטרה של מצב ריק שני היא כך שיהיה מצב נפרד כאשר td = 1 ליתר ביטחון.

  • יציאות: bin = "1111" ו- td = 1.
  • עובר למצב "ריק 1" בקצה העולה הבא של השעון (אין צורך בקלט).

"ריק 1" (id = 0000)

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

  • יציאות: bin = "0000" ו- td = 0.
  • הולך למצב "seg 10" אם טיימר = 1.

שלב 3: טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט

טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט
טבלאות אמת של מכונות המדינה, משוואות עירור ומשוואות פלט

השלב הבא הוא ליצור טבלאות אמת עבור שתי מכונות המדינה ומשוואות עירור ומשוואות פלט עבור כל fsm. עבור כל משוואת עירור fsm, צריכות להיות משוואות לכל ביט מקודד במצב הבא מבחינת המצב הנוכחי ואותות הקלט שלו. עבור כל משוואת פלט fsm, צריכות להיות משוואות לכל אות פלט במונחים של המצב הנוכחי. את כל ארבע מערכי המשוואות ניתן לשאוב מלוחות האמת המתוארים. (qn הוא הביט המקודד הבא של המדינה עבור כל מכונת מצב, ו- q הוא המצב הנוכחי)

(000) שווה ערך ל- q (2) 'q (1)' q (0) 'ו- (0000) שווה ערך ל- q (3)' q (2) 'q (1)' q (0) '

(למשל (0101) הוא q (3) 'q (2) q (1)' q (0) ו- (110) הוא q (2) q (1) q (0) ')

משוואות עירור עבור ה- fsm הראשי:

  • qn (2) = (ms) '(ns)
  • qn (1) = (ms) '(ns)' + (ms) (orx) '[(td) (001) + (010)] + (ms) [(011) + (100)]
  • qn (0) = (ms) '(ns)' + (ms) (orx) '[(000) + (td)' (001)]

משוואות פלט עבור ה- fsm הראשי:

  • אורות = (000) + (001) + (100)
  • טיימר = (001)

משוואות עירור עבור מונה ה- fsm למטה:

  • qn (3) = t [(0000) + (1010) + (1001) + (0001)]
  • qn (2) = t [(1000) + (0111) + (0110) + (0101) + (0001)]
  • qn (1) = t [(0000) + (1000) + (0111) + (0100) + (0011) + (0001)]
  • qn (0) = t [(1010) + (1000) + (0110) + (0100) + (0010) + (0001)]

משוואות פלט עבור מונה ה- fsm למטה:

  • td = (1111)
  • סל (3) = (1010) + (1001) + (1000) + (1111) + (0000)
  • סל (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
  • סל (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
  • סל (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)

שלב 4: עטיפה, תת מודולים ואילוצים

כפי שהוסבר כבר בשלב 1, מודולים אלה נחוצים לפרויקט זה וכולם קשורים יחד עם מודול העטיפה שכותרתו "final_proj.vhd". קובץ האילוץ שכותרתו "Basys3_Master.xdc" משמש לקישור כל כניסות ויציאות העטיפה למתגים, שבעת הקטע ויציאות הקלט/פלט בלוח Basys 3. מתג האב צריך להיות המתג על הלוח הקרוב ביותר לצד בו נמצאים החוטים, המתג הרגיל/ידני הוא השני הקרוב ביותר, ושלושת המתגים המייצגים את שלושת חיישני התנועה הם שלושת המתגים שליד המתג הרגיל/ידני.. כל הקוד (משוואות בוליאניות, הצהרות מודולים וכו ') כבר כתוב בקבצים, כך שלא תצטרך לכתוב שום דבר אחר כדי לגרום לזה לעבוד.

שלב 5: יציאות קלט/פלט עבור LED

יציאות קלט/פלט עבור LED
יציאות קלט/פלט עבור LED
יציאות קלט/פלט עבור LED
יציאות קלט/פלט עבור LED

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

מוּמלָץ: