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

הפוך כל חיישן מתוך FPGA: 4 שלבים
הפוך כל חיישן מתוך FPGA: 4 שלבים

וִידֵאוֹ: הפוך כל חיישן מתוך FPGA: 4 שלבים

וִידֵאוֹ: הפוך כל חיישן מתוך FPGA: 4 שלבים
וִידֵאוֹ: צוות הצלה 8: לצוות הצלה יש כובעים חדשים | ניק ג'וניור 2024, יולי
Anonim
Image
Image
ה- FPGA
ה- FPGA

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

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

הפתרון שלי הוא זה: לגרום ל- FPGA לפעול כחיישן עם ערכים המוזרמים ממחשב (או מאוחסנים בזיכרון, או שנוצרו אד-הוק בתוך ה- FPGA). אז עבור ה- MCU היקר שלך ה- FPGA נראה כמו חיישן, אבל לא כל חיישן: איזה חיישן אתה אוהב. אולי תחליט שאתה צריך יותר רזולוציה או זמן תגובה מהיר מהצפוי, עליך לשנות את החיישן. תזמינו אותו באינטרנט, הוא יגיע תוך יומיים, של כמה חודשים, מי יודע. העניקו ל- PCB שלכם הזמנה או הזמינו מודול עם החיישן החדש. או … כמה לחיצות וה- FPGA מוגדר כחיישן החדש שלך והוא יכול לחקות את התצורה הפנימית המדויקת.

ברגע כתיבת זאת, ה- FPGA יכול לפעול כ- LM75 עם נתוני טמפרטורה המאוחסנים ב- BRAM (ב- FPGA).

שלב 1: ה- MCU

MCU המועדף עלי הוא LPC4337 על LPCXpresso. מעלי יש לי מגן (LPC General Purpose Shield) עם תצוגה וחיישן LM75 אמיתי. LPC4337 הוא ARM Cortex M4 הפועל ב 200MHz וקורטקס M0 קטן יותר (לא בשימוש כאן). החיישן האמיתי מחובר ל- I2C1 היקפי והחיישן הווירטואלי שלנו יחובר ל- I2C0. המקור זמין ב- GitHub שלי.

איך בונים אותו? הורד את LPCXpresso IDE יחד עם ספריית LPCOpen. ייבא את הספרייה הזו ל- IDE וגם פתח את הפרויקט מ- GitHub. הכל צריך להיות מוגדר ואתה יכול ללחוץ על "איתור באגים" בפינה השמאלית התחתונה.

הפרויקט כולו מבוסס על אחת הדוגמאות של ה- NXP (כדי להראות שהפרויקט שלי מדמה חיישן אמיתי ואינו זקוק לקוד מיוחד בצד ה- MCU). בקובץ הראשי (הנקרא iox_sensor.cpp) טמון הקוד הזה:

#הגדר SENSORS_ON_SHIELD

#if מוגדר (SENSORS_ON_SHIELD) #הגדר SHIELD_I2C I2C1 #if מוגדר (SENSORS_ON_FPGA) #הגדר SHIELD_I2C I2C0 #endif

על ידי שינוי SENSOR_ON_SHIELD ו- SENSOR_OR_FPGA המשתמש יכול לעבור בזמן הידור לאיזה חיישן לדבר, החיישן האמיתי או הווירטואלי, כפי שהם נמצאים על סיכות I2C שונות.

שלב 2: ה- FPGA

לוח ה- FPGA המועדף עלי הוא Artix 7 מתוצרת Digilent, בעל Xilinx Arty 7. משתמשים בשני מחברי PMod, אחד לניפוי באגים ואחד למטען האמיתי, החיבור עם לוח ה- MCU.

שוב, קוד המקור ל- FPGA זמין ב- GitHub שלי (תיקיית fpgaSide).

איך בונים אותו? הורד, קנה או פתח את Xilinx Vivado IDE. ייבא את קבצי הפרויקט מ- GitHub. אחד הקבצים (content.coe) הוא נתוני הטמפרטורה בפורמט גולמי שיועברו לחיישן המזויף. יש גם קובץ אקסל בעל אותו שם המסייע בהמרת נתוני טמפרטורה קריאים לאנשים לנתוני LM75 גולמיים. אני מתכנן לשנות את זה לתהליך אוטומטי עם תוכנה שנכתבה ב- Java אבל עד אז הפתרון הזה עובד. סינתזה והטמעה אמורות לקחת זמן, קח זאת בחשבון.

שלב 3: איך זה עובד?

איך זה עובד?
איך זה עובד?
איך זה עובד?
איך זה עובד?

כפי שאמרתי, עבור ה- MCU, ה- FPGA נראה כמו חיישן, ליתר דיוק חיישן I2C. הפלט של ציוד היקפי I2C מחובר לקלט ה- FPGA. בתוך ה- FPGA ישנם 3 רכיבים עיקריים:- בקר I2C- מכשיר I2C- נתונים בקר I2C מקבל נתוני I2C מהסיכות של ה- FPGA ושולח אותם לשאר ה- FPGA ועושה את אותו הדבר בסדר הפוך. הוא שומר על מכונת מצב פנימית לפרוטוקול I2C (אגב, הנה התיעוד עבורו). מה שולח רכיב זה למכשיר I2C? הבייט המתקבל כעת, המיקום של אותו בית בתקשורת הנוכחית והאם ה- MCU כותב ל- FPGA או קורא אותו. מכשיר I2C מקבל את הבייטים שנשלחו ומעדכן את המבנה הפנימי המדומה של החיישן. זה יכול פשוט לעדכן את מצביע הרישום או לבקש נתונים חדשים ממקור הנתונים. רכיב הנתונים זורם נקודות נתונים חדשות. כרגע זהו רק זיכרון ROM שהכתובת שלו מתוגברת (בערך) פעמיים בשנייה.

מה מטרת הסיום שלי? זה מוצג בתמונה השנייה. כלומר: אפשר למכשירי I2C נוספים (חיישנים ואחרים) להיות מדומים בו זמנית בתוך ה- FPGA. הנתונים בקצה האחורי של החיישן שיש לאחסן במטמון ב- FPGA ולהזרים אותם מהמחשב באמצעות USB או אתרנט. תמיכה בחיישנים מתקדמים יותר והתקני I2C אחרים (זיכרון, מנהלי התקני LED וכו ').

שלב 4: הרכבת הכל ביחד

לשים את הכל ביחד
לשים את הכל ביחד
לשים את הכל ביחד
לשים את הכל ביחד

עכשיו הזמן לחבר הכל ביחד. תיאורטית, זה פשוט: ללוח ה- mcu יש מחבר PMod (I2C0 & SSP0 (יכול לעבוד כמו SPI)). ללוח Artix יש 4 מחברי PMod שניתן להשתמש בהם כרצונך. אני בוחר במחבר D כדי לדבר עם ה- MCU ובמחבר B להתחבר למנתח הלוגי שלי.

אַזהָרָה

אתה לא יכול לחבר את שני הלוחות זה לזה. למה? PMod נבנה כדי להקל על החיבור של לוח מאסטר/מארח (שנותן כוח) ללוח עבדים/חיישן (המקבל חשמל). אבל בפרויקט זה שני הלוחות נותנים כוח ואם אתה מחבר את פלט 3.3V מלוח אחד לפלט 3.3V של הלוח השני דברים קשים יכולים לקרות. אבל הם עשויים שלא וייתכן שתשנה את הפרמטרים של מסילות החשמל של ה- FPGA (הם מעוצבים בקפידה רבה). אז אל תיקחו את הסיכון הזה והזיזו את המחבר סיכה אחת שמאלה (והפכו גם את לוח ה- FPGA) כפי שניתן לראות בתמונות למעלה. הנה המפרט של PMod, אתה יכול ללמוד אותו, מה שעשיתי במילים קצרות הוא לא לחבר את ה- VCC של שני הלוחות.

מוּמלָץ: