Kazalo:

Ustvarjanje signala PWM visoke ločljivosti za RC servomotorje z napravami STM32: 3 koraki
Ustvarjanje signala PWM visoke ločljivosti za RC servomotorje z napravami STM32: 3 koraki

Video: Ustvarjanje signala PWM visoke ločljivosti za RC servomotorje z napravami STM32: 3 koraki

Video: Ustvarjanje signala PWM visoke ločljivosti za RC servomotorje z napravami STM32: 3 koraki
Video: #ApaITU EPS 5 PWM, BJT and Mosfet- DC Motor Series - Speed controller (Subtittled) 2024, Julij
Anonim
Ustvarjanje signala PWM visoke ločljivosti za RC servomotorje z napravami STM32
Ustvarjanje signala PWM visoke ločljivosti za RC servomotorje z napravami STM32
Ustvarjanje PWM signalov visoke ločljivosti za RC servomotorje z napravami STM32
Ustvarjanje PWM signalov visoke ločljivosti za RC servomotorje z napravami STM32
Ustvarjanje PWM signalov visoke ločljivosti za RC servomotorje z napravami STM32
Ustvarjanje PWM signalov visoke ločljivosti za RC servomotorje z napravami STM32

Trenutno gradim RC oddajnik/sprejemnik na osnovi SX1280 RF čipa. Eden od ciljev projekta je, da želim 12 -bitno servo ločljivost od palic vse do servomotorjev. Deloma zato, ker imajo sodobni digitalni servomotorji 12-bitno ločljivost, drugič, vrhunski oddajnik tako ali tako uporablja 12 bitov. Raziskoval sem, kako lahko ustvarim PWM signale visoke ločljivosti na napravah STM32. Trenutno uporabljam črno tableto (STM32F103C8T8) za prototip.

Korak: Seznam delov

Strojna oprema

  • Kakršna koli razvojna plošča STM32F103 (modra tableta, črna tableta itd.)
  • Napajalnik USB kot vir napajanja
  • Programer STM32 (Segger j-links, ST-LINK/V2 ali preprosto klon st-link)

Programska oprema

  • STM32CubeMX
  • Atolični TrueSTUDIO za STM32
  • Vir projekta iz github -a

2. korak: Očitna rešitev

Očitna rešitev
Očitna rešitev
Očitna rešitev
Očitna rešitev
Očitna rešitev
Očitna rešitev

Verjetno najlažja rešitev je uporaba enega od časovnikov, ki lahko ustvarijo signale PWM, na primer TIM1-3 na STM32F103. Za sodoben digitalni servo se lahko hitrost sličic zniža na približno 5 ms, pri starih analognih servomotorjih pa mora biti 20 ms ali 50 Hz. Torej, v najslabšem primeru ustvarimo to. Z 72 MHz uro in 16 -bitno ločljivostjo števca časa moramo nastaviti predkaler časovnika na najmanj 23, da pokrijemo hitrost sličic 20 ms. Izbral sem 24, ker moram potem za 20 ms nastaviti števec točno na 60000. Na posnetkih zaslona si lahko ogledate nastavitev CubeMX ter ustvarjene 1 in 1,5 ms PWM signale. Na žalost je treba števec časovnika za 1 ms nastaviti na 3000, kar bi nam dalo le 11 -bitno ločljivost. Ni slabo, cilj pa je bil 12 -bitni, zato poskusimo še kaj drugega.

Seveda, če bi izbral mikro krmilnik z 32 -bitnim števcem časovnika, na primer STM32L476, je ta ločljivost lahko veliko višja in problem bi bil rešen.

Tukaj pa bi rad predlagal alternativno rešitev, ki bo še povečala ločljivost tudi na STM32F103.

3. korak: Kaskadni časovniki za višjo ločljivost

Kaskadni časovniki za višjo ločljivost
Kaskadni časovniki za višjo ločljivost
Kaskadni časovniki za višjo ločljivost
Kaskadni časovniki za višjo ločljivost
Kaskadni časovniki za višjo ločljivost
Kaskadni časovniki za višjo ločljivost

Glavna težava pri prejšnji rešitvi je, da je hitrost sličic (20 ms) relativno visoka v primerjavi z dejansko ustvarjenim signalom PWM (med 1 in 2 ms), zato zapravljamo nekaj dragocenih bitov za preostalih 18 ms, ko čakamo naslednji okvir. To lahko rešite s kaskadnimi časovniki, ki uporabljajo funkcijo časovne povezave za sinhronizacijo.

Ideja je, da bom uporabil TIM1 kot glavni za ustvarjanje hitrosti sličic (20 ms) in TIM2, TIM3 za obvladovanje signalov PWM kot podrejeni. Ko glavni sproži pomožne enote, le v enem impulznem načinu ustvarijo signal PWM. Zato moram v teh časovnikih pokriti le 2 ms. Na srečo lahko te časovnike uvrstite v strojno opremo, zato ta sinhronizacija ne potrebuje posegov procesorja in je tudi zelo natančna, trepetanje je v območju ps. Na posnetkih zaslona si lahko ogledate nastavitev CubeMX.

Kot vidite, sem za preskalar izbral 3, zato moram za 2 ms v števcu časovnika nastaviti 48000. To nam daje 24000 za 1 ms, kar je pravzaprav več, kar potrebujemo za 14 -bitno ločljivost. Tadaaaa…

Za končni rezultat si oglejte posnetke zaslona osciloskopa v uvodu. Kanal 3 (vijoličen) je prekinitev glavnega časovnika, ki bo sprožil salve za ustvarjanje enega impulza. Kanal 1 in 4 (rumeni in zeleni žarek) sta dejanska signala PWM, ki ju ustvarjata različna časovnika. Upoštevajte, da so sinhronizirani, vendar so sinhronizirani na zadnjih robovih, to je zaradi načina PWM 2. To ni problem, ker je stopnja PWM za določen servo še vedno pravilna.

Druga korist te rešitve je, da bi sprememba hitrosti sličic pomenila spremembo obdobja samo v TIM1. Za sodobne digitalne servomotorje se lahko znižate tudi na 200-300 Hz, vendar se za natančnejšo nastavitev posvetujte s servo priročnikom.

Priporočena: