FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Hakbang
FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Hakbang
Anonim
FPGA Cyclone IV DueProLogic Controls Servo Motor
FPGA Cyclone IV DueProLogic Controls Servo Motor

Sa tutorial na ito, magsusulat kami ng Verilog code upang makontrol ang servo motor. Ang servo SG-90 ay gawa ng Waveshare. Kapag binili mo ang servo motor, maaari kang makatanggap ng isang datasheet na naglilista ng operating voltage, maximum torque at ang iminungkahing Pulse Width Modulation (PWM) … atbp. Gayunpaman, ang FPGA DuePrologic ay nagbibigay ng input boltahe ng 3.3V kung saan ang operating boltahe ng servo SG-90 ay 5V - 7V. Sa kawalan ng kuryente, ililista ko ang aking naka-calibrate na PWM upang matagumpay na paikutin ang servo motor.

Ang aming gawain: Ang motor na servo ay pinaikot nang pabalik-balik sa panahon ng 5 segundo

Buong menu:

Hakbang 1: Bumuo ng Electronic Circuit

Bumuo ng Electronic Circuit
Bumuo ng Electronic Circuit

Hakbang 2: I-set Up ang Tagaplano ng Pin

I-set Up ang Tagaplano
I-set Up ang Tagaplano

I-click ang "Simulan ang I / O Pagsusuri sa Pagtatalaga" upang suriin kung ang pin planner ay itinakda nang tama. Kung hindi man, kailangan mong i-import ang lahat ng mga pangalan ng port sa iyong sarili.

Hakbang 3: Verilog Code

Lumilikha kami ng isang timer na "servo_count". Kapag ang "servo_A" ay TAAS, ang PWM ay 1.5ms at samakatuwid ang servo ay matatagpuan sa 120 deg. Sa kaibahan, kapag ang "servo_A" ay mababa, ang PWM ay 0.15ms at samakatuwid ang servo ay nanatili sa 0 degree.

italaga ang XIO_2 [3] = servo_pulse; // para sa V '

reg [31: 0] servo_count;

paunang pagsisimula

servo_count <= 32'b0;

servo_A <= 1'b0;

magtapos

laging @ (posedge CLK_66)

magsimula

servo_count <= servo_count + 1'b1;

kung (servo_count> 400000000) // Clock cycle 66MHz, 1 / 66M * 400000000 ~ 5 segundo

magsimula

servo_A <=! servo_A;

servo_count <= 32'b0;

magtapos

magtapos

reg [31: 0] ex_auto;

paunang pagsisimula

ex_auto <= 32'b0;

servo_auto <= 1'b0;

magtapos

laging @ (posedge CLK_66)

magsimula

kung (servo_A == 1'b1)

magsimula

ex_auto <= ex_auto + 1'b1;

kung (ex_auto> 100000) // Clock cycle 66MHz, ang PWM na ito ay ~ 1.5ms, ang servo ay umiikot sa 120 deg

magsimula

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

magtapos

magtapos

kung (servo_A == 1'b0)

magsimula

ex_auto <= ex_auto + 1'b1;

kung (ex_auto> 10000) // Clock cycle 66MHz, ang PWM na ito ay ~ 0.15ms, ang servo ay umiikot sa 0 deg

magsimula

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

magtapos

magtapos

magtapos

Hakbang 4: Mag-upload ng Verilog Code

Image
Image

I-click ang "Start Compilation". Kung walang ipinakitang mensahe ng error, pumunta sa "Programmer" upang makumpleto ang pag-setup ng hardware. Tandaan na i-update ang pof file sa "Baguhin ang file" kung kinakailangan. Ang pag-click sa "Start" upang mai-upload ang code.

Pagkatapos ng lahat, dapat mong makita na ang servo motor ay paikutin nang pana-panahon.