Satura rādītājs:

Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm: 3 soļi
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm: 3 soļi

Video: Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm: 3 soļi

Video: Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm: 3 soļi
Video: Классификация усилителей мощности - классы A,B,AB,C,D,G,H 2024, Jūlijs
Anonim
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm
Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm

Pašlaik es būvēju RC raidītāju/uztvērēju, pamatojoties uz SX1280 RF mikroshēmu. Viens no projekta mērķiem ir tas, ka es vēlos 12 bitu servo izšķirtspēju no nūjām līdz servos. Daļēji tāpēc, ka mūsdienu digitālajiem servos ir 12 bitu izšķirtspēja, otrkārt, augstākās klases raidītājs jebkurā gadījumā izmanto 12 bitus. Es pētīju, kā es varu ģenerēt augstas izšķirtspējas PWM signālus STM32 ierīcēs. Prototipam šobrīd izmantoju melnās tabletes (STM32F103C8T8).

1. darbība: detaļu saraksts

Aparatūra

  • Jebkura STM32F103 attīstības plāksne (zila tablete, melna tablete utt.)
  • USB barošanas bloks kā barošanas avots
  • STM32 programmētājs (Segger j-links, ST-LINK/V2 vai vienkārši st-link klons)

Programmatūra

  • STM32CubeMX
  • Atollic TrueSTUDIO STM32
  • Projekta avots no github

2. solis: acīmredzamais risinājums

Acīmredzamais risinājums
Acīmredzamais risinājums
Acīmredzamais risinājums
Acīmredzamais risinājums
Acīmredzamais risinājums
Acīmredzamais risinājums

Iespējams, vienkāršākais risinājums ir izmantot vienu no taimeriem, kas var ģenerēt PWM signālus, piemēram, TIM1-3 uz STM32F103. Mūsdienīgam digitālajam servo kadru nomaiņas ātrums var samazināties līdz aptuveni 5 ms, bet vecam analogam servo tam vajadzētu būt 20 ms vai 50 Hz. Tātad, sliktākajā gadījumā ģenerēsim to. Ar 72 MHz pulksteni un 16 bitu taimera skaitītāja izšķirtspēju mums ir jāiestata taimera prescaler uz vismaz 23, lai segtu 20 ms kadru ātrumu. Es izvēlējos 24, jo tad 20 ms man jāiestata skaitītājs tieši uz 60000. Ekrānuzņēmumos varat redzēt CubeMX iestatījumus un ģenerētos 1 un 1,5 ms PWM signālus. Diemžēl 1 ms taimera skaitītājs ir jāiestata uz 3000, kas mums dotu tikai 11 bitu izšķirtspēju. Nav slikti, bet mērķis bija 12 bitu, tāpēc izmēģināsim ko citu.

Protams, ja es izvēlētos mikro kontrolieri ar 32 bitu taimera skaitītāju, piemēram, STM32L476, šī izšķirtspēja var būt daudz augstāka, un problēma tiktu atrisināta.

Bet šeit es gribētu piedāvāt alternatīvu risinājumu, kas vēl vairāk palielinās izšķirtspēju pat uz STM32F103.

3. darbība. Kaskādes taimeri augstākai izšķirtspējai

Kaskādes taimeri augstākai izšķirtspējai
Kaskādes taimeri augstākai izšķirtspējai
Kaskādes taimeri augstākai izšķirtspējai
Kaskādes taimeri augstākai izšķirtspējai
Kaskādes taimeri augstākai izšķirtspējai
Kaskādes taimeri augstākai izšķirtspējai

Galvenā problēma ar iepriekšējo risinājumu ir tāda, ka kadru nomaiņas ātrums (20 ms) ir salīdzinoši augsts, salīdzinot ar faktiski ģenerēto PWM signālu (no 1 līdz 2 ms), tāpēc mēs atlikušos 18 ms izšķērdējam dažus bitus, gaidot nākamais kadrs. To var atrisināt ar kaskādes taimeriem, izmantojot sinhronizācijas taimera saites funkciju.

Ideja ir tāda, ka es izmantošu TIM1 kā galveno, lai ģenerētu kadru ātrumu (20 ms), un TIM2, TIM3, lai tiktu galā ar PWM signāliem kā vergi. Kad meistars iedarbina vergus, tie ģenerē PWM signālu tikai viena impulsa režīmā. Tāpēc man šajos taimeros jāaptver tikai 2 ms. Par laimi, šos taimeri var kaskādēt aparatūrā, tāpēc šai sinhronizācijai nav nepieciešama nekāda procesora iejaukšanās, un tā ir arī ļoti precīza, nervozitāte ir ps reģionā. Ekrānuzņēmumos varat redzēt CubeMX iestatījumus.

Kā redzat, es izvēlējos 3 kā preskalāru, tāpēc 2 ms laika taimera skaitītājā ir jāiestata 48000. Tas dod mums 24000 uz 1 ms, kas patiesībā ir vairāk par 14 bitu izšķirtspēju. Tadaaaa…

Lūdzu, ieskatieties osciloskopa ekrānuzņēmumos ievadā, lai iegūtu gala rezultātu. 3. kanāls (purpursarkans) ir galvenā taimera pārtraukums, kas izraisīs salves, lai ģenerētu vienu impulsu. 1. un 4. kanāls (dzeltens un zaļš stars) ir faktiskie PWM signāli, ko ģenerē dažādi taimeri. Ņemiet vērā, ka tie ir sinhronizēti, bet tiek sinhronizēti pēdējās malās, tas ir PWM režīma 2 dēļ. Tā nav problēma, jo konkrētā servo PWM ātrums joprojām ir pareizs.

Cits šī risinājuma ieguvums ir tas, ka kadru nomaiņas ātruma maiņa nozīmētu mainīt tikai TIM1 periodu. Mūsdienu digitālajiem servos var samazināties līdz pat 200–300 Hz, taču, ja vēlaties precizēt, lūdzu, skatiet servo rokasgrāmatu.

Ieteicams: