FPGA Cyclone IV DueProLogic Mengontrol Motor Servo: 4 Langkah
FPGA Cyclone IV DueProLogic Mengontrol Motor Servo: 4 Langkah
Anonim
FPGA Cyclone IV DueProLogic Mengontrol Motor Servo
FPGA Cyclone IV DueProLogic Mengontrol Motor Servo

Dalam tutorial ini, kita akan menulis kode Verilog untuk mengontrol motor servo. Servo SG-90 diproduksi oleh Waveshare. Saat Anda membeli motor servo, Anda mungkin menerima lembar data yang mencantumkan tegangan operasi, torsi maksimum, dan Modulasi Lebar Pulsa (PWM) yang diusulkan…dll. Namun, DuePrologic FPGA memberikan tegangan input 3.3V dimana tegangan operasi servo SG-90 adalah 5V - 7V. Dalam kekurangan daya listrik, saya akan mencantumkan PWM saya yang dikalibrasi agar dapat memutar motor servo dengan sukses.

Tugas kita: Motor servo diputar maju mundur dengan periode 5 detik

Menu lengkap:

Langkah 1: Bangun Sirkuit Elektronik

Bangun Sirkuit Elektronik
Bangun Sirkuit Elektronik

Langkah 2: Siapkan Pin Planner

Siapkan Pin Planner
Siapkan Pin Planner

Klik "Mulai Analisis Penugasan I/O" untuk memeriksa apakah perencana pin diatur dengan benar. Jika tidak, Anda harus mengimpor semua nama port sendiri.

Langkah 3: Kode Verilog

Kami membuat timer "servo_count". Ketika "servo_A" TINGGI, PWM adalah 1,5 ms dan karenanya servo terletak pada 120 derajat. Sebaliknya, ketika "servo_A" RENDAH, PWM adalah 0,15 ms dan oleh karena itu servo tetap pada 0 derajat.

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

reg [31:0] servo_count;

awal mulai

servo_count <= 32'b0;

servo_A <= 1'b0;

akhir

selalu @(berpose CLK_66)

mulai

servo_count <= servo_count + 1'b1;

if(servo_count > 400000000) //Siklus jam 66MHz, 1/66M * 400000000 ~ 5 detik

mulai

servo_A <= !servo_A;

servo_count <= 32'b0;

akhir

akhir

reg [31:0] ex_auto;

awal mulai

ex_auto <= 32'b0;

servo_auto <= 1'b0;

akhir

selalu @(berpose CLK_66)

mulai

if(servo_A==1'b1)

mulai

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 100000) //Clock cycle 66MHz, PWM ini ~1.5ms, servo berputar hingga 120 derajat

mulai

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

akhir

akhir

if(servo_A==1'b0)

mulai

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 10000) //Clock cycle 66MHz, PWM ini ~0.15ms, servo berputar ke 0 derajat

mulai

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

akhir

akhir

akhir

Langkah 4: Unggah Kode Verilog

Image
Image

Klik "Mulai Kompilasi". Jika tidak ada pesan kesalahan yang ditampilkan, buka "Programmer" untuk menyelesaikan pengaturan perangkat keras. Ingatlah untuk memperbarui file pof di "Ubah file" jika perlu. Klik "Mulai" untuk mengunggah kode.

Bagaimanapun, Anda harus melihat bahwa motor servo diputar secara berkala.

Direkomendasikan: