İçindekiler:

FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Ediyor: 4 Adım
FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Ediyor: 4 Adım

Video: FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Ediyor: 4 Adım

Video: FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Ediyor: 4 Adım
Video: FPGA Cyclone IV DueProLogic controls servo motor (Tutorial and code) 2024, Temmuz
Anonim
FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Eder
FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Eder

Bu dersimizde servo motoru kontrol etmek için Verilog kodu yazacağız. Servo SG-90, Waveshare tarafından üretilmiştir. Servo motoru satın aldığınızda, çalışma voltajını, maksimum torku ve önerilen Darbe Genişliği Modülasyonunu (PWM)…vb. listeleyen bir veri sayfası alabilirsiniz. Ancak FPGA DuePrologic, servo SG-90'ın çalışma voltajının 5V - 7V olduğu durumlarda 3.3V giriş voltajı sağlar. Elektrik gücü olmadığında servo motoru başarılı bir şekilde döndürmek için kalibre edilmiş PWM'mi listeleyeceğim.

Görevimiz: Servo motor 5 saniye süre ile ileri geri döndürülür.

Tam menü:

Adım 1: Elektronik Devre Oluşturun

Elektronik Devre Oluştur
Elektronik Devre Oluştur

2. Adım: Pin Planlayıcı'yı Kurun

Pin Planlayıcı'yı Ayarla
Pin Planlayıcı'yı Ayarla

Pin planlayıcının doğru ayarlanıp ayarlanmadığını kontrol etmek için "G/Ç Atama Analizini Başlat"a tıklayın. Aksi takdirde, tüm bağlantı noktası adlarını kendiniz almanız gerekir.

Adım 3: Verilog Kodu

Bir zamanlayıcı "servo_count" oluşturuyoruz. "servo_A" YÜKSEK olduğunda, PWM 1.5ms'dir ve bu nedenle servo 120 derecede bulunur. Buna karşılık, "servo_A" DÜŞÜK olduğunda, PWM 0.15ms'dir ve bu nedenle servo 0 derecede kalır.

XIO_2[3] ata = servo_pulse; //V' için

reg [31:0] servo_count;

ilk başlangıç

servo_count <= 32'b0;

servo_A <= 1'b0;

son

her zaman @(posedge CLK_66)

başlamak

servo_count <= servo_count + 1'b1;

if(servo_count > 400000000) //Saat döngüsü 66MHz, 1/66M * 400000000 ~ 5 saniye

başlamak

servo_A <= !servo_A;

servo_count <= 32'b0;

son

son

reg [31:0] ex_auto;

ilk başlangıç

ex_auto <= 32'b0;

servo_auto <= 1'b0;

son

her zaman @(posedge CLK_66)

başlamak

if(servo_A==1'b1)

başlamak

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 100000) //Saat döngüsü 66MHz, bu PWM ~1.5ms'dir, servo 120 dereceye döner

başlamak

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

son

son

if(servo_A==1'b0)

başlamak

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 10000) //Saat döngüsü 66MHz, bu PWM ~0.15ms'dir, servo 0 dereceye döner

başlamak

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

son

son

son

4. Adım: Verilog Kodunu Yükleyin

Image
Image

"Derlemeyi Başlat" ı tıklayın. Herhangi bir hata mesajı görüntülenmezse, donanım kurulumunu tamamlamak için "Programcı"ya gidin. Gerekirse "Dosya değiştir" bölümünden pof dosyasını güncellemeyi unutmayın. Kodu yüklemek için "Başlat" düğmesini tıklayın.

Sonuçta servo motorun periyodik olarak döndüğünü görmelisiniz.

Önerilen: