Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Aktualisht, unë jam duke ndërtuar një transmetues/marrës RC bazuar në çipin SX1280 RF. Një nga qëllimet për projektin është që unë dua 12 bit servo rezolucion nga shkopinjtë deri në servos. Pjesërisht sepse servot dixhital modern kanë rezolucion 12 bit, së dyti një transmetues i nivelit të lartë po përdor gjithsesi 12 bit. Unë isha duke hetuar sesi mund të gjeneroj sinjale PWM me rezolucion të lartë në pajisjet STM32. Unë jam duke përdorur pilula të zeza (STM32F103C8T8) për momentin për prototipin.
Hapi 1: Lista e Pjesëve
Hardware
- Çdo bord zhvillimi STM32F103 (pilula blu, pilula e zezë, etj.)
- Një bankë energjie USB si furnizim me energji elektrike
- Programues STM32 (lidhje Segger j, ST-LINK/V2, ose thjesht një klon st-link)
Softuer
- STM32CubeMX
- Atollic TrueSTUDIO për STM32
- Burimi i projektit nga github
Hapi 2: Zgjidhja e qartë
Ndoshta zgjidhja më e lehtë është të përdorni një nga kohëmatësit i cili mund të gjenerojë sinjale PWM, si TIM1-3 në një STM32F103. Për një servo dixhitale moderne, shkalla e kornizës mund të zbresë në 5 ms ose më shumë, por për një servo analoge të vjetër duhet të jetë 20 ms ose 50 Hz. Pra, si skenari më i keq, le ta krijojmë atë. Me orën 72 MHz dhe rezolucionin e njehsorit të kohëmatësit 16 bit, ne duhet të vendosim parashkruesin e kohëmatësit në minimum 23 në mënyrë që të mbulojë shkallën e kornizës 20 ms. Zgjodha 24 sepse atëherë për 20 ms më duhet të vendos numëratorin saktësisht në 60000. Mund të shihni konfigurimin e CubeMX dhe sinjalet e gjeneruara 1 dhe 1.5 ms PWM në pamjet e ekranit. Fatkeqësisht, për 1ms numëruesi i kohëmatësit duhet të vendoset në 3000, gjë që do të na jepte vetëm rezolucion 11 bit. Jo keq, por qëllimi ishte 12 bit, kështu që le të provojmë diçka tjetër.
Sigurisht, nëse do të zgjidhja një mikrokontrollues me numërues kohëmatës 32 bit, si STM32L476, kjo rezolucion mund të jetë shumë më e lartë dhe problemi do të zgjidhej.
Por këtu, unë do të doja të propozoja një zgjidhje alternative e cila do të rrisë më tej rezolucionin edhe në STM32F103.
Hapi 3: Kohëmatësit në rritje për zgjidhje më të larta
Problemi kryesor me zgjidhjen e mëparshme është se shpejtësia e kornizës (20 ms) është relativisht e lartë në krahasim me sinjalin e gjeneruar në të vërtetë PWM (midis 1 dhe 2 ms), kështu që ne po humbim disa bit të vlerësuar për 18 ms të mbetur kur jemi duke pritur kuadri tjetër. Kjo mund të zgjidhet me kalimin e kohëmatësve duke përdorur veçorinë e lidhjes së kohëmatësit për sinkronizim.
Ideja është që unë do të përdor TIM1 si master për të gjeneruar shkallën e kornizës (20 ms) dhe TIM2, TIM3 për të përballuar sinjalet PWM si skllevër. Kur masteri aktivizon skllevërit, ata gjenerojnë vetëm një sinjal PWM në një mënyrë pulsi. Prandaj më duhet të mbuloj vetëm 2 ms në ato kohëmatës. Për fat të mirë ju mund t'i kaloni ato kohëmatës në harduer kështu që ky sinkronizim nuk ka nevojë për ndonjë ndërhyrje nga procesori dhe është shumë i saktë gjithashtu, jitter është në rajonin ps. Ju mund të shihni konfigurimin e CubeMX në pamjet e ekranit.
Siç mund ta shihni, unë zgjodha 3 si prescalar, kështu që për 2 ms më duhet të vendos 48000 në numëruesin e kohëmatësit. Kjo na jep 24000 për 1 ms që në fakt është më shumë ajo që na nevojitet për rezolucion 14 bit. Tadaaaa…
Ju lutemi hidhini një sy pamjeve të oshiloskopit në hyrje për rezultatin përfundimtar. Kanali 3 (vjollcë) është ndërprerja e kohëmatësit kryesor i cili do të bëjë që salves të gjenerojnë një impuls. Kanali 1 dhe 4 (rreze e verdhë dhe jeshile) janë sinjalet aktuale PWM të krijuara nga kohëmatës të ndryshëm. Vini re se ato janë të sinkronizuara, por ato sinkronizohen në skajet e fundit, kjo është për shkak të modalitetit PWM 2. Ky nuk është problem, sepse norma PWM për servo -n e caktuar është ende e saktë.
Përfitim tjetër i kësaj zgjidhjeje është se të ndryshosh normën e kornizës do të thotë të ndryshosh periudhën vetëm në TIM1. Për servot dixhitale moderne ju mund të zbresni edhe në 200-300 Hz, por ju lutemi konsultohuni me manualin e servo-së nëse doni të rregulloni mirë.