FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trinn
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trinn
Anonim
FPGA Cyclone IV DueProLogic Controls Servomotor
FPGA Cyclone IV DueProLogic Controls Servomotor

I denne opplæringen skal vi skrive Verilog -kode for å kontrollere servomotoren. Servoen SG-90 er produsert av Waveshare. Når du kjøper servomotoren, kan du motta et datablad som viser driftsspenning, maksimalt dreiemoment og den foreslåtte pulsbreddemodulasjonen (PWM) … etc. FPGA DuePrologic gir imidlertid inngangsspenning på 3,3V der driftsspenningen til servo SG -90 er 5V - 7V. I mangel på elektrisk kraft vil jeg liste opp min kalibrerte PWM for å rotere servomotoren vellykket.

Vår oppgave: Servomotoren roteres frem og tilbake med en periode på 5 sekunder

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

Trinn 1: Bygg elektronisk krets

Bygg elektronisk krets
Bygg elektronisk krets

Trinn 2: Sett opp Pin Planner

Sett opp Pin Planner
Sett opp Pin Planner

Klikk på "Start I/O Assignment Analysis" for å sjekke om pin -planleggeren er riktig angitt. Ellers må du importere alle portnavnene selv.

Trinn 3: Verilog -kode

Vi lager en timer "servo_count". Når "servo_A" er HØY, er PWM 1,5 ms, og derfor er servoen plassert ved 120 grader. I kontrast, når "servo_A" er LAV, er PWM 0,15 ms, og derfor holdes servoen på 0 grader.

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

reg [31: 0] servo_count;

første start

servo_count <= 32'b0;

servo_A <= 1'b0;

slutt

alltid @(posedge CLK_66)

begynne

servo_count <= servo_count + 1'b1;

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

begynne

servo_A <=! servo_A;

servo_count <= 32'b0;

slutt

slutt

reg [31: 0] ex_auto;

første start

ex_auto <= 32'b0;

servo_auto <= 1'b0;

slutt

alltid @(posedge CLK_66)

begynne

hvis (servo_A == 1'b1)

begynne

ex_auto <= ex_auto + 1'b1;

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

begynne

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

slutt

slutt

hvis (servo_A == 1'b0)

begynne

ex_auto <= ex_auto + 1'b1;

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

begynne

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

slutt

slutt

slutt

Trinn 4: Last opp Verilog -kode

Image
Image

Klikk "Start kompilering". Hvis det ikke vises noen feilmelding, gå til "Programmerer" for å fullføre maskinvareoppsettet. Husk å oppdatere pof -filen i "Endre fil" om nødvendig. Klikk "Start" for å laste opp koden.

Tross alt bør du se at servomotoren roteres periodisk.

Anbefalt: