Sisukord:

FPGA Cyclone IV DueProLogic juhib servomootorit: 4 sammu
FPGA Cyclone IV DueProLogic juhib servomootorit: 4 sammu

Video: FPGA Cyclone IV DueProLogic juhib servomootorit: 4 sammu

Video: FPGA Cyclone IV DueProLogic juhib servomootorit: 4 sammu
Video: FPGA Cyclone IV DueProLogic controls Arduino (tutorial & code) 2024, November
Anonim
FPGA Cyclone IV DueProLogic juhib servomootorit
FPGA Cyclone IV DueProLogic juhib servomootorit

Selles õpetuses kirjutame servomootori juhtimiseks Verilogi koodi. Servo SG-90 toodab Waveshare. Servomootori ostmisel võite saada andmelehe, mis loetleb tööpinge, maksimaalse pöördemomendi ja kavandatava impulsi laiuse modulatsiooni (PWM) jne. Siiski pakub FPGA DuePrologic sisendpinget 3,3 V, kus servo SG -90 tööpinge on 5V - 7V. Elektrienergia puudumise tõttu loetlen oma kalibreeritud PWM -i, et servomootorit edukalt pöörata.

Meie ülesanne: Servomootorit pööratakse edasi -tagasi 5 sekundi jooksul

Täismenüü:

Samm: ehitage elektrooniline vooluahel

Ehitage elektrooniline vooluahel
Ehitage elektrooniline vooluahel

2. toiming: seadistage Pin Planner

Seadista pin Planner
Seadista pin Planner

Klõpsake nuppu "Alusta I/O -ülesannete analüüsi", et kontrollida, kas tihvtiplaneerija on õigesti seadistatud. Vastasel juhul peate kõik pordi nimed ise importima.

Samm: Verilogi kood

Loome taimeri "servo_count". Kui "servo_A" on HIGH, on PWM 1,5 ms ja seega asub servo 120 kraadi juures. Seevastu kui "servo_A" on LOW, on PWM 0,15 ms ja seetõttu hoitakse servot 0 kraadi juures.

määrata XIO_2 [3] = servo_pulse; // V jaoks

reg [31: 0] servo_count;

esialgne algus

servo_count <= 32'b0;

servo_A <= 1'b0;

lõpp

alati @(positsioon CLK_66)

alustada

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Kellatsükkel 66 MHz, 1/66 M * 400000000 ~ 5 sekundit

alustada

servo_A <=! servo_A;

servo_count <= 32'b0;

lõpp

lõpp

reg [31: 0] ex_auto;

esialgne algus

ex_auto <= 32'b0;

servo_auto <= 1'b0;

lõpp

alati @(positsioon CLK_66)

alustada

kui (servo_A == 1'b1)

alustada

ex_auto <= ex_auto + 1'b1;

kui (ex_auto> 100000) // Kellatsükkel 66 MHz, see PWM on ~ 1,5 ms, servo pöörleb 120 kraadini

alustada

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

lõpp

lõpp

kui (servo_A == 1'b0)

alustada

ex_auto <= ex_auto + 1'b1;

kui (ex_auto> 10000) // Kellatsükkel 66 MHz, see PWM on ~ 0,15 ms, servo pöörleb 0 kraadini

alustada

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

lõpp

lõpp

lõpp

Samm: laadige üles Verilogi kood

Image
Image

Klõpsake "Alusta koostamist". Kui veateadet ei kuvata, minge riistvara seadistamise lõpuleviimiseks "Programmeerijale". Ärge unustage vajadusel värskendada pof -faili jaotises "Muuda faili". Koodi üleslaadimiseks klõpsake nuppu "Start".

Lõppude lõpuks peaksite nägema, et servomootorit pööratakse perioodiliselt.

Soovitan: