FPGA siklon IV DueProLogic boshqaruv dvigatellari: 4 qadam
FPGA siklon IV DueProLogic boshqaruv dvigatellari: 4 qadam
Anonim
Servo dvigatelni boshqaruvchi FPGA siklon IV DueProLogic
Servo dvigatelni boshqaruvchi FPGA siklon IV DueProLogic

Ushbu qo'llanmada biz servo dvigatelni boshqarish uchun Verilog kodini yozamiz. Servo SG-90 Waveshare tomonidan ishlab chiqarilgan. Servo dvigatelni sotib olayotganda, siz ishchi kuchlanishni, maksimal momentni va taklif qilinadigan puls kengligi modulyatsiyasini (PWM) va boshqalarni o'z ichiga olgan ma'lumotlar jadvalini olishingiz mumkin. Biroq, FPGA DuePrologic kirish voltajini 3,3V bilan ta'minlaydi, bu erda SG -90 servosining ish kuchlanishi 5V - 7V. Elektr quvvati yo'qligida, servo dvigatelni muvaffaqiyatli aylantirish uchun men kalibrlangan PWM ro'yxatini tuzaman.

Bizning vazifamiz: servo dvigatel 5 soniya davomida oldinga va orqaga buriladi

To'liq menyu:

1 -qadam: Elektron sxemani yarating

Elektron sxemani yaratish
Elektron sxemani yaratish

2 -qadam: Pin Planner -ni o'rnating

Pin rejalashtiruvchini o'rnating
Pin rejalashtiruvchini o'rnating

Pim rejalashtiruvchi to'g'ri o'rnatilganligini tekshirish uchun "I/U tayinlashni tahlil qilishni boshlash" tugmasini bosing. Aks holda, barcha port nomlarini o'zingiz import qilishingiz kerak bo'ladi.

3 -qadam: Verilog kodi

Biz "servo_count" taymerini yaratamiz. Qachon "servo_A" yuqori bo'lsa, PWM 1,5 ms ni tashkil qiladi va shuning uchun servo 120 gradusda joylashgan. Bundan farqli o'laroq, "servo_A" LOW bo'lsa, PWM 0,15 ms ni tashkil qiladi va shuning uchun servo 0 darajada saqlanadi.

tayinlash XIO_2 [3] = servo_pulse; // V uchun

reg [31: 0] servo_count;

boshlang'ich boshlanishi

servo_count <= 32'b0;

servo_A <= 1'b0;

oxiri

har doim @(rasm CLK_66)

boshlash

servo_count <= servo_count + 1'b1;

agar (servo_count> 400000000) // Soat aylanishi 66 MGts, 1/66 M * 400000000 ~ 5 soniya

boshlash

servo_A <=! servo_A;

servo_count <= 32'b0;

oxiri

oxiri

reg [31: 0] ex_auto;

boshlang'ich boshlanishi

ex_auto <= 32'b0;

servo_auto <= 1'b0;

oxiri

har doim @(rasm CLK_66)

boshlash

agar (servo_A == 1'b1)

boshlash

ex_auto <= ex_auto + 1'b1;

agar (ex_auto> 100000) // Soat aylanishi 66MGts, bu PWM ~ 1,5ms, servo 120 darajaga buriladi

boshlash

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

oxiri

oxiri

agar (servo_A == 1'b0)

boshlash

ex_auto <= ex_auto + 1'b1;

agar (ex_auto> 10000) // Soat aylanishi 66MGts, bu PWM ~ 0,15ms, servo 0 gradusga buriladi

boshlash

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

oxiri

oxiri

oxiri

4 -qadam: Verilog kodini yuklang

Image
Image

"Kompilyatsiyani boshlash" ni bosing. Agar xato xabari ko'rsatilmasa, uskunani sozlashni yakunlash uchun "Dasturchi" ga o'ting. Agar kerak bo'lsa, "Faylni o'zgartirish" bo'limida pof faylini yangilashni unutmang. Kodni yuklash uchun "Ishga tushirish" tugmasini bosing.

Axir, servo dvigatel vaqti -vaqti bilan aylanayotganini ko'rishingiz kerak.