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

I den här självstudien kommer vi att skriva Verilog -kod för att styra servomotorn. Servon SG-90 tillverkas av Waveshare. När du köper servomotorn kan du få ett datablad som visar driftsspänning, maximalt vridmoment och den föreslagna pulsbreddsmodulationen (PWM) … etc. FPGA DuePrologic tillhandahåller emellertid ingångsspänning på 3,3V där driftspänningen för servo SG -90 är 5V - 7V. I brist på elektrisk kraft kommer jag att lista min kalibrerade PWM för att rotera servomotorn framgångsrikt.

Vår uppgift: Servomotorn roteras fram och tillbaka med en period på 5 sekunder

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

Steg 1: Bygg en elektronisk krets

Bygg en elektronisk krets
Bygg en elektronisk krets

Steg 2: Ställ in Pin Planner

Konfigurera stiftplanerare
Konfigurera stiftplanerare

Klicka på "Start I/O Assignment Analysis" för att kontrollera om stiftplaneraren är korrekt inställd. Annars måste du importera alla portnamn själv.

Steg 3: Verilog -kod

Vi skapar en timer "servo_count". När "servo_A" är HÖG är PWM 1,5 ms och därmed ligger servon vid 120 grader. Däremot, när "servo_A" är LÅG, är PWM 0,15 ms och därför hålls servon på 0 grader.

tilldela XIO_2 [3] = servo_puls; // för V '

reg [31: 0] servo_count;

första början

servo_count <= 32'b0;

servo_A <= 1'b0;

slutet

alltid @(posedge CLK_66)

Börja

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Clock cycle 66MHz, 1/66M * 400000000 ~ 5 seconds

Börja

servo_A <=! servo_A;

servo_count <= 32'b0;

slutet

slutet

reg [31: 0] ex_auto;

första början

ex_auto <= 32'b0;

servo_auto <= 1'b0;

slutet

alltid @(posedge CLK_66)

Börja

if (servo_A == 1'b1)

Börja

ex_auto <= ex_auto + 1'b1;

om (ex_auto> 100000) // Klockcykel 66MHz är denna PWM ~ 1,5ms, servon roterar till 120 grader

Börja

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

slutet

slutet

if (servo_A == 1'b0)

Börja

ex_auto <= ex_auto + 1'b1;

om (ex_auto> 10000) // Klockcykel 66MHz är denna PWM ~ 0,15ms, servon roterar till 0 grader

Börja

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

slutet

slutet

slutet

Steg 4: Ladda upp Verilog -kod

Image
Image

Klicka på "Starta kompilering". Om inget felmeddelande visas, gå till "Programmerare" för att slutföra maskinvaruinstallationen. Kom ihåg att uppdatera pof -filen i "Ändra fil" om det behövs. Klicka på "Start" för att ladda upp koden.

När allt kommer omkring bör du se att servomotorn roteras periodiskt.