Isi kandungan:

FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Langkah
FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Langkah

Video: FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Langkah

Video: FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Langkah
Video: Servomotor control on the FPGA Basys3 Board 2024, November
Anonim
FPGA Cyclone IV DueProLogic Mengawal Servo Motor
FPGA Cyclone IV DueProLogic Mengawal Servo Motor

Dalam tutorial ini, kita akan menulis kod Verilog untuk mengawal motor servo. Servo SG-90 dihasilkan oleh Waveshare. Semasa anda membeli motor servo, anda mungkin akan menerima lembaran data yang menyenaraikan voltan operasi, tork maksimum dan Modul Lebar Lebar (PWM) yang dicadangkan … dll. Walau bagaimanapun, FPGA DuePrologic memberikan voltan input 3.3V di mana voltan operasi servo SG-90 adalah 5V - 7V. Dengan kekurangan kuasa elektrik, saya akan menyenaraikan PWM saya yang dikalibrasi untuk berjaya memutar motor servo.

Tugas kami: Motor servo diputar berulang-alik dengan jangka masa 5 saat

Menu penuh:

Langkah 1: Bina Litar Elektronik

Bina Litar Elektronik
Bina Litar Elektronik

Langkah 2: Sediakan Pin Perancang

Sediakan Perancang Pin
Sediakan Perancang Pin

Klik "Mulakan Analisis Tugasan I / O" untuk memeriksa sama ada perancang pin diset dengan betul. Jika tidak, anda mesti mengimport semua nama port sendiri.

Langkah 3: Kod Verilog

Kami membuat pemasa "servo_count". Apabila "servo_A" TINGGI, PWM adalah 1.5ms dan oleh itu servo terletak pada 120 deg. Sebaliknya, apabila "servo_A" RENDAH, PWM adalah 0.15ms dan oleh itu servo kekal pada 0 darjah.

tetapkan XIO_2 [3] = servo_pulse; // untuk V '

reg [31: 0] servo_count;

permulaan awal

servo_count <= 32'b0;

servo_A <= 1'b0;

akhir

selalu @ (posedge CLK_66)

bermula

servo_count <= servo_count + 1'b1;

jika (servo_count> 400000000) // Kitaran jam 66MHz, 1 / 66M * 400000000 ~ 5 saat

bermula

servo_A <=! servo_A;

servo_count <= 32'b0;

akhir

akhir

reg [31: 0] ex_auto;

permulaan awal

ex_auto <= 32'b0;

servo_auto <= 1'b0;

akhir

selalu @ (posedge CLK_66)

bermula

jika (servo_A == 1'b1)

bermula

ex_auto <= ex_auto + 1'b1;

jika (ex_auto> 100000) // Kitaran jam 66MHz, PWM ini ialah ~ 1.5ms, servo berputar hingga 120 deg

bermula

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

akhir

akhir

jika (servo_A == 1'b0)

bermula

ex_auto <= ex_auto + 1'b1;

jika (ex_auto> 10000) // Kitaran jam 66MHz, PWM ini adalah ~ 0.15ms, servo berputar hingga 0 deg

bermula

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

akhir

akhir

akhir

Langkah 4: Muat naik Kod Verilog

Image
Image

Klik "Mulakan Penyusunan". Sekiranya tidak ada mesej ralat yang ditampilkan, pergi ke "Programmer" untuk menyelesaikan persediaan perkakasan. Ingatlah untuk mengemas kini fail pof dalam "Ubah fail" jika perlu. Klik "Mula" untuk memuat naik kod.

Bagaimanapun, anda mesti melihat bahawa motor servo diputar secara berkala.

Disyorkan: