Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Antes de comenzar, aquí hay algunas cosas que desea para el proyecto: Lista de piezas 1 placa Digilent Zybo Zynq-7000 1 marco Quadcopter capaz de montar Zybo (archivo de Adobe Illustrator para corte con láser adjunto) 4 motores Turnigy D3530 / 14 1100KV sin escobillas 4x Turnigy ESC Basic -18A Speed Controller 4x Hélices (deben ser lo suficientemente grandes para levantar su quadcopter) 2x nRF24L01 + transceptor 1x IMU BNO055 Requisitos de software Xilinx Vivado 2016.2 NOTA: Los motores anteriores no son los únicos motores que se pueden usar. Son solo los que se utilizan en este proyecto. Lo mismo ocurre con el resto de las piezas y los requisitos de software. Con suerte, ese es un entendimiento tácito al leer este Instructable.
Paso 1: Ejecute el módulo PWM
Programe un SystemVerilog simple (u otro programa HDL) para registrar el acelerador HI y el acelerador LO utilizando interruptores de entrada. Enganche el PWM con un solo ESC y un motor sin escobillas Turnigy. Consulte los siguientes archivos para averiguar cómo calibrar el ESC. El código final se adjunta en el paso 5 para el módulo PWM. En este paso se adjunta un motor de arranque PWM Hoja de datos de ESC: PDF de hoja de datos de Turnigy ESC (Lo que debe prestar atención son los diferentes modos que puede seleccionar usando el acelerador HI y LO)
Paso 2: configurar el diseño del bloque
Crear diseño de bloque Haga doble clic en el bloque recién generado. O Pines Ethernet 0 USB 0 SD 0 SPI 1 UART 1 I2C 0 TTC0 SWDT GPI MIOMIO Configuración Temporizador 0 Watchdog Configuración del reloj FCLK_CLK0 y establecer la frecuencia a 100 MHz Hacer I2C y SPI externos Conectar FCLK_CLK0 a M_AXI_GP0_ACLK Ejecutar automatización de bloques Crear puerto y llamarlo "gnd"
Paso 3: calibre la IMU
El transceptor BNO055 utiliza comunicación I2C. (Lectura sugerida para principiantes: https://learn.sparkfun.com/tutorials/i2c) El controlador para ejecutar la IMU se encuentra aquí: https://github.com/BoschSensortec/BNO055_driver Un quadcopter no requiere el uso del magnetómetro del BNO055. Debido a esto, el modo de operación necesario es el modo IMU. Esto se cambia escribiendo un número binario xxxx1000 en el registro OPR_MODE, donde 'x' es un 'no me importa'. Establezca esos bits en 0.
Paso 4: integre el transceptor inalámbrico
El transceptor inalámbrico utiliza comunicación SPI. Se adjunta la hoja de especificaciones para el nRF24L01 + Un buen tutorial sobre el nrf24l01 + pero con arduino:
Paso 5: Programe el Zybo FPGA
Estos módulos son los módulos finales utilizados para el control del PWM del quadcopter. motor_ctl_wrapper.sv Propósito: El envoltorio toma ángulos de Euler y un porcentaje de aceleración. Produce un PWM compensado que permitirá que el cuadricóptero se estabilice. Este bloqueo existe porque los cuadricópteros son propensos a sufrir perturbaciones en el aire y requieren algún tipo de estabilización. Estamos usando ángulos de Euler, ya que no planeamos giros o ángulos pesados que podrían causar el bloqueo del cardán. Entrada: bus de datos de 25 bits CTL_IN = {[24] GO, [23:16] Euler X, [15: 8] Euler Y, [7: 0] Porcentaje de aceleración}, Reloj (clk), CLR síncrono (sclr) Salida: Motor 1 PWM, Motor 2 PWM, Motor 3 PWM, Motor 4 PWM, Porcentaje de aceleración PWM El Porcentaje de aceleración PWM es utilizado para inicializar el ESC, que querrá un rango puro de 30% - 70% de PWM, no el de los valores de PWM del motor 1-4. Avanzado - Bloques IP Vivado Zynq: 8 Sumas (LUT) 3 Restas (LUT) 5 Multiplicadores (memoria de bloque (BRAM)) clock_div.sv (también conocido como pwm_fsm.sv) Propósito: controlar el hardware, incluido el MUX, la salida PWM y sclr para motor_ctl_wrapper. Cualquier máquina de estado finito (FSM) se usa para una cosa: controlar otro hardware. Cualquier gran desviación de este objetivo puede hacer que el supuesto FSM tome la forma de un tipo diferente de módulo (contador, sumador, etc.). Pwm_fsm tiene 3 estados: INIT, CLR y FLYINIT: Permitir al usuario programar el ESC como deseado. Envía una señal de selección a mux_pwm que emite PWM directo a todos los motores. Vuelve a sí mismo hasta GO == '1'. CLR: Borrar datos en motor_ctl_wrapper y el módulo de salida pwm. FLY: Bucle para siempre para estabilizar el quadcopter (a menos que estemos reiniciados). Envía el PWM compensado a través del mux_pwm. Entrada: GO, RESET, clk Salida: RST para otros reinicios del módulo, FullFlight para señalar el modo FLY, Período para ejecutar atmux_pwm.sv Propósito: Entrada: Salida: PWM para los 4 motores pwm.sv Propósito: Entrada: Salida: