Mündəricat:

STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli: 3 Addım
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli: 3 Addım

Video: STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli: 3 Addım

Video: STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli: 3 Addım
Video: RC Kumanda ile Arduino Kullanımı - How to Control Arduino with RC Radio 2024, Noyabr
Anonim
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli
STM32 Cihazlı RC Servoları üçün Yüksək Çözünürlüklü PWM Siqnal Nəsli

Hal -hazırda, SX1280 RF çipinə əsaslanan bir RC ötürücü/qəbuledici qururam. Layihənin məqsədlərindən biri, çubuqlardan servolara qədər 12 bitlik servo qətnamə istəyimdir. Qismən müasir rəqəmsal servoların 12 bit qətnaməyə malik olması səbəbindən ikincisi də yüksək səviyyəli bir ötürücü 12 bit istifadə edir. STM32 cihazlarında yüksək qətnaməli PWM siqnalları necə yarada biləcəyimi araşdırırdım. Hazırda prototip üçün qara həb (STM32F103C8T8) istifadə edirəm.

Addım 1: Parça siyahısı

Avadanlıq

  • Hər hansı bir STM32F103 inkişaf lövhəsi (mavi həb, qara həb və s.)
  • Güc mənbəyi olaraq USB güc bankı
  • STM32 proqramçısı (Segger j-links, ST-LINK/V2 və ya sadəcə st-link klonu)

Proqram təminatı

  • STM32CubeMX
  • STM32 üçün Atollic TrueSTUDIO
  • Github -dan layihə mənbəyi

Addım 2: Aşkar Həll

Aşkar Həll
Aşkar Həll
Aşkar Həll
Aşkar Həll
Aşkar Həll
Aşkar Həll

Yəqin ki, ən asan həll STM32F103-də TIM1-3 kimi PWM siqnalları yarada bilən taymerlərdən birini istifadə etməkdir. Müasir bir rəqəmsal servo üçün çərçivə sürəti 5 ms -ə qədər enə bilər, ancaq köhnə bir analog servo üçün 20 ms və ya 50 Hz olmalıdır. Beləliklə, ən pis vəziyyət ssenarisi olaraq bunu yaradaq. 72 MHz saat və 16 bit timer sayğacının qətnaməsi ilə, 20 ms çərçivə sürətini əhatə etmək üçün taymerin prescalerini minimum 23 olaraq təyin etməliyik. 24 seçdim, çünki 20 ms ərzində sayğacı tam olaraq 60000 olaraq təyin etməliyəm. Ekran görüntülərində CubeMX quruluşunu və yaradılan 1 və 1.5 ms PWM siqnallarını görə bilərsiniz. Təəssüf ki, 1 ms üçün taymer sayğacının 3000 -ə təyin edilməsi lazımdır ki, bu da bizə yalnız 11 bit qətnamə verəcəkdir. Pis deyil, amma hədəf 12 bit idi, gəlin başqa bir şey sınayaq.

Əlbəttə ki, STM32L476 kimi 32 bitlik sayğacı olan bir mikro nəzarətçi seçsəm, bu qətnamə daha yüksək ola bilər və problem həll ediləcəkdir.

Ancaq burada STM32F103 -də belə qətnaməni daha da artıracaq alternativ bir həll təklif etmək istərdim.

Addım 3: Yüksək Çözünürlük üçün Cascading Timers

Yüksək Çözünürlük üçün Cascading Timers
Yüksək Çözünürlük üçün Cascading Timers
Yüksək Çözünürlük üçün Cascading Timers
Yüksək Çözünürlük üçün Cascading Timers
Yüksək Çözünürlük üçün Cascading Timers
Yüksək Çözünürlük üçün Cascading Timers

Əvvəlki həlldəki əsas problem, kadr sürətinin (20 ms) əslində yaradılan PWM siqnalına (1 ilə 2 ms arasında) nisbətən yüksək olmasıdır, buna görə də gözlədiyimiz zaman qalan 18 ms üçün bəzi dəyərli bitləri israf edirik. növbəti çərçivə. Sinxronizasiya üçün taymer bağlantısı xüsusiyyətindən istifadə edərək kaskad taymerləri ilə həll edilə bilər.

Fikir budur ki, çərçivə sürətini (20 ms) yaratmaq üçün TIM1 -i master olaraq və PWM siqnallarının kölə olaraq öhdəsindən gəlmək üçün TIM2, TIM3 -dən istifadə edəcəyəm. Usta qulları işə saldıqda yalnız bir puls rejimində PWM siqnalı yaradır. Buna görə də bu taymerlərdə cəmi 2 ms -i əhatə etməliyəm. Xoşbəxtlikdən, bu sayğacları aparat içərisində kaskad edə bilərsiniz, beləliklə bu sinxronizasiyanın prosessorun müdaxiləsinə ehtiyacı yoxdur və çox dəqiqdir, titrəmə ps bölgəsindədir. Ekran görüntülərində CubeMX quruluşunu görə bilərsiniz.

Gördüyünüz kimi prescalar olaraq 3 seçdim, buna görə 2 ms üçün taymer sayacında 48000 təyin etməliyəm. Bu bizə 1 ms üçün 24000 verir ki, bu da 14 bitlik qətnamə üçün ehtiyacımız olan şeydir. Tadaaaa…

Zəhmət olmasa son nəticə üçün girişdəki osiloskop ekran görüntülərinə baxın. Kanal 3 (bənövşəyi), bir nəbz yaratmağa kömək edəcək əsas zamanlayıcının kəsilməsidir. Kanal 1 və 4 (sarı və yaşıl şüa) fərqli taymerlərin yaratdığı əsl PWM siqnallarıdır. Qeyd edək ki, onlar sinxronlaşdırılır, lakin PWM 2 rejiminə görə arxa kənarlarda sinxronlaşdırılır. Bu problem deyil, çünki xüsusi servo üçün PWM dərəcəsi hələ də düzgündür.

Bu həllin digər faydası, kadr sürətini dəyişdirmək yalnız TIM1 -də dövrü dəyişdirmək deməkdir. Müasir rəqəmsal servolar üçün 200-300 Hz-ə qədər enə bilərsiniz, ancaq incə tənzimləmək istəyirsinizsə servo təlimatına müraciət edin.

Tövsiyə: