Índice:

Servo motor FPGA Cyclone IV DueProLogic: 4 etapas
Servo motor FPGA Cyclone IV DueProLogic: 4 etapas

Vídeo: Servo motor FPGA Cyclone IV DueProLogic: 4 etapas

Vídeo: Servo motor FPGA Cyclone IV DueProLogic: 4 etapas
Vídeo: FPGA Cyclone IV DueProLogic controls servo motor (Tutorial and code) 2024, Novembro
Anonim
FPGA Cyclone IV DueProLogic Controls Servo Motor
FPGA Cyclone IV DueProLogic Controls Servo Motor

Neste tutorial, vamos escrever código Verilog para controlar servo motor. O servo SG-90 é fabricado pela Waveshare. Ao comprar o servo motor, você pode receber uma folha de dados que lista a tensão de operação, o torque máximo e a modulação por largura de pulso (PWM) proposta … etc. No entanto, o FPGA DuePrologic fornece tensão de entrada de 3,3 V onde a tensão de operação do servo SG-90 é 5 V - 7 V. Na falta de energia elétrica, listarei meu PWM calibrado para girar o servo motor com sucesso.

Nossa tarefa: O servo motor é girado para frente e para trás com o período de 5 segundos

Menu completo:

Etapa 1: construir o circuito eletrônico

Construir Circuito Eletrônico
Construir Circuito Eletrônico

Etapa 2: configurar o planejador de pinos

Configurar planejador de pinos
Configurar planejador de pinos

Clique em "Iniciar Análise de Atribuição de E / S" para verificar se o planejador de pinos está configurado corretamente. Caso contrário, você terá que importar todos os nomes de portas por conta própria.

Etapa 3: Código Verilog

Criamos um temporizador "servo_count". Quando "servo_A" é HIGH, o PWM é 1,5 ms e, portanto, o servo está localizado a 120 graus. Em contraste, quando "servo_A" é BAIXO, o PWM é 0,15 ms e, portanto, o servo é mantido em 0 grau.

atribuir XIO_2 [3] = servo_pulse; // para V '

reg [31: 0] servo_count;

começo inicial

servo_count <= 32'b0;

servo_A <= 1'b0;

fim

sempre @ (posedge CLK_66)

começar

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Ciclo do relógio 66MHz, 1 / 66M * 400000000 ~ 5 segundos

começar

servo_A <=! servo_A;

servo_count <= 32'b0;

fim

fim

reg [31: 0] ex_auto;

começo inicial

ex_auto <= 32'b0;

servo_auto <= 1'b0;

fim

sempre @ (posedge CLK_66)

começar

if (servo_A == 1'b1)

começar

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Ciclo de clock de 66 MHz, este PWM é ~ 1,5 ms, o servo gira para 120 graus

começar

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

fim

fim

if (servo_A == 1'b0)

começar

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 10000) // Ciclo de clock de 66 MHz, este PWM é ~ 0,15 ms, o servo gira para 0 graus

começar

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

fim

fim

fim

Etapa 4: fazer upload do código Verilog

Image
Image

Clique em "Iniciar Compilação". Se nenhuma mensagem de erro for exibida, vá para "Programador" para concluir a configuração do hardware. Lembre-se de atualizar o arquivo pof em "Alterar arquivo" se necessário. Clique em "Iniciar" para fazer o upload do código.

Afinal, você deve ver que o servo motor é girado periodicamente.

Recomendado: