Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
En este tutorial, vamos a escribir código Verilog para controlar el servomotor. El servo SG-90 es fabricado por Waveshare. Cuando compra el servomotor, puede recibir una hoja de datos que enumera el voltaje de funcionamiento, el par máximo y la modulación de ancho de pulso (PWM) propuesta … etc. Sin embargo, el FPGA DuePrologic proporciona un voltaje de entrada de 3.3V donde el voltaje de operación del servo SG-90 es de 5V a 7V. En la falta de energía eléctrica, enumeraré mi PWM calibrado para hacer girar el servomotor con éxito.
Nuestra tarea: el servomotor gira hacia adelante y hacia atrás en un período de 5 segundos.
Menú completo:
Paso 1: Construya el circuito electrónico
Paso 2: Configura el planificador de pines
Haga clic en "Iniciar análisis de asignación de E / S" para comprobar si el planificador de pines está configurado correctamente. De lo contrario, tendrá que importar todos los nombres de los puertos usted mismo.
Paso 3: Código Verilog
Creamos un temporizador "servo_count". Cuando "servo_A" es ALTO, el PWM es de 1.5ms y, por lo tanto, el servo se ubica a 120 grados. Por el contrario, cuando "servo_A" es BAJO, el PWM es de 0,15 ms y, por lo tanto, el servo se mantiene en 0 grados.
asignar XIO_2 [3] = servo_pulse; //para V'
reg [31: 0] servo_count;
comienzo inicial
servo_count <= 32'b0;
servo_A <= 1'b0;
fin
siempre @ (posedge CLK_66)
empezar
servo_count <= servo_count + 1'b1;
if (servo_count> 400000000) // Ciclo de reloj 66MHz, 1 / 66M * 400000000 ~ 5 segundos
empezar
servo_A <=! servo_A;
servo_count <= 32'b0;
fin
fin
reg [31: 0] ex_auto;
comienzo inicial
ex_auto <= 32'b0;
servo_auto <= 1'b0;
fin
siempre @ (posedge CLK_66)
empezar
si (servo_A == 1'b1)
empezar
ex_auto <= ex_auto + 1'b1;
if (ex_auto> 100000) // Ciclo de reloj 66MHz, este PWM es ~ 1.5ms, el servo gira a 120 grados
empezar
servo_auto <=! servo_auto;
ex_auto <= 32'b0;
fin
fin
si (servo_A == 1'b0)
empezar
ex_auto <= ex_auto + 1'b1;
if (ex_auto> 10000) // Ciclo de reloj 66MHz, este PWM es ~ 0.15ms, el servo gira a 0 grados
empezar
servo_auto <=! servo_auto;
ex_auto <= 32'b0;
fin
fin
fin
Paso 4: Cargue el código Verilog
Haga clic en "Iniciar compilación". Si no se muestra ningún mensaje de error, vaya a "Programador" para completar la configuración del hardware. Recuerde actualizar el archivo pof en "Cambiar archivo" si es necesario. Haga clic en "Inicio" para cargar el código.
Después de todo, debería ver que el servomotor gira periódicamente.