FPGA Kimbunga IV KutokanaProLogic Udhibiti Servo Motor: 4 Hatua
FPGA Kimbunga IV KutokanaProLogic Udhibiti Servo Motor: 4 Hatua
Anonim
FPGA Kimbunga IV Kutokana na Udhibiti wa ProLogic Servo Motor
FPGA Kimbunga IV Kutokana na Udhibiti wa ProLogic Servo Motor

Katika mafunzo haya, tutaandika nambari ya Verilog kudhibiti servo motor. Servo SG-90 imetengenezwa na Waveshare. Unaponunua servo motor, unaweza kupokea data ambayo inaorodhesha voltage ya uendeshaji, torque ya juu na muundo uliopendekezwa wa Upana wa Pulse (PWM)… nk. Walakini, FPGA DuePrologic hutoa voltage ya pembejeo ya 3.3V ambapo voltage ya uendeshaji wa servo SG-90 ni 5V - 7V. Kwa ukosefu wa nguvu ya umeme, nitaorodhesha PWM yangu iliyosanikishwa ili kuzungusha servo motor kwa mafanikio.

Jukumu letu: Servo motor inazungushwa nyuma na kurudi na kipindi cha sekunde 5

Menyu kamili:

Hatua ya 1: Jenga Mzunguko wa Elektroniki

Jenga Mzunguko wa Elektroniki
Jenga Mzunguko wa Elektroniki

Hatua ya 2: Sanidi Mpangaji wa Pin

Sanidi Mpangaji wa Pin
Sanidi Mpangaji wa Pin

Bonyeza "Anzisha Uchambuzi wa Kazi ya I / O" kuangalia ikiwa mpangaji wa pini amewekwa kwa usahihi. Vinginevyo, lazima uingize majina yote ya bandari na wewe mwenyewe.

Hatua ya 3: Msimbo wa Verilog

Tunaunda kipima muda "servo_count". Wakati "servo_A" iko juu, PWM ni 1.5ms na kwa hivyo servo iko katika digrii 120. Kinyume chake, wakati "servo_A" ikiwa chini, PWM ni 0.15ms na kwa hivyo servo inakaa kwa digrii 0.

pea XIO_2 [3] = servo_pulse; // ya V '

reg [31: 0] hesabu ya hesabu;

mwanzo kuanza

hesabu ya servo <= 32'b0;

servo_A <= 1'b0;

mwisho

daima @ (posedge CLK_66)

anza

hesabu ya servo <= hesabu ya servo + 1'b1;

ikiwa (servo_count> 400000000) // Mzunguko wa Saa 66MHz, 1 / 66M * 400000000 ~ sekunde 5

anza

servo_A <=! servo_A;

hesabu ya servo <= 32'b0;

mwisho

mwisho

reg [31: 0] ex_auto;

mwanzo kuanza

ex_auto <= 32'b0;

servo_auto <= 1'b0;

mwisho

daima @ (posedge CLK_66)

anza

ikiwa (servo_A == 1'b1)

anza

ex_auto <= ex_auto + 1'b1;

ikiwa (ex_auto> 100000) // Saa ya saa 66MHz, PWM hii ni ~ 1.5ms, servo huzunguka hadi digrii 120

anza

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

mwisho

mwisho

ikiwa (servo_A == 1'b0)

anza

ex_auto <= ex_auto + 1'b1;

ikiwa (ex_auto> 10000) // Mzunguko wa Saa 66MHz, PWM hii ni ~ 0.15ms, servo huzunguka hadi digrii 0

anza

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

mwisho

mwisho

mwisho

Hatua ya 4: Pakia Nambari ya Verilog

Image
Image

Bonyeza "Anza Mkusanyiko". Ikiwa hakuna ujumbe wa hitilafu unaonyeshwa, nenda kwa "Programu" kukamilisha usanidi wa vifaa. Kumbuka kusasisha faili ya pof katika "Badilisha faili" ikiwa ni lazima. Bonyeza "Anza" kupakia nambari.

Baada ya yote, unapaswa kuona kwamba servo motor inazungushwa mara kwa mara.

Ilipendekeza: