Taula de continguts:

Servomotor FPGA Cyclone IV DueProLogic Controls: 4 passos
Servomotor FPGA Cyclone IV DueProLogic Controls: 4 passos

Vídeo: Servomotor FPGA Cyclone IV DueProLogic Controls: 4 passos

Vídeo: Servomotor FPGA Cyclone IV DueProLogic Controls: 4 passos
Vídeo: Servomotor control on the FPGA Basys3 Board 2024, Desembre
Anonim
Servomotor de control FPGA Cyclone IV DueProLogic
Servomotor de control FPGA Cyclone IV DueProLogic

En aquest tutorial, escriurem el codi Verilog per controlar el servomotor. El servo SG-90 està fabricat per Waveshare. Quan compreu el servomotor, és possible que rebeu un full de dades que enumera la tensió de funcionament, el parell màxim i la modulació d’amplada de pols (PWM) proposada … etc. No obstant això, el FPGA DuePrologic proporciona una tensió d'entrada de 3,3V, on la tensió de funcionament del servo SG-90 és de 5V a 7V. A manca d’energia elèctrica, llistaré el meu PWM calibrat per tal de girar el servomotor amb èxit.

La nostra tasca: el servo motor gira endavant i endarrere amb el període de 5 segons

Menú complet:

Pas 1: Construir un circuit electrònic

Construeix un circuit electrònic
Construeix un circuit electrònic

Pas 2: configureu el Planificador de pins

Configureu el planificador de pins
Configureu el planificador de pins

Feu clic a "Inicia l'anàlisi d'assignacions d'E / S" per comprovar si el planificador de pins està configurat correctament. En cas contrari, heu d’importar tots els noms dels ports.

Pas 3: codi de Verilog

Creem un temporitzador "servo_count". Quan "servo_A" és ALTA, el PWM fa 1,5 ms i, per tant, el servo es troba a 120 graus. En canvi, quan "servo_A" és BAIX, el PWM és de 0,15 ms i, per tant, el servo es manté a 0 graus.

assigna XIO_2 [3] = servo_pulse; // per a V '

reg [31: 0] servo_count;

inicial inicial

servo_count <= 32'b0;

servo_A <= 1'b0;

final

always @ (posedge CLK_66)

començar

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Cicle de rellotge a 66 MHz, 1/66 M * 400000000 ~ 5 segons

començar

servo_A <=! servo_A;

servo_count <= 32'b0;

final

final

reg [31: 0] ex_auto;

inicial inicial

ex_auto <= 32'b0;

servo_auto <= 1'b0;

final

always @ (posedge CLK_66)

començar

if (servo_A == 1'b1)

començar

ex_auto <= ex_auto + 1'b1;

si (ex_auto> 100000) // Cicle de rellotge a 66 MHz, aquest PWM fa ~ 1,5 ms, el servo gira a 120 graus

començar

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

final

final

if (servo_A == 1'b0)

començar

ex_auto <= ex_auto + 1'b1;

si (ex_auto> 10000) // Cicle de rellotge a 66 MHz, aquest PWM fa ~ 0,15 ms, el servo gira a 0 graus

començar

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

final

final

final

Pas 4: pengeu el codi de Verilog

Image
Image

Feu clic a "Inicia la compilació". Si no es mostra cap missatge d'error, aneu a "Programador" per completar la configuració del maquinari. Recordeu actualitzar el fitxer pof a "Canvia el fitxer" si cal. Feu clic a "Inici" per penjar el codi.

Al cap i a la fi, heu de veure que el servomotor gira periòdicament.

Recomanat: