Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Š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ę
2 veiksmas: 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ą
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.