FPGA Cyclone IV DueProLogic Controls Servomotor: 4 stappe
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 stappe
Anonim
FPGA Cyclone IV DueProLogic Controls Servomotor
FPGA Cyclone IV DueProLogic Controls Servomotor

In hierdie handleiding gaan ons Verilog -kode skryf om die servomotor te beheer. Die servo SG-90 word vervaardig deur Waveshare. As u die servomotor koop, ontvang u moontlik 'n datablad met die werkspanning, maksimum wringkrag en die voorgestelde Pulse Width Modulation (PWM) … ens. Die FPGA DuePrologic bied egter insetspanning van 3.3V, waar die werkspanning van servo SG -90 5V - 7V is. By gebrek aan elektriese krag, sal ek my gekalibreerde PWM lys om die servomotor suksesvol te draai.

Ons taak: die servomotor word met 'n tydperk van 5 sekondes heen en weer gedraai

Volledige spyskaart: https://roywchpi.blogspot.com 2020/07/13-fpga-cyclone-iv-dueprologic-controls.html

Stap 1: Bou 'n elektroniese stroombaan

Bou elektroniese stroombaan
Bou elektroniese stroombaan

Stap 2: Stel penbeplanner op

Stel penbeplanner op
Stel penbeplanner op

Klik op "Start I/O Assignment Analysis" om te kyk of die penbeplanner korrek ingestel is. Andersins moet u alle poortname self invoer.

Stap 3: Verilog -kode

Ons skep 'n timer 'servo_count'. As "servo_A" HOOG is, is die PWM 1,5 ms en vandaar dat die servo 120 grade is. In teenstelling hiermee, as "servo_A" LAAG is, is die PWM 0.15 ms en word die servo dus op 0 grade gebly.

ken XIO_2 [3] toe = servo_puls; // vir V '

reg [31: 0] servo_count;

aanvanklike begin

servo_count <= 32'b0;

servo_A <= 1'b0;

einde

altyd @(posedge CLK_66)

begin

servo_count <= servo_count + 1'b1;

as (servo_telling> 400000000) // Kloksiklus 66MHz, 1/66M * 400000000 ~ 5 sekondes

begin

servo_A <=! servo_A;

servo_count <= 32'b0;

einde

einde

reg [31: 0] ex_auto;

aanvanklike begin

ex_auto <= 32'b0;

servo_auto <= 1'b0;

einde

altyd @(posedge CLK_66)

begin

as (servo_A == 1'b1)

begin

ex_auto <= ex_auto + 1'b1;

as (ex_auto> 100000) // Kloksiklus 66MHz, is hierdie PWM ~ 1.5ms, servo draai tot 120 grade

begin

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

einde

einde

as (servo_A == 1'b0)

begin

ex_auto <= ex_auto + 1'b1;

as (ex_auto> 10000) // Kloksiklus 66MHz, is hierdie PWM ~ 0.15ms, servo draai na 0 grade

begin

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

einde

einde

einde

Stap 4: Laai Verilog -kode op

Image
Image

Klik op "Begin samestelling". As daar geen foutboodskap verskyn nie, gaan na "Programmer" om die hardeware -opstelling te voltooi. Onthou om die pof -lêer by te werk in "Verander lêer" indien nodig. Klik op "Start" om die kode op te laai.

U moet immers sien dat die servomotor gereeld gedraai word.