Sisällysluettelo:

FPGA Cyclone IV DueProLogic Controls Servomoottori: 4 vaihetta
FPGA Cyclone IV DueProLogic Controls Servomoottori: 4 vaihetta

Video: FPGA Cyclone IV DueProLogic Controls Servomoottori: 4 vaihetta

Video: FPGA Cyclone IV DueProLogic Controls Servomoottori: 4 vaihetta
Video: Servomotor control on the FPGA Basys3 Board 2024, Marraskuu
Anonim
FPGA Cyclone IV DueProLogic ohjaa servomoottoria
FPGA Cyclone IV DueProLogic ohjaa servomoottoria

Tässä opetusohjelmassa aiomme kirjoittaa Verilog -koodin servomoottorin ohjaamiseen. Servo SG-90 on Wavesharen valmistama. Kun ostat servomoottorin, saatat saada tietolomakkeen, jossa luetellaan käyttöjännite, suurin vääntömomentti ja ehdotettu pulssileveysmodulaatio (PWM) jne. FPGA DuePrologic tarjoaa kuitenkin 3,3 V: n tulojännitteen, kun SG -90: n käyttöjännite on 5 V - 7 V. Sähkötehon puuttuessa luettelen kalibroidun PWM: n servomoottorin pyörittämiseksi onnistuneesti.

Tehtävämme: Servomoottoria pyöritetään edestakaisin 5 sekunnin ajan

Koko valikko:

Vaihe 1: Rakenna elektroninen piiri

Rakenna elektroninen piiri
Rakenna elektroninen piiri

Vaihe 2: Määritä Pin Planner

Määritä Pin Planner
Määritä Pin Planner

Napsauta "Aloita I/O -määritysanalyysi" tarkistaaksesi, onko pin -suunnittelija asetettu oikein. Muussa tapauksessa sinun on tuotava kaikki porttien nimet itse.

Vaihe 3: Verilog -koodi

Luomme ajastimen "servo_count". Kun "servo_A" on KORKEA, PWM on 1,5 ms ja siten servo sijaitsee 120 astetta. Sitä vastoin, kun "servo_A" on LOW, PWM on 0,15 ms ja siksi servo pysyy 0 astetta.

antaa XIO_2 [3] = servo_pulse; // V: lle

reg [31: 0] servo_count;

alku alkaa

servoluku <= 32'b0;

servo_A <= 1'b0;

loppuun

aina @(postaus CLK_66)

alkaa

servo_ count <= servo_ count + 1'b1;

if (servoluku> 400000000) // Kellojakso 66MHz, 1/66M * 400000000 ~ 5 sekuntia

alkaa

servo_A <=! servo_A;

servoluku <= 32'b0;

loppuun

loppuun

reg [31: 0] ex_auto;

alku alkaa

ex_auto <= 32'b0;

servo_auto <= 1'b0;

loppuun

aina @(postaus CLK_66)

alkaa

jos (servo_A == 1'b1)

alkaa

ex_auto <= ex_auto + 1'b1;

jos (ex_auto> 100000) // Kellojakso 66 MHz, tämä PWM on ~ 1,5 ms, servo pyörii 120 asteeseen

alkaa

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

loppuun

loppuun

jos (servo_A == 1'b0)

alkaa

ex_auto <= ex_auto + 1'b1;

jos (ex_auto> 10000) // Kellojakso 66 MHz, tämä PWM on ~ 0,15 ms, servo pyörii 0 asteeseen

alkaa

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

loppuun

loppuun

loppuun

Vaihe 4: Lähetä Verilog -koodi

Image
Image

Napsauta "Aloita kokoaminen". Jos virheilmoitusta ei näy, mene "Ohjelmoija" loppuun laitteiston asennuksen suorittamiseksi. Muista päivittää pof -tiedosto tarvittaessa "Vaihda tiedosto" -kohtaan. Napsauta "Käynnistä" ladataksesi koodin.

Loppujen lopuksi sinun pitäisi nähdä, että servomoottoria pyöritetään säännöllisesti.

Suositeltava: