FPGA Cyclone IV DueProLogic Controls Servo motors: 4 soļi
FPGA Cyclone IV DueProLogic Controls Servo motors: 4 soļi
Anonim
FPGA Cyclone IV DueProLogic kontrolē servomotoru
FPGA Cyclone IV DueProLogic kontrolē servomotoru

Šajā apmācībā mēs rakstīsim Verilog kodu, lai kontrolētu servomotoru. Servo SG-90 ražo Waveshare. Pērkot servomotoru, jūs varat saņemt datu lapu, kurā uzskaitīts darba spriegums, maksimālais griezes moments un ierosinātā impulsa platuma modulācija (PWM) utt. Tomēr FPGA DuePrologic nodrošina ieejas spriegumu 3.3V, ja servo SG -90 darba spriegums ir 5V - 7V. Elektrības trūkuma dēļ es uzskaitīšu savu kalibrēto PWM, lai veiksmīgi pagrieztu servomotoru.

Mūsu uzdevums: Servomotors tiek pagriezts uz priekšu un atpakaļ ar 5 sekunžu periodu

Pilna ēdienkarte:

1. darbība: izveidojiet elektronisko shēmu

Izveidojiet elektronisko shēmu
Izveidojiet elektronisko shēmu

2. darbība. Iestatiet Pin Planner

Iestatiet Pin Planner
Iestatiet Pin Planner

Noklikšķiniet uz "Sākt I/O piešķiršanas analīzi", lai pārbaudītu, vai tapas plānotājs ir iestatīts pareizi. Pretējā gadījumā visu portu nosaukumi ir jāimportē pašiem.

3. darbība. Verilog kods

Mēs izveidojam taimeri "servo_count". Ja "servo_A" ir HIGH, PWM ir 1,5 ms un līdz ar to servo atrodas 120 grādos. Turpretī, ja "servo_A" ir LOW, PWM ir 0,15 ms, un tāpēc servo tiek turēts 0 grādos.

piešķirt XIO_2 [3] = servo_pulse; // par V '

reg [31: 0] servo_count;

sākotnējais sākums

servo_count <= 32'b0;

servo_A <= 1'b0;

beigas

vienmēr @(pozācija CLK_66)

sākt

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Pulksteņa cikls 66MHz, 1/66M * 400000000 ~ 5 sekundes

sākt

servo_A <=! servo_A;

servo_count <= 32'b0;

beigas

beigas

reg [31: 0] ex_auto;

sākotnējais sākums

ex_auto <= 32'b0;

servo_auto <= 1'b0;

beigas

vienmēr @(pozācija CLK_66)

sākt

ja (servo_A == 1'b1)

sākt

ex_auto <= ex_auto + 1'b1;

ja (ex_auto> 100000) // Pulksteņa cikls 66 MHz, šis PWM ir ~ 1,5 ms, servo pagriežas līdz 120 grādiem

sākt

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

beigas

beigas

ja (servo_A == 1'b0)

sākt

ex_auto <= ex_auto + 1'b1;

ja (ex_auto> 10000) // Pulksteņa cikls 66 MHz, šis PWM ir ~ 0,15 ms, servo rotē līdz 0 grādiem

sākt

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

beigas

beigas

beigas

4. darbība: augšupielādējiet Verilog kodu

Image
Image

Noklikšķiniet uz "Sākt apkopošanu". Ja netiek parādīts kļūdas ziņojums, dodieties uz "Programmētājs", lai pabeigtu aparatūras iestatīšanu. Ja nepieciešams, atcerieties atjaunināt pof failu sadaļā "Mainīt failu". Noklikšķiniet uz "Sākt", lai augšupielādētu kodu.

Galu galā jums vajadzētu redzēt, ka servomotors tiek periodiski pagriezts.

Ieteicams: