FPGA Cikloni IV DueProLogic Controls Servo Motor: 4 Hapa
FPGA Cikloni IV DueProLogic Controls Servo Motor: 4 Hapa
Anonim
FPGA Cikloni IV DueProLogic Controls Servo Motor
FPGA Cikloni IV DueProLogic Controls Servo Motor

Në këtë tutorial, ne do të shkruajmë kodin Verilog për të kontrolluar servo motorin. Servo SG-90 është prodhuar nga Waveshare. Kur blini servo motorin, mund të merrni një fletë të dhënash që liston tensionin e funksionimit, çift rrotullues maksimal dhe Modulimin e propozuar të Gjerësisë së Pulsit (PWM) … etj. Sidoqoftë, FPGA DuePrologic siguron tension hyrës prej 3.3V ku voltazhi i funksionimit të servo SG -90 është 5V - 7V. Në mungesë të energjisë elektrike, unë do të listoj PWM tim të kalibruar në mënyrë që të rrotulloj me sukses servo motorin.

Detyra jonë: Servo motori rrotullohet mbrapa dhe me radhë me një periudhë prej 5 sekondash

Menyja e plotë:

Hapi 1: Ndërtoni një qark elektronik

Ndërtoni një qark elektronik
Ndërtoni një qark elektronik

Hapi 2: Vendosni Pin Planifikuesin

Konfiguro Pin Planifikuesin
Konfiguro Pin Planifikuesin

Klikoni "Fillo Analizën e Detyrës I/O" për të kontrolluar nëse planifikuesi i kunjave është vendosur si duhet. Përndryshe, ju duhet të importoni të gjithë emrat e portit vetë.

Hapi 3: Kodi Verilog

Ne krijojmë një kohëmatës "servo_count". Kur "servo_A" është LART, PWM është 1.5ms dhe kështu servo është e vendosur në 120 gradë. Në të kundërt, kur "servo_A" është I ULT, PWM është 0.15ms dhe për këtë arsye servo qëndron në 0 gradë.

cakto XIO_2 [3] = servo_pulse; // për V '

reg [31: 0] servo_count;

fillimi fillestar

servo_count <= 32'b0;

servo_A <= 1'b0;

fund

gjithmonë @(paraqiti CLK_66)

filloj

servo_count <= servo_count + 1'b1;

nëse (servo_count> 400000000) // Cikli i orës 66MHz, 1/66M * 400000000 ~ 5 sekonda

filloj

servo_A <=! servo_A;

servo_count <= 32'b0;

fund

fund

reg [31: 0] ex_auto;

fillimi fillestar

ex_auto <= 32'b0;

servo_auto <= 1'b0;

fund

gjithmonë @(paraqiti CLK_66)

filloj

nëse (servo_A == 1'b1)

filloj

ex_auto <= ex_auto + 1'b1;

nëse (ex_auto> 100000) // Cikli i orës 66MHz, ky PWM është ms 1.5ms, servo rrotullohet në 120 gradë

filloj

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

fund

fund

nëse (servo_A == 1'b0)

filloj

ex_auto <= ex_auto + 1'b1;

nëse (ex_auto> 10000) // Cikli i orës 66MHz, ky PWM është 15 0.15ms, servo rrotullohet në 0 gradë

filloj

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

fund

fund

fund

Hapi 4: Ngarko Verilog Code

Image
Image

Klikoni "Filloni përpilimin". Nëse nuk shfaqet asnjë mesazh gabimi, shkoni te "Programmer" për të përfunduar konfigurimin e harduerit. Mos harroni të azhurnoni skedarin pof në "Ndrysho skedarin" nëse është e nevojshme. Klikoni "Fillimi" për të ngarkuar kodin.

Në fund të fundit, duhet të shihni që servo motori rrotullohet periodikisht.