สารบัญ:

Quadcopter ใช้บอร์ด Zybo Zynq-7000: 5 ขั้นตอน
Quadcopter ใช้บอร์ด Zybo Zynq-7000: 5 ขั้นตอน

วีดีโอ: Quadcopter ใช้บอร์ด Zybo Zynq-7000: 5 ขั้นตอน

วีดีโอ: Quadcopter ใช้บอร์ด Zybo Zynq-7000: 5 ขั้นตอน
วีดีโอ: ZYNQ for beginners: programming and connecting the PS and PL | Part 1 2024, พฤศจิกายน
Anonim
Quadcopter ใช้บอร์ด Zybo Zynq-7000
Quadcopter ใช้บอร์ด Zybo Zynq-7000

ก่อนที่เราจะเริ่มต้น นี่คือสิ่งที่คุณต้องการสำหรับโครงการ: รายการชิ้นส่วน1x Digilent Zybo Zynq-7000 บอร์ด 1x Quadcopter Frame สามารถติดตั้ง Zybo ได้ (ไฟล์ Adobe Illustrator สำหรับการตัดด้วยเลเซอร์) 4x Turnigy D3530/14 1100KV มอเตอร์แบบไม่มีแปรง 4x Turnigy ESC Basic -18A ตัวควบคุมความเร็ว 4x ใบพัด (เหล่านี้ต้องมีขนาดใหญ่พอที่จะยก quadcopter ของคุณ) 2x nRF24L01+ transceiver 1x IMU BNO055ข้อกำหนดของซอฟต์แวร์Xilinx Vivado 2016.2หมายเหตุ: มอเตอร์ด้านบนไม่ใช่มอเตอร์เดียวที่สามารถใช้ได้ พวกเขาเป็นเพียงสิ่งที่ใช้ในโครงการนี้ เช่นเดียวกับส่วนที่เหลือของชิ้นส่วนและข้อกำหนดของซอฟต์แวร์ หวังว่านั่นเป็นความเข้าใจที่ไม่ได้พูดเมื่ออ่านคำแนะนำนี้

ขั้นตอนที่ 1: รับโมดูล PWM ที่ทำงานอยู่

ตั้งโปรแกรม SystemVerilog อย่างง่าย (หรือโปรแกรม HDL อื่นๆ) เพื่อลงทะเบียน HI throttle และ LO throttle โดยใช้สวิตช์อินพุต ขอ PWM ด้วย ESC และ Turnigy Brushless Motor ตัวเดียว ตรวจสอบไฟล์ต่อไปนี้เพื่อค้นหาวิธีการปรับเทียบ ESC รหัสสุดท้ายแนบมาในขั้นตอนที่ 5 สำหรับโมดูล PWM มีการติดตั้ง PWM starter ในขั้นตอนนี้ESC Datasheet: Turnigy ESC Datasheet PDF (สิ่งที่ต้องใส่ใจคือโหมดต่างๆ ที่คุณสามารถเลือกได้โดยใช้เค้น HI และ LO)

ขั้นตอนที่ 2: ตั้งค่าการออกแบบบล็อก

สร้างการออกแบบบล็อก ดับเบิลคลิกที่บล็อกที่สร้างขึ้นใหม่ นำเข้าการตั้งค่า XPS ดาวน์โหลดที่นี่: https://github.com/ucb-bar/fpga-zynq/tree/master/z… แก้ไขการตั้งค่า PS-PL การกำหนดค่า M AXI GP0 อินเทอร์เฟซ อุปกรณ์ต่อพ่วง I/ O Pins Ethernet 0 USB 0 SD 0 SPI 1 UART 1 I2C 0 TTC0 SWDT GPI MIOMIO การกำหนดค่า Timer 0 WatchdogClock การกำหนดค่า FCLK_CLK0 และตั้งค่าความถี่เป็น 100 MHz ทำให้ I2C และ SPI เชื่อมต่อภายนอก FCLK_CLK0 เป็น M_AXI_GP0_ACLK เรียกใช้บล็อกอัตโนมัติ สร้างพอร์ตและเรียกมันว่า "gnd"

ขั้นตอนที่ 3: ปรับเทียบ IMU

ปรับเทียบ IMU
ปรับเทียบ IMU

ตัวรับส่งสัญญาณ BNO055 ใช้การสื่อสารแบบ I2C (การอ่านที่แนะนำสำหรับผู้เริ่มต้น: https://learn.sparkfun.com/tutorials/i2c) ไดรเวอร์สำหรับเรียกใช้ IMU อยู่ที่นี่: https://github.com/BoschSensortec/BNO055_driverA quadcopter ไม่ต้องใช้เครื่องวัดสนามแม่เหล็กจาก BNO055. ด้วยเหตุนี้ โหมดการทำงานที่จำเป็นคือโหมด IMU สิ่งนี้เปลี่ยนแปลงโดยการเขียนเลขฐานสอง xxxx1000 ลงในการลงทะเบียน OPR_MODE โดยที่ 'x' คือ 'ไม่สนใจ' ตั้งค่าบิตเหล่านั้นเป็น 0

ขั้นตอนที่ 4: รวมตัวรับส่งสัญญาณไร้สาย

รวมเครื่องรับส่งสัญญาณไร้สาย
รวมเครื่องรับส่งสัญญาณไร้สาย
รวมเครื่องรับส่งสัญญาณไร้สาย
รวมเครื่องรับส่งสัญญาณไร้สาย

ตัวรับส่งสัญญาณไร้สายใช้การสื่อสาร SPI สิ่งที่แนบมาเป็นแผ่นข้อมูลจำเพาะสำหรับ nRF24L01+A บทช่วยสอนที่ดีเกี่ยวกับ nrf24l01+ แต่สำหรับ Arduino:

ขั้นตอนที่ 5: ตั้งโปรแกรม Zybo FPGA

ภาพรวม โมดูลเหล่านี้เป็นโมดูลสุดท้ายที่ใช้สำหรับการควบคุม PWM ของควอดคอปเตอร์ motor_ctl_wrapper.svวัตถุประสงค์: เครื่องห่อใช้มุมออยเลอร์และเปอร์เซ็นต์เค้น มันส่งเอาต์พุต PWM ที่ได้รับการชดเชยซึ่งจะทำให้ quadcopter เสถียร บล็อกนี้มีอยู่เพราะว่าเครื่องบินควอดคอปเตอร์มีแนวโน้มที่จะเกิดการรบกวนในอากาศและต้องการการรักษาเสถียรภาพบางอย่าง เรากำลังใช้มุมออยเลอร์ เนื่องจากเราไม่ได้วางแผนในการพลิกกลับหรือมุมที่หนักหน่วงซึ่งอาจทำให้เกิด Gimbal Lock อินพุต: บัสข้อมูล 25 บิต CTL_IN = { [24] GO, [23:16] Euler X, [15: 8] Euler Y, [7:0] เปอร์เซ็นต์คันเร่ง } นาฬิกา (clk), Synchronous CLR (sclr) เอาต์พุต: มอเตอร์ 1 PWM, มอเตอร์ 2 PWM, มอเตอร์ 3 PWM, มอเตอร์ 4 PWM, เปอร์เซ็นต์คันเร่ง PWM เปอร์เซ็นต์คันเร่ง PWM คือ ใช้สำหรับการเริ่มต้น ESC ซึ่งจะต้องการช่วง PWM บริสุทธิ์ 30% - 70% ไม่ใช่ค่าจากค่า PWM 1-4 ของมอเตอร์ขั้นสูง - Vivado Zynq IP Blocks:8 Adds (LUTs)3 Subtracts (LUTs)5 ตัวคูณ (Block Memory (BRAM))clock_div.sv (AKA pwm_fsm.sv) วัตถุประสงค์: ควบคุมฮาร์ดแวร์ รวมถึง MUX, เอาต์พุต PWM และ sclr สำหรับ motor_ctl_wrapper Finite State Machine (FSM) ใช้สำหรับสิ่งหนึ่ง: ควบคุมฮาร์ดแวร์อื่น การเบี่ยงเบนขนาดใหญ่จากวัตถุประสงค์นี้อาจทำให้ FSM ที่ควรจะอยู่ในรูปแบบของโมดูลประเภทอื่น (ตัวนับ แอดเดอร์ ฯลฯ) pwm_fsm มี 3 สถานะ: INIT, CLR และ FLYINIT: อนุญาตให้ผู้ใช้ตั้งโปรแกรม ESC เป็น ที่ต้องการ ส่งสัญญาณเลือกไปที่ mux_pwm ซึ่งจะส่งสัญญาณ PWM แบบตรงไปยังมอเตอร์ทั้งหมด วนกลับเป็นตัวเองจนกระทั่ง GO == '1'. CLR: ล้างข้อมูลใน motor_ctl_wrapper และ pwm out module. FLY: วนซ้ำตลอดไปเพื่อทำให้ควอดคอปเตอร์มีเสถียรภาพ (เว้นแต่เราจะรีเซ็ต) ส่ง PWM ที่ชดเชยผ่าน mux_pwm. Input: GO, RESET, clkOutput: RST สำหรับการรีเซ็ตโมดูลอื่นๆ, FullFlight to signal FLY mode, ระยะเวลาในการทำงาน atmux_pwm.svPurpose:Input:Output: PWM for all 4 motorspwm.svPurpose:Input:Output:

แนะนำ: