
Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-23 14:59



Šiuo metu kuriu RC siųstuvą/imtuvą pagal SX1280 RF mikroschemą. Vienas iš projekto tikslų yra tai, kad noriu 12 bitų servo rezoliucijos nuo lazdų iki servo. Iš dalies todėl, kad šiuolaikiniai skaitmeniniai servo įrenginiai turi 12 bitų skiriamąją gebą, antra, aukščiausios klasės siųstuvas vis tiek naudoja 12 bitų. Aš tyrinėjau, kaip galiu sukurti didelės skiriamosios gebos PWM signalus STM32 įrenginiuose. Šiuo metu prototipui naudoju juodą piliulę (STM32F103C8T8).
1 žingsnis: dalių sąrašas
Techninė įranga
- Bet kokia STM32F103 kūrimo plokštė (mėlyna piliulė, juoda piliulė ir kt.)
- USB maitinimo blokas kaip maitinimo šaltinis
- STM32 programuotojas („Segger j-links“, ST-LINK/V2 arba tiesiog st-link klonas)
Programinė įranga
- STM32CubeMX
- „Atollic TrueSTUDIO“, skirtas STM32
- Projekto šaltinis iš „github“
2 žingsnis: akivaizdus sprendimas



Tikriausiai lengviausias sprendimas yra naudoti vieną iš laikmačių, galinčių generuoti PWM signalus, pvz., TIM1-3 ant STM32F103. Šiuolaikinio skaitmeninio servo kadrų dažnis gali sumažėti iki maždaug 5 ms, tačiau senos analoginės servo atveju jis turėtų būti 20 ms arba 50 Hz. Taigi, kaip blogiausią scenarijų, sugeneruokime tai. Turėdami 72 MHz laikrodį ir 16 bitų laikmačio skaitiklio skiriamąją gebą, turime nustatyti laikmačio išankstinį mastelį iki mažiausiai 23, kad padengtume 20 ms kadrų dažnį. Aš pasirinkau 24, nes tada 20 ms turiu tiksliai nustatyti skaitiklį iki 60000. Ekrano kopijose galite pamatyti „CubeMX“sąranką ir sugeneruotus 1 ir 1,5 ms PWM signalus. Deja, 1 ms laikmačio skaitiklis turėtų būti nustatytas į 3000, o tai suteiktų mums tik 11 bitų skiriamąją gebą. Neblogai, bet tikslas buvo 12 bitų, tad pabandykime ką nors kita.
Žinoma, jei pasirinkčiau mikrovaldiklį su 32 bitų laikmačio skaitikliu, pvz., STM32L476, ši skiriamoji geba gali būti daug didesnė ir problema būtų išspręsta.
Bet čia norėčiau pasiūlyti alternatyvų sprendimą, kuris dar labiau padidins skiriamąją gebą net ir STM32F103.
3 žingsnis: aukštesnės skiriamosios gebos kaskadiniai laikmačiai



Pagrindinė ankstesnio sprendimo problema yra ta, kad kadrų dažnis (20 ms) yra palyginti didelis, palyginti su faktiškai generuojamu PWM signalu (nuo 1 iki 2 ms), todėl laukdami likusių 18 ms eikvojame kai kuriuos vertingus bitus. kitą kadrą. Tai galima išspręsti pakopiniais laikmačiais, naudojant sinchronizavimo laikmačio nuorodos funkciją.
Idėja yra ta, kad aš naudosiu TIM1 kaip pagrindinį, kad sugeneruočiau kadrų dažnį (20 ms), o TIM2, TIM3, kad galėčiau susidoroti su PWM signalais kaip vergai. Kai šeimininkas paleidžia vergus, jie generuoja PWM signalą tik vieno impulso režimu. Todėl šiuose laikmačiuose man reikia tik 2 ms. Laimei, jūs galite kaskaduoti tuos laikmačius aparatinėje įrangoje, todėl šiam sinchronizavimui nereikia jokio procesoriaus įsikišimo, jis taip pat yra labai tikslus, nervingumas yra ps srityje. „CubeMX“sąranką galite pamatyti ekrano kopijose.
Kaip matote, aš pasirinkau 3 kaip išankstinį skalę, todėl 2 ms turiu nustatyti 48000 laikmačio skaitiklyje. Tai suteikia mums 24000 1 ms, o tai iš tikrųjų yra tai, ko mums reikia 14 bitų skirčiai. Tadaaaa…
Norėdami pamatyti galutinį rezultatą, pažvelkite į įvado osciloskopo ekrano kopijas. 3 kanalas (purpurinis) yra pagrindinio laikmačio pertraukimas, dėl kurio tepalai sugeneruos vieną impulsą. 1 ir 4 kanalas (geltona ir žalia šviesa) yra faktiniai PWM signalai, kuriuos generuoja skirtingi laikmačiai. Atkreipkite dėmesį, kad jie sinchronizuojami, tačiau yra sinchronizuojami galiniuose kraštuose, tai yra dėl PWM režimo 2. Tai nėra problema, nes konkretaus servo PWM dažnis vis tiek yra teisingas.
Kitas šio sprendimo privalumas yra tas, kad pakeitus kadrų dažnį, būtų pakeistas tik TIM1 laikotarpis. Naudodami šiuolaikinius skaitmeninius servoservis galite nusileisti net iki 200–300 Hz, tačiau, jei norite tiksliai sureguliuoti, perskaitykite servo vadovą.
Rekomenduojamas:
„OpenLogger“: didelės skiriamosios gebos, „Wi-Fi“įgalintas, atvirojo kodo, nešiojamasis duomenų kaupiklis: 7 žingsniai

„OpenLogger“: didelės skiriamosios gebos „Wi-Fi“įjungtas, atvirojo kodo, nešiojamasis duomenų kaupiklis: „OpenLogger“yra nešiojamas, atviro kodo, nebrangus, didelės skiriamosios gebos duomenų kaupiklis, skirtas aukštos kokybės matavimams atlikti, nereikalaujant brangios programinės įrangos ar rašymo programinės įrangos. nuo nulio. Jei esate inžinierius, mokslininkas ar entuziastas, kuris
Įvairių tipų tonų generavimas naudojant matematines lygtis („MathsMusic“) „Arduino“: 5 žingsniai

Įvairių tipų tonų generavimas naudojant matematines lygtis (MathsMusic) Arduino: Projekto aprašymas: Prasidėjo nauja kelionė, kur idėjos gali būti lengvai įgyvendinamos naudojant atvirojo kodo bendruomenę (Arduino dėka). Taigi čia yra būdas · Apsidairykite aplinkui ir stebėkite aplinkinius · Atraskite problemas, kurias reikia išspręsti
Įtampos generavimas naudojant dviratį ergometrą: 9 žingsniai (su nuotraukomis)

Įtampos generavimas naudojant ergometrinį dviratį: projektą parengė „žaidimas“, kurio tikslas buvo sukti pedalą prie ergometro dviračio, prijungto prie generatoriaus, ir lempų bokštas, kuris įjungiamas didėjant variklio sūkiams. dviratis
Naudokite „Palm“infraraudonųjų spindulių klaviatūrą su „Android“įrenginiais: 5 žingsniai

Naudokite „Palm“infraraudonųjų spindulių klaviatūrą su „Android“įrenginiais: aš sėdėjau prie „PalmOne“belaidės klaviatūros ir norėjau turėti „Bluetooth“klaviatūrą savo telefonui. Vienintelė problema buvo ta, kad „PalmOne“klaviatūra buvo pagrįsta infraraudonųjų spindulių ryšiu. Aš taip pat turėjau „Brainlink“įrenginį. Tai gana mielas prietaisas žiniasklaidai
Kaip pašalinti didelės skiriamosios gebos vaizdus iš instrukcijų: 4 veiksmai

Kaip pašalinti didelės skiriamosios gebos vaizdus iš instrukcijų: ar jums tikrai patiko ta pamokoma nuotrauka ir norite išsaugoti didelės skiriamosios gebos jos kopiją? Ši puiki maža savybė lengvai nepastebima