תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
לפני שנתחיל, הנה כמה דברים שאתה רוצה לפרויקט: רשימת חלקים 1x Digilent Zybo Zynq-7000 לוח 1x Quadcopter Frame המסוגל להרכיב את Zybo (קובץ Adobe Illustrator לחיתוך מצורף) 4x Turnigy D3530/14 1100KV Brushless Motors 4x Turnigy ESC Basic -18A בקר מהירות 4x מדחפים (אלה צריכים להיות גדולים מספיק כדי להרים את הארבע) שלך 2x nRF24L01+ מקלט 1x IMU BNO055 דרישות תוכנה Xilinx Vivado 2016.2 הערה: המנועים למעלה אינם המנועים היחידים שניתן להשתמש בהם. הם רק אלה המשמשים בפרויקט זה. כנ ל לגבי שאר החלקים ודרישות התוכנה. יש לקוות שזוהי הבנה בלתי מדוברת בעת קריאת הוראה זו.
שלב 1: הפעל את מודול PWM
תכנות מערכת SystemVerilog פשוטה (או תוכנית HDL אחרת) לרישום מצערת HI ומצערת LO באמצעות מתגי קלט. חבר את ה- PWM עם מנוע ESC יחיד ומנוע מברשת ללא טרניגי. בדוק את הקבצים הבאים כדי לברר כיצד לכייל את ESC. הקוד הסופי מצורף בשלב 5 עבור מודול PWM. מפתח PWM מצורף שלב זה ESC גליון נתונים: Turnigy ESC גליון נתונים PDF (דברים שיש לשים לב אליהם הם המצבים השונים שניתן לבחור באמצעות מצערת HI ו- LO)
שלב 2: הגדר את עיצוב הבלוק
צור עיצוב בלוק לחץ פעמיים על הבלוק החדש שנוצר ייבא הגדרות XPS שהורדות כאן: https://github.com/ucb-bar/fpga-zynq/tree/master/z… שנה הגדרות PS-PL תצורה M AXI ממשק היקפי I/ O Pins Ethernet 0 USB 0 SD 0 SPI 1 UART 1 I2C 0 TTC0 SWDT GPI MIOMIO Timer Configuration Timer 0 תצוגת WatchdogClock FCLK_CLK0 והגדר את התדר ל- 100 MHz צור I2C ו- SPI חיבור חיצוני FCLK_CLK0 ל- M_AXI_GP0_ACLK הפעל את בלוק יצירת g
שלב 3: כייל את ה- IMU
מקלט BNO055 משתמש בתקשורת I2C. (קריאה מומלצת למתחילים: https://learn.sparkfun.com/tutorials/i2c) הנהג להפעלת ה- IMU נמצא כאן: https://github.com/BoschSensortec/BNO055_driver Quadcopter אינו מצריך שימוש במגנטומטר מה- BNO055. בגלל זה, מצב הפעולה הדרוש הוא מצב IMU. זה משתנה על ידי כתיבת מספר בינארי xxxx1000 לרשם OPR_MODE, כאשר 'x' הוא 'לא אכפת'. הגדר את הביטים האלה ל- 0.
שלב 4: שלב את משדר האלחוט
מקלט המשדר האלחוטי משתמש בתקשורת SPI. מצורף דף המפרט של nRF24L01+ הדרכה טובה על nrf24l01+ אך עם arduino:
שלב 5: תכנת את ה- FPGA של Zybo
סקירה כללית מודולים אלה הם המודולים האחרונים המשמשים לשליטה על ה- PWM של הארבעה. motor_ctl_wrapper.sv מטרה: העטיפה לוקחת זוויות אוילר ואחוז מצערת. הוא מוציא PWM מפוצל, שיאפשר להתייצבות הקווקדופטר. חסימה זו קיימת מכיוון שרביעיות נוטות להפרעות באוויר ודורשות ייצוב כלשהו. אנו משתמשים בזוויות אוילר, מכיוון שאיננו מתכננים התהפכות או זוויות כבדות שעלולות לגרום לנעילת גימבל. קלט: אוטובוס נתונים של 25 סיביות CTL_IN = {[24] GO, [23:16] אוילר X, [15: 8] Euler Y, [7: 0] אחוז מצערת}, שעון (clk), פלט CLR סינכרוני (sclr): מנוע 1 PWM, מנוע 2 PWM, מנוע 3 PWM, מנוע 4 PWM, אחוז מצערת PWM אחוז המצערת PWM הוא משמש לאתחול ה- ESC, שירצה טווח טהור של 30% - 70% של PWM, לא זה מערכי PWM של מנוע 1-4. מתקדם - בלוקי IP של Vivado Zynq: 8 הוספות (LUT) 3 חיסורים (LUT) 5 מכפילים (זיכרון בלוק (BRAM)) clock_div.sv (AKA pwm_fsm.sv) מטרה: שליטה בחומרה, כולל פלט MUX, PWM ו- sclr עבור motor_ctl_wrapper. כל מכונת מדינה סופית (FSM) משמשת לדבר אחד: שליטה בחומרה אחרת. כל סטייה גדולה מהיעד הזה יכולה לגרום ל- FSM לכאורה ללבוש צורה של מודול מסוג אחר (מונה, אדרדר וכו '). Pwm_fsm מכיל 3 מצבים: INIT, CLR ו- FLYINIT: אפשר למשתמש לתכנת את ה- ESC כ- הרצוי. שולח אות בחירה ל- mux_pwm שיוצא PWM ישר לכל המנועים. לולאה חזרה לעצמה עד GO == '1'. CLR: נקה נתונים ב- motor_ctl_wrapper ובמודול pwm out. FLY: לולאה לנצח לייצוב הארבע (אם לא יתאפסו). שולח את ה- PWM המתוגמל דרך mux_pwm. קלט: GO, RESET, clkOutput: RST עבור איפוס מודולים אחרים, FullFlight לאותת מצב FLY, תקופה להפעלת atmux_pwm.sv מטרה: קלט: פלט: PWM לכל 4 מנועיםpwm.sv מטרה: קלט: פלט: