„FPGA Cyclone IV DueProLogic Controls“servo variklis: 4 žingsniai
„FPGA Cyclone IV DueProLogic Controls“servo variklis: 4 žingsniai
Anonim
„FPGA Cyclone IV DueProLogic“valdo servo variklį
„FPGA Cyclone IV DueProLogic“valdo servo variklį

Šioje pamokoje mes ketiname parašyti „Verilog“kodą servo varikliui valdyti. Servo SG-90 gamina „Waveshare“. Pirkdami servo variklį, galite gauti duomenų lapą, kuriame išvardyta darbinė įtampa, maksimalus sukimo momentas ir siūlomas impulsų pločio moduliavimas (PWM) ir kt. Tačiau „FPGA DuePrologic“teikia 3,3 V įėjimo įtampą, kai servo SG -90 darbinė įtampa yra 5–7 V. Trūkstant elektros energijos, aš išvardinsiu savo kalibruotą PWM, kad galėčiau sėkmingai pasukti servo variklį.

Mūsų užduotis: Servo variklis sukamas pirmyn ir atgal 5 sekundes

Visas meniu:

1 žingsnis: sukurkite elektroninę grandinę

Sukurkite elektroninę grandinę
Sukurkite elektroninę grandinę

2 veiksmas: nustatykite „Pin Planner“

Nustatykite „Pin Planner“
Nustatykite „Pin Planner“

Spustelėkite „Pradėti įvesties/išvesties užduočių analizę“, kad patikrintumėte, ar smeigtukų planavimo priemonė nustatyta teisingai. Priešingu atveju visus uostų pavadinimus turite importuoti patys.

3 veiksmas: „Verilog“kodas

Mes sukuriame laikmatį „servo_count“. Kai „servo_A“yra HIGH, PWM yra 1,5 ms, taigi servo yra 120 laipsnių kampu. Priešingai, kai „servo_A“yra žemas, PWM yra 0,15 ms, todėl servo laikoma 0 laipsnių.

priskirti XIO_2 [3] = servo_pulse; // už V '

reg [31: 0] servo_count;

pradinė pradžia

servo_count <= 32'b0;

servo_A <= 1'b0;

galas

visada @(pozavimas CLK_66)

pradėti

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Laikrodžio ciklas 66MHz, 1/66M * 400000000 ~ 5 sekundės

pradėti

servo_A <=! servo_A;

servo_count <= 32'b0;

galas

galas

reg [31: 0] ex_auto;

pradinė pradžia

ex_auto <= 32'b0;

servo_auto <= 1'b0;

galas

visada @(pozavimas CLK_66)

pradėti

jei (servo_A == 1'b1)

pradėti

ex_auto <= ex_auto + 1'b1;

jei (ex_auto> 100000) // Laikrodžio ciklas 66 MHz, šis PWM yra ~ 1,5 ms, servo sistema sukasi iki 120 laipsnių

pradėti

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

galas

galas

jei (servo_A == 1'b0)

pradėti

ex_auto <= ex_auto + 1'b1;

jei (ex_auto> 10000) // Laikrodžio ciklas 66 MHz, šis PWM yra ~ 0,15 ms, servo sistema sukasi iki 0 laipsnių

pradėti

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

galas

galas

galas

4 veiksmas: įkelkite „Verilog“kodą

Image
Image

Spustelėkite „Pradėti kompiliaciją“. Jei nerodomas klaidos pranešimas, eikite į „Programuotojas“, kad užbaigtumėte aparatūros sąranką. Nepamirškite, jei reikia, atnaujinti pof failą „Keisti failą“. Norėdami įkelti kodą, spustelėkite „Pradėti“.

Galų gale turėtumėte pamatyti, kad servo variklis yra periodiškai sukamas.