Índice:

Quadcopter usando placa Zybo Zynq-7000: 5 etapas
Quadcopter usando placa Zybo Zynq-7000: 5 etapas

Vídeo: Quadcopter usando placa Zybo Zynq-7000: 5 etapas

Vídeo: Quadcopter usando placa Zybo Zynq-7000: 5 etapas
Vídeo: Embedded Recipes 2017 - Developing an embedded video application... - Christian Charreyre 2024, Julho
Anonim
Quadcopter usando placa Zybo Zynq-7000
Quadcopter usando placa Zybo Zynq-7000

Antes de começarmos, aqui estão algumas coisas que você deseja para o projeto: Lista de peças 1x Digilent Zybo Zynq-7000 placa 1x Quadcopter Frame capaz de montar Zybo (arquivo Adobe Illustrator para corte a laser anexado) 4x Turnigy D3530 / 14 1100KV Brushless Motors 4x Turnigy ESC Basic Controlador de velocidade 18A 4x hélices (precisam ser grandes o suficiente para levantar seu quadricóptero) 2x nRF24L01 + transceptor 1x IMU BNO055Requisitos de softwareXilinx Vivado 2016.2NOTA: Os motores acima não são os únicos motores que podem ser usados. Eles são apenas os usados neste projeto. O mesmo vale para o resto das peças e requisitos de software. Felizmente, esse é um entendimento implícito ao ler este Instructable.

Etapa 1: coloque o módulo PWM em execução

Programe um SystemVerilog simples (ou outro programa HDL) para registrar o acelerador HI e o acelerador LO usando os interruptores de entrada. Conecte o PWM com um único ESC e Motor Turnigy Brushless. Verifique os arquivos a seguir para descobrir como calibrar o ESC. O código final está anexado na etapa 5 para o módulo PWM. Um iniciador PWM está anexado neste stepESC Datasheet: Turnigy ESC Datasheet PDF (coisas a serem observadas são os diferentes modos que você pode selecionar usando o acelerador HI e LO)

Etapa 2: configurar o projeto do bloco

Criar projeto de bloco Clique duas vezes no bloco recém-gerado Importar configurações XPS baixadas aqui: https://github.com/ucb-bar/fpga-zynq/tree/master/z… Modificar configurações PS-PL Configuração M AXI interface GP0 Periférico I / O Pins Ethernet 0 USB 0 SD 0 SPI 1 UART 1 I2C 0 TTC0 SWDT GPI MIOMIO Timer de configuração 0 WatchdogClock Configuração FCLK_CLK0 e definir a frequência para 100 MHzMake I2C e SPI externo Conecte FCLK_CLK0 a M_AXI_GP0_ACLK Executar automação de bloco Criar porta e chamá-la de "gnd"

Etapa 3: Calibre o IMU

Calibre o IMU
Calibre o IMU

O transceptor BNO055 usa comunicação I2C. (Leitura sugerida para iniciantes: https://learn.sparkfun.com/tutorials/i2c) O driver para executar o IMU está localizado aqui: https://github.com/BoschSensortec/BNO055_driver Um quadricóptero não requer o uso do magnetômetro do BNO055. Por isso, o modo de operação necessário é o modo IMU. Isso é alterado escrevendo um número binário xxxx1000 no registrador OPR_MODE, onde 'x' é um 'não importa'. Defina esses bits como 0.

Etapa 4: Integrar o transceptor sem fio

Integrar o transceptor sem fio
Integrar o transceptor sem fio
Integrar o transceptor sem fio
Integrar o transceptor sem fio

O transceptor sem fio usa comunicação SPI. Em anexo está a folha de especificações do nRF24L01 + Um bom tutorial sobre o nrf24l01 +, mas com arduino:

Etapa 5: programe o Zybo FPGA

Visão geralEstes módulos são os módulos finais usados para o controle do PWM do quadricóptero. motor_ctl_wrapper.svPurpose: O wrapper considera ângulos de Euler e uma porcentagem de aceleração. Ele produz um PWM compensado que permitirá que o quadricóptero se estabilize. Este bloqueio existe porque os quadricópteros são propensos a perturbações no ar e requerem algum tipo de estabilização. Estamos usando ângulos de Euler, pois não planejamos inverter ou ângulos pesados que podem causar Bloqueio de cardan. Entrada: barramento de 25 bits de dados CTL_IN = {[24] GO, [23:16] Euler X, [15: 8] Euler Y, [7: 0] Porcentagem de aceleração}, Relógio (clk), CLR síncrono (sclr) Saída: Motor 1 PWM, Motor 2 PWM, Motor 3 PWM, Motor 4 PWM, Porcentagem de aceleração PWM A porcentagem de aceleração PWM é usado para inicializar o ESC, que irá querer uma faixa pura de 30% - 70% de PWM, não aquela dos valores de PWM do Motor 1-4. Avançado - Vivado Zynq Blocos de IP: 8 Adiciona (LUTs) 3 Subtrai (LUTs) 5 Multiplicadores (Bloco de Memória (BRAM)) clock_div.sv (também conhecido como pwm_fsm.sv) Objetivo: Controlar o hardware, incluindo MUX, saída PWM e sclr para motor_ctl_wrapper. Qualquer máquina de estado finito (FSM) é usada para uma coisa: controlar outro hardware. Qualquer grande desvio deste objetivo pode fazer com que o suposto FSM assuma a forma de um tipo diferente de módulo (contador, somador, etc.). Pwm_fsm tem 3 estados: INIT, CLR e FLYINIT: Permite ao usuário programar o ESC como desejado. Envia um sinal de seleção para mux_pwm que emite PWM direto para todos os motores. Loop de volta para si mesmo até GO == '1'. CLR: Limpe os dados em motor_ctl_wrapper e no módulo pwm out. FLY: Loop para sempre para estabilizar o quadricóptero (a menos que seja reiniciado). Envia o PWM compensado através do mux_pwm. Input: GO, RESET, clkOutput: RST para outras redefinições do módulo, FullFlight para sinalizar o modo FLY, Período para executar atmux_pwm.svPurpose: Input: Output: PWM para todos os 4 motorspwm.svPurpose: Input: Output:

Recomendado: