Indholdsfortegnelse:

FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trin
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trin

Video: FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trin

Video: FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trin
Video: Servomotor control on the FPGA Basys3 Board 2024, November
Anonim
FPGA Cyclone IV DueProLogic Controls Servomotor
FPGA Cyclone IV DueProLogic Controls Servomotor

I denne vejledning skal vi skrive Verilog -kode til styring af servomotor. Servoen SG-90 er fremstillet af Waveshare. Når du køber servomotoren, modtager du muligvis et datablad, der viser driftsspændingen, det maksimale drejningsmoment og den foreslåede pulsbreddemodulation (PWM) … osv. FPGA DuePrologic leverer dog indgangsspænding på 3,3V, hvor driftsspændingen for servo SG -90 er 5V - 7V. I mangel på elektrisk strøm vil jeg liste min kalibrerede PWM for at rotere servomotoren med succes.

Vores opgave: Servomotoren roteres frem og tilbage med en periode på 5 sekunder

Fuld menu: https://roywchpi.blogspot.com 2020/07/13-fpga-cyclone-iv-dueprologic-controls.html

Trin 1: Byg elektronisk kredsløb

Byg elektronisk kredsløb
Byg elektronisk kredsløb

Trin 2: Opsæt Pin Planner

Opsæt Pin Planner
Opsæt Pin Planner

Klik på "Start I/O -tildelingsanalyse" for at kontrollere, om stiften er planlagt korrekt. Ellers skal du selv importere alle portnavne.

Trin 3: Verilog -kode

Vi opretter en timer "servo_count". Når "servo_A" er HØJ, er PWM 1,5 ms, og derfor er servoen placeret ved 120 grader. I modsætning hertil, når "servo_A" er LAV, er PWM 0,15 ms, og derfor holdes servoen på 0 grader.

tildele XIO_2 [3] = servo_puls; // for V '

reg [31: 0] servo_count;

første begyndelse

servo_count <= 32'b0;

servo_A <= 1'b0;

ende

altid @(posedge CLK_66)

begynde

servo_count <= servo_count + 1'b1;

hvis (servo_count> 400000000) // Urcyklus 66MHz, 1/66M * 400000000 ~ 5 sekunder

begynde

servo_A <=! servo_A;

servo_count <= 32'b0;

ende

ende

reg [31: 0] ex_auto;

første begyndelse

ex_auto <= 32'b0;

servo_auto <= 1'b0;

ende

altid @(posedge CLK_66)

begynde

hvis (servo_A == 1'b1)

begynde

ex_auto <= ex_auto + 1'b1;

hvis (ex_auto> 100000) // Urcyklus 66MHz, er denne PWM ~ 1,5ms, servo roterer til 120 grader

begynde

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

ende

ende

hvis (servo_A == 1'b0)

begynde

ex_auto <= ex_auto + 1'b1;

hvis (ex_auto> 10000) // Urcyklus 66MHz, er denne PWM ~ 0,15ms, servoen roterer til 0 grader

begynde

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

ende

ende

ende

Trin 4: Upload Verilog -kode

Image
Image

Klik på "Start kompilering". Hvis der ikke vises en fejlmeddelelse, skal du gå til "Programmer" for at fuldføre hardwareopsætningen. Husk at opdatere pof -filen i "Skift fil" om nødvendigt. Klik på "Start" for at uploade koden.

Du skal trods alt se, at servomotoren roteres periodisk.

Anbefalede: