Mundarija:
- 1 -qadam: Uskuna va dasturiy ta'minot talablari
- 2 -qadam: STM32CubeMX konfiguratsiyasi
- 3 -qadam: Keil UVision kodlash
- 4 -qadam: natija:)
Video: STM32F4 ARM MCU bilan servo dvigatelni boshqarish: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Salom do'stlar yana:) Shunday qilib, biz ushbu loyihada STM32F4 ARM MCU bilan servo motorni boshqaramiz. Mening vaziyatimda men kashfiyot taxtasidan foydalanaman, lekin agar siz muammoning mohiyatini tushunsangiz, uni har bir MCU uchun qo'llashingiz mumkin. Shunday qilib Qani boshladik:)
1 -qadam: Uskuna va dasturiy ta'minot talablari
Uskuna jihatidan bizga kerak bo'ladi:
- Mening holatimda STM32f4 Discovery kartasi bo'lgan MCU
- SG90 yoki boshqa har qanday kabi umumiy servo vosita
Dasturiy ta'minot nuqtai nazaridan bizga kerak bo'ladi:
- STM32CubeMX
- Keil uVision
Agar sizda bularning barchasi bo'lsa, keyingi bosqichga o'ting:)
2 -qadam: STM32CubeMX konfiguratsiyasi
Ma'lumki, servo dvigatelni boshqarish uchun bizga PWM signali kerak. PWM signaliga qo'yiladigan talablar quyidagicha:
- PWM davri 20 mS bo'lishi kerak
- Vaqt 0,5 mS dan 2,5 mS gacha bo'lishi kerak. Vaqti -vaqti bilan 0,5 mS bo'lsa, servo 0 gradusga, 90 gradus uchun 1,5 mS va 180 daraja 2,5 mS ga aylanadi.
Shunday qilib, biz PWM -ni sozlashimiz kerak va buning uchun biz Timer1 -dan foydalanamiz.
- Birinchidan, Taymerlar bo'limidan TIM1 -ni tanlang. Bu qadam
-
Keyin Mode bo'limidan
- Ichki soatni tanlang Bu qadam
- PWM avlodi CH1 Bu qadam
-
Keyin, Konfiguratsiya bo'limidan
- Prescaler -ni 160 ga o'rnating Bu qadam
- Hisoblagich davrini 2000 ga o'rnating Bu qadam
- Pulsni 50 ga o'rnating Bu qadam
- Bundan tashqari, soat konfiguratsiyasidan APB1 taymerining soatlari 16 MGts ga o'rnatiladi. Bu qadam
Keling, bu qadam haqida bir oz gaplashaylik:
Bizning APB1 taymer soatining chastotasi 16 MGts. Bu shuni anglatadiki, 1 soniyani olish uchun 16 000 000 shomil kerak bo'ladi. Biroq, biz oldindan hisoblagichni 160 ga o'rnatdik. Bu shuni anglatadiki, biz chastotamizni shu songa bo'lamiz va Shomil sonini 100 000 ga tushirdik. Shunday qilib, 1 soniya uchun bizga 100 000 Shomil kerak bo'ladi. Biroq, biz ilgari aytib o'tganimizdek, bizga 20 mS PWM davri kerak. Shunday qilib, oddiy matematikaga asoslanib, bizga 20mS uchun 2000 ta Shomil kerak. Shunday qilib, hisoblagich davrini 2000 ga o'rnatish orqali biz 20 mS bo'lgan PWM signalining davrini aniqlaymiz. Endi biz 0,5 mS dan 2,5 mS gacha bo'lgan vaqtni belgilash uchun raqamni aniqlashimiz kerak. Biz bu tenglamani oddiy matematikadan olishimiz mumkin va bu:
On_Time = (Tick_Number / 100). Shuni yodda tutingki, bu servo dvigatel burchagini o'zgartiradigan on_time. Shunday qilib, rasm ostida men bu qadamni umumlashtiraman. Agar sizda biron bir savol bo'lsa, izohlarda yozing va men iloji boricha tezroq javob beraman.
Hisob -kitoblar tasviri
Bularning barchasini bajarganingizdan so'ng kodni yarating:)
3 -qadam: Keil UVision kodlash
Xo'sh, birinchi navbatda nima qilishni xohlayotganimizni aniqlaylikmi? Biz darajani qabul qiladigan funktsiyani yozib, uni servoga yozishni xohlaymiz. Xo'sh, buni qanday qilamiz? Yuqorida aytib o'tganimizdek, burchakni o'zgartirish uchun o'z vaqtida o'zgartirish kerak. Bizning burchaklarimiz [0, 180] va shomillarning soni o'rtasida o'zgarib turadi, bu esa o'z vaqtida o'zgarishini aniqlaydi [50, 250]. Shunday qilib, bizga Shomillarning soniga berilgan burchakni xaritaga soluvchi xaritalash funktsiyasi kerak. Masalan, 0 daraja 50 Shomil uchun, 180 daraja 250 Shomil va boshqalar uchun … Shunday qilib, xaritalash funksiyamizni yozamiz:
int xaritasi (int st1, int fn1, int st2, int fn2, int qiymati) {qaytish (1.0*(qiymat-st1))/((fn1-st1)*1.0)*(fn2-st2)+st2; }
Bu bizning xaritalash funktsiyamiz. U qanday paydo bo'lganiga qiziqasizmi? Keyin buni o'qing. Shunday qilib, biz diapazonlarimizni va xaritaga kiritmoqchi bo'lgan qiymatni olamiz.
Keling, burchakni qabul qiladigan funktsiyani yozamiz va uni Shomil oralig'iga joylashtiramiz:
void servo_write (int burchagi) {htim1. Instance-> CCR1 = xarita (0, 180, 50, 250, burchak); }
Ko'rib turganingizdek, bu kod burchakni qabul qiladi va uni shomil soniga mos keladi. Shomillarning soni CCR1 registriga beriladi, u o'z vaqtida va boshqasini boshqaradi.
Biroq, bularning barchasi ishlashi uchun biz avval pwm -ni ishga tushiramiz, uni faqat kod satri orqali bajarish mumkin:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Shunday qilib, biz burchakni qabul qiladigan va uni servoga yozadigan funktsiyaga egamiz. Keling, buni sinab ko'ramiz va tozalash funktsiyasini yozamiz, bu juda oson:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } uchun (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Shunday qilib, u faqat 180 gacha, keyin 0 ga tushadi va bu qiymatlarni servoga yozadi:) Shunday qilib, natijani ko'rib chiqaylik!
4 -qadam: natija:)
Demak, bu oxir. Agar sizda biron bir savol bo'lsa, iltimos so'rang. Men ularga javob berishdan xursand bo'laman. O'qiganingiz uchun katta rahmat va keyingi loyihada ko'rishguncha umid qilaman:)
Tavsiya:
3 ta potentsiometr va Arduino bilan 3 ta servo dvigatelni boshqarish: 11 qadam (rasmlar bilan)
3 ta potentsiometr va Arduino bilan 3 ta servo dvigatelni boshqarish: Salom. Bu mening birinchi o'rgatuvchim, shuning uchun, agar men uni sozlashda xatolarga yo'l qo'ysam, sabr qilasiz deb umid qilaman. Bu yangi boshlanuvchilar uchun yozilgan, shuning uchun orangizdagi eng ilg'orlari ko'p narsalarni o'tkazib yuborishi mumkin va men faqat o'zimning simimni ulashim mumkin
Arduino qo'llanmasi - Joystick bilan servo dvigatelni boshqarish: 4 qadam
Arduino qo'llanmasi - Joystick yordamida servo dvigatelni boshqarish: Ushbu darsda biz servolarni Joystick bilan qanday ishlatishni o'rganamiz. Biz 1 dona Joystick bilan 1 dona servo dvigatelni boshqaramiz, siz ushbu qo'llanmaga tayanib robot qo'l loyihalarini amalga oshirishingiz mumkin. Albatta, biz tashqi batareya / quvvat ishlatamiz
Arduino qo'llanmasi - Servo dvigatelni potentsiometr bilan boshqarish: 5 qadam
Arduino qo'llanmasi - Servo dvigatelni potentsiometr yordamida boshqarish: Bu "Arduino: Servo dvigatelni potentsiometr bilan qanday boshqarish kerak" ning yozma versiyasi. Yaqinda yuklagan YouTube videosi. YouTube kanaliga tashrif buyuring
Arduino qo'llanmasi - Arduino bilan servo dvigatelni boshqarish: 5 qadam
Arduino qo'llanmasi - Arduino bilan servo dvigatelni boshqarish: Bu "Arduino: Servo dvigatelini Arduino bilan qanday boshqarish kerak" ning yozma versiyasi. Yaqinda yuklagan YouTube videosi. YouTube kanaliga tashrif buyuring
Arduino va Bluetooth yordamida servo dvigatelni boshqarish uchun Android (remotexy) UI: 7 qadam (rasmlar bilan)
Arduino va Bluetooth yordamida servo dvigatelni boshqarish uchun Android (remotexy) foydalanuvchi interfeysi: Ushbu yo'riqnomada men sizga Bluetooth orqali Arduino Mega -ga ulangan Servo dvigatelni boshqarish uchun Remotexy Interface Maker yordamida Android foydalanuvchi interfeysini yaratish bo'yicha tezkor qadamni beraman. Bu videoda UI servo dvigatel tezligi va joylashishini qanday boshqarishi ko'rsatilgan