Mundarija:

STM32 qurilmalari bilan ishlaydigan RC servolari uchun yuqori aniqlikdagi PWM signalini yaratish: 3 qadam
STM32 qurilmalari bilan ishlaydigan RC servolari uchun yuqori aniqlikdagi PWM signalini yaratish: 3 qadam

Video: STM32 qurilmalari bilan ishlaydigan RC servolari uchun yuqori aniqlikdagi PWM signalini yaratish: 3 qadam

Video: STM32 qurilmalari bilan ishlaydigan RC servolari uchun yuqori aniqlikdagi PWM signalini yaratish: 3 qadam
Video: KOMPYUTER QANDAY QISIMLARDAN TASHKIL TOPGAN || TEZKOR XOTIRA || QATTIQ DISK || PROTSESR 2024, Noyabr
Anonim
STM32 qurilmali RC servolari uchun yuqori aniqlikdagi PWM signallari ishlab chiqarilishi
STM32 qurilmali RC servolari uchun yuqori aniqlikdagi PWM signallari ishlab chiqarilishi
STM32 qurilmali RC servolari uchun yuqori aniqlikdagi PWM signallari ishlab chiqarilishi
STM32 qurilmali RC servolari uchun yuqori aniqlikdagi PWM signallari ishlab chiqarilishi
STM32 qurilmali RC servolari uchun yuqori aniqlikdagi PWM signallari ishlab chiqarilishi
STM32 qurilmali RC servolari uchun yuqori aniqlikdagi PWM signallari ishlab chiqarilishi

Hozir men SX1280 RF chipiga asoslangan RC transmitter/qabul qilgichni qurmoqdaman. Loyihaning maqsadlaridan biri shundaki, men tayoqlardan servolarga qadar 12 bitli servo piksellar sonini xohlayman. Qisman, chunki zamonaviy raqamli servolar 12 bitli aniqlikka ega, ikkinchidan, yuqori sifatli transmitter 12 bitdan foydalanadi. Men STM32 qurilmalarida yuqori aniqlikdagi PWM signallarini qanday ishlab chiqarish mumkinligini o'rganib chiqdim. Men prototip uchun hozirda qora tabletkadan (STM32F103C8T8) foydalanayapman.

1 -qadam: qismlar ro'yxati

Uskuna

  • Har qanday STM32F103 ishlab chiqish taxtasi (ko'k tabletka, qora tabletka va boshqalar)
  • Quvvat manbai sifatida USB quvvat banki
  • STM32 dasturchisi (Segger j-links, ST-LINK/V2 yoki oddiy st-link klon)

Dasturiy ta'minot

  • STM32CubeMX
  • STM32 uchun Atollic TrueSTUDIO
  • Github -dan loyiha manbasi

2 -qadam: aniq echim

Aniq yechim
Aniq yechim
Aniq yechim
Aniq yechim
Aniq yechim
Aniq yechim

Ehtimol, eng oson echim-STM32F103-dagi TIM1-3 kabi PWM signallarini ishlab chiqaradigan taymerlardan birini ishlatish. Zamonaviy raqamli servo uchun kadr tezligi 5 ms gacha tushishi mumkin, lekin eski analog servo uchun u 20 ms yoki 50 Gts bo'lishi kerak. Shunday qilib, eng yomon stsenariy sifatida, buni ishlab chiqaramiz. 72 MGts chastotali va 16 bitli taymer hisoblagichining aniqligi bilan biz 20 ms kadr tezligini qoplash uchun taymerni oldindan hisoblagichini minimal 23 ga o'rnatishimiz kerak. Men 24 -ni tanladim, chunki 20 ms uchun hisoblagichni aniq 60000 -ga o'rnatishim kerak. Siz ekran tasvirlarida CubeMX sozlamalarini va 1 va 1,5 milodiy PWM signallarini ko'rishingiz mumkin. Afsuski, 1ms uchun taymer hisoblagichi 3000 ga o'rnatilishi kerak, bu bizga atigi 11 bitli piksellar sonini beradi. Yomon emas, lekin maqsad 12 bit edi, shuning uchun boshqa narsani sinab ko'raylik.

Albatta, agar men STM32L476 kabi 32 bitli taymer hisoblagichli mikro -nazoratchini tanlasam, bu piksellar sonini ancha yuqori bo'lishi mumkin va muammo hal qilinadi.

Ammo bu erda men STM32F103 da piksellar sonini yanada oshiradigan muqobil echimni taklif qilmoqchiman.

3 -qadam: Yuqori aniqlik uchun taymerlarni kaskadlash

Yuqori aniqlik uchun kaskadli taymerlar
Yuqori aniqlik uchun kaskadli taymerlar
Yuqori aniqlik uchun kaskadli taymerlar
Yuqori aniqlik uchun kaskadli taymerlar
Yuqori aniqlik uchun kaskadli taymerlar
Yuqori aniqlik uchun kaskadli taymerlar

Oldingi echimning asosiy muammosi shundaki, kadr tezligi (20 ms) amalda ishlab chiqarilgan PWM signaliga nisbatan ancha yuqori (1 va 2 ms oralig'ida), shuning uchun biz kutayotganimizda qolgan 18 ms uchun ba'zi qimmatli bitlarni isrof qilamiz. keyingi ramka. Buni sinxronizatsiya uchun taymer havolasi funktsiyasidan foydalangan holda kaskadli taymerlar yordamida hal qilish mumkin.

Gap shundaki, men TIM1 -ni asosiy tezlikni (20 ms) va TIM2, TIM3 -ni PWM signallarini qul sifatida ishlatish uchun master sifatida ishlataman. Xo'jayin qullarni ishga tushirganda, ular faqat bitta puls rejimida PWM signalini ishlab chiqaradilar. Shuning uchun men bu taymerlarda atigi 2 msni bosib o'tishim kerak. Yaxshiyamki, siz ushbu taymerlarni qo'shimcha qurilmalarda kaskad qilishingiz mumkin, shuning uchun bu sinxronizatsiya protsessordan hech qanday aralashuvni talab qilmaydi va bu juda aniq, jitter ps mintaqasida. Siz ekran tasvirlarida CubeMX sozlamalarini ko'rishingiz mumkin.

Ko'rib turganingizdek, men prescalar sifatida 3 ni tanladim, shuning uchun 2 ms uchun taymer taymerida 48000 ni o'rnatishim kerak. Bu bizga 1 ms uchun 24000 beradi, bu bizga 14 bitli aniqlik uchun kerak bo'lgan narsadir. Tadaaaa…

Iltimos, yakuniy natija uchun kirish qismidagi osiloskop skrinshotlarini ko'rib chiqing. 3 -kanal (binafsha rang) - bu asosiy taymerning uzilishi bo'lib, u pulslarni bitta puls hosil qilishiga olib keladi. 1 va 4 -kanal (sariq va yashil nur) - har xil taymerlar tomonidan ishlab chiqarilgan haqiqiy PWM signallari. E'tibor bering, ular sinxronlashtirilgandir, lekin ular PWM 2 rejimidan kelib chiqqan holda, oxirgi chekkalarda sinxronlashtiriladi. Bu muammo emas, chunki ma'lum servo uchun PWM tezligi hali ham to'g'ri.

Ushbu echimning boshqa afzalligi shundaki, kadr tezligini o'zgartirish faqat TIM1 davrini o'zgartirishni anglatadi. Zamonaviy raqamli servolar uchun siz 200-300 Gts gacha tushishingiz mumkin, lekin sozlashni xohlasangiz, servo qo'llanmasiga murojaat qiling.

Tavsiya: