Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
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
2 -qadam: Pin Planner -ni 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
"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.