Satura rādītājs:
- 1. darbība: detaļu saraksts
- 2. solis: acīmredzamais risinājums
- 3. darbība. Kaskādes taimeri augstākai izšķirtspējai
Video: Augstas izšķirtspējas PWM signālu ģenerēšana RC servos ar STM32 ierīcēm: 3 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:54
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
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
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:
Augstas izšķirtspējas frekvenču skaitītājs: 5 soļi (ar attēliem)
Augstas izšķirtspējas frekvenču skaitītājs: šajā pamācībā parādīts abpusējs frekvenču skaitītājs, kas spēj ātri un ar saprātīgu precizitāti mērīt frekvences. Tas ir izgatavots no standarta sastāvdaļām, un to var izgatavot nedēļas nogalē (man tas aizņēma mazliet ilgāku laiku :-)) EDIT: Kods tagad ir pieejams
Augstas izšķirtspējas tīmekļa kamera: 9 soļi (ar attēliem)
Augstas izšķirtspējas tīmekļa kamera: dažus gadus es izmantoju uz RPi balstītu tīmekļa kameru (ar PiCam moduli). Sagatavotie attēli bija labi, bet tad bija brīdis, kad mani vairs neapmierināja kvalitāte. Es nolēmu izveidot augstas izšķirtspējas tīmekļa kameru. Sekojošās daļas
OpenLogger: augstas izšķirtspējas, iespējots Wi-Fi, atvērtā koda, pārnēsājamais datu reģistrētājs: 7 soļi
OpenLogger: augstas izšķirtspējas, iespējots Wi-Fi, atvērtā koda, pārnēsājamais datu reģistrētājs: OpenLogger ir pārnēsājams, atvērtā pirmkoda, lēts un augstas izšķirtspējas datu reģistrētājs, kas paredzēts augstas kvalitātes mērījumu nodrošināšanai, neprasot dārgu programmatūru vai rakstīšanas programmatūru. no nekā. Ja esat inženieris, zinātnieks vai entuziasts, kurš ne
Augstas kvalitātes pastiprinātājs ar USB barošanas avotu mobilajām ierīcēm (PAM8403): 3 soļi
Augstas kvalitātes pastiprinātājs ar USB barošanas avotu mobilajām ierīcēm (PAM8403): Mums ir problēma: zems skaņas līmenis piezīmjdatoru skaļruņos! piezīmjdatora skaļruņu troksnis! Mums nav ārēja barošanas avota! Šīs problēmas attiecas uz daudzām citām mobilajām ierīcēm. Ko mēs varam darīt? Ideja! Mēs varam izveidot skaļruņu superpastiprinātāju ar
Kā iegūt augstas izšķirtspējas attēlus no instrukcijām: 4 soļi
Kā izvadīt augstas izšķirtspējas attēlus no instrukcijām: vai jums patiešām patika šis pamācošais attēls un vēlaties saglabāt tā augstas izšķirtspējas kopiju? Šī lieliskā mazā iezīme ir viegli aizmirstama