Servomotor FPGA Cyclone IV DueProLogic Controls: 4 passos
Servomotor FPGA Cyclone IV DueProLogic Controls: 4 passos
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.