Kazalo:

Servo motor FPGA Cyclone IV DueProLogic nadzoruje: 4 korake
Servo motor FPGA Cyclone IV DueProLogic nadzoruje: 4 korake

Video: Servo motor FPGA Cyclone IV DueProLogic nadzoruje: 4 korake

Video: Servo motor FPGA Cyclone IV DueProLogic nadzoruje: 4 korake
Video: Servomotor control on the FPGA Basys3 Board 2024, November
Anonim
Servo motor FPGA Cyclone IV DueProLogic krmili
Servo motor FPGA Cyclone IV DueProLogic krmili

V tej vadnici bomo napisali Verilog kodo za krmiljenje servo motorja. Servo SG-90 proizvaja Waveshare. Ko kupite servo motor, boste morda prejeli podatkovni list, ki vsebuje delovno napetost, največji navor in predlagano pulzno širinsko modulacijo (PWM) … itd. Vendar pa FPGA DuePrologic zagotavlja vhodno napetost 3,3 V, kjer je delovna napetost servo SG -90 5 V - 7 V. Zaradi pomanjkanja električne energije bom navedel svoj umerjeni PWM, da bom uspešno zavrtel servo motor.

Naša naloga: Servo motor se vrti naprej in nazaj v obdobju 5 sekund

Celoten meni:

Korak: Zgradite elektronsko vezje

Zgradite elektronsko vezje
Zgradite elektronsko vezje

2. korak: Nastavite načrtovalnik pin

Nastavite načrtovalnik pin
Nastavite načrtovalnik pin

Kliknite "Začni analizo dodelitve V/I", da preverite, ali je načrtovalec zatičev pravilno nastavljen. V nasprotnem primeru morate vsa imena vrat uvoziti sami.

3. korak: Verilog koda

Ustvarimo časovnik "servo_count". Ko je "servo_A" VISOKO, je PWM 1,5 ms, zato se servo nahaja pri 120 stopinjah. Nasprotno, ko je "servo_A" NIZKA, je PWM 0,15 ms, zato se servo vzdržuje pri 0 stopinjah.

dodeli XIO_2 [3] = servo_pulz; // za V '

reg [31: 0] servo_broj;

začetni začetek

število servo <= 32'b0;

servo_A <= 1'b0;

konec

vedno @(postavljeno CLK_66)

začeti

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Ura takta 66MHz, 1/66M * 400000000 ~ 5 sekund

začeti

servo_A <=! servo_A;

število servo <= 32'b0;

konec

konec

reg [31: 0] ex_auto;

začetni začetek

ex_auto <= 32'b0;

servo_auto <= 1'b0;

konec

vedno @(postavljeno CLK_66)

začeti

če (servo_A == 1'b1)

začeti

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Ura cikla 66MHz, ta PWM je ~ 1,5ms, servo se vrti na 120 stopinj

začeti

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

konec

konec

če (servo_A == 1'b0)

začeti

ex_auto <= ex_auto + 1'b1;

če (ex_auto> 10000) // Ura cikla 66 MHz, je ta PWM ~ 0,15 ms, servo se vrti na 0 stopinj

začeti

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

konec

konec

konec

4. korak: Naložite Verilog kodo

Image
Image

Kliknite "Začni kompilacijo". Če se ne prikaže sporočilo o napaki, pojdite na "Programmer", da dokončate nastavitev strojne opreme. Ne pozabite posodobiti datoteke pof v "Spremeni datoteko", če je potrebno. Kliknite "Start", da naložite kodo.

Konec koncev bi morali videti, da se servo motor občasno vrti.

Priporočena: