Sadržaj:

Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima: 3 koraka
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima: 3 koraka

Video: Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima: 3 koraka

Video: Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima: 3 koraka
Video: Основы горизонтально масштабируемых вычислений Джеймса Каффа 2024, Srpanj
Anonim
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima
Generiranje PWM signala visoke razlučivosti za RC servo uređaje sa STM32 uređajima

Trenutno gradim RC odašiljač/prijemnik na temelju SX1280 RF čipa. Jedan od ciljeva projekta je da želim 12 -bitnu servo rezoluciju od štapova do servosa. Djelomično zato što moderni digitalni servo uređaji imaju 12-bitnu razlučivost, drugo, vrhunski odašiljač ionako koristi 12 bita. Istraživao sam kako mogu generirati PWM signale visoke razlučivosti na STM32 uređajima. Trenutno koristim crnu pilulu (STM32F103C8T8) za prototip.

Korak 1: Popis dijelova

Hardver

  • Bilo koja razvojna ploča STM32F103 (plava pilula, crna pilula itd.)
  • USB banka za napajanje kao izvor napajanja
  • STM32 programer (Segger j-links, ST-LINK/V2 ili jednostavno st-link klon)

Softver

  • STM32CubeMX
  • Atolični TrueSTUDIO za STM32
  • Izvor projekta iz githuba

Korak 2: Očigledno rješenje

Očigledno rješenje
Očigledno rješenje
Očigledno rješenje
Očigledno rješenje
Očigledno rješenje
Očigledno rješenje

Vjerojatno je najjednostavnije rješenje upotrijebiti jedan od mjerača vremena koji može generirati PWM signale, poput TIM1-3 na STM32F103. Za moderan digitalni servo brzina kadrova može se spustiti na oko 5 ms, ali za stari analogni servo trebao bi biti 20 ms ili 50 Hz. Dakle, kao najgori mogući scenarij generirajmo to. Uz 72 MHz takt i 16 -bitnu razlučivost brojača vremena moramo postaviti predskaler timera na minimalno 23 kako bismo pokrili brzinu od 20 ms. Odabrao sam 24 jer tada za 20 ms moram postaviti brojač točno na 60000. Na snimkama zaslona možete vidjeti postavke CubeMX -a i generirane PWM signale od 1 i 1,5 ms. Nažalost, za 1 ms brojač timera trebao bi biti postavljen na 3000, što bi nam dalo samo 11 bitnu razlučivost. Nije loše, ali cilj je bio 12 -bitni, pa pokušajmo nešto drugo.

Naravno, ako bih odabrao mikro kontroler s 32 -bitnim brojačem vremena, poput STM32L476 ova rezolucija može biti mnogo veća i problem bi bio riješen.

No ovdje bih želio predložiti alternativno rješenje koje će dodatno povećati razlučivost čak i na STM32F103.

Korak 3: Kaskadni mjerači vremena za veću rezoluciju

Kaskadni mjerači vremena za veću rezoluciju
Kaskadni mjerači vremena za veću rezoluciju
Kaskadni mjerači vremena za veću rezoluciju
Kaskadni mjerači vremena za veću rezoluciju
Kaskadni mjerači vremena za veću rezoluciju
Kaskadni mjerači vremena za veću rezoluciju

Glavni problem s prethodnim rješenjem je taj što je brzina kadrova (20 ms) relativno visoka u odnosu na stvarno generirani PWM signal (između 1 i 2 ms), pa gubimo neke vrijedne bitove za preostalih 18 ms kada čekamo sljedeći okvir. To se može riješiti kaskadnim mjeračima vremena pomoću značajke povezivanja timera za sinkronizaciju.

Ideja je da ću koristiti TIM1 kao master za generiranje frame rate -a (20 ms) i TIM2, TIM3 za nošenje sa PWM signalima kao slave. Kad master aktivira podređene uređaje, oni generiraju samo PWM signal u jednom impulsnom načinu rada. Stoga u tim timerima moram pokriti samo 2 ms. Srećom, te timere možete staviti u hardver tako da za tu sinkronizaciju nije potrebna nikakva intervencija procesora, a također je i vrlo precizna, jitter je u ps području. Postavke CubeMX -a možete vidjeti na snimkama zaslona.

Kao što vidite, odabrao sam 3 kao preskalarne pa za 2 ms moram postaviti 48000 u brojaču timera. To nam daje 24000 za 1 ms, što je zapravo više od onoga što nam treba za 14 -bitnu razlučivost. Tadaaaa…

Za konačni rezultat pogledajte snimke zaslona osciloskopa u uvodu. Kanal 3 (ljubičasti) je prekid glavnog mjerača vremena koji će pokrenuti salve za generiranje jednog impulsa. Kanal 1 i 4 (žuti i zeleni snop) stvarni su PWM signali koje generiraju različiti mjerači vremena. Imajte na umu da su sinkronizirani, ali sinkronizirani su na zadnjim rubovima, to je zbog PWM moda 2. To nije problem jer je PWM stopa za određeni servo i dalje točna.

Druga je korist ovog rješenja to što bi promjena frame rate -a značila promjenu razdoblja samo u TIM1. Za moderne digitalne servomotore možete se spustiti na čak 200-300 Hz, ali molimo vas da pogledate priručnik za servo ako želite fino podesiti.

Preporučeni: