Sisukord:

Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele STM32 -seadmetega: 3 sammu
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele STM32 -seadmetega: 3 sammu

Video: Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele STM32 -seadmetega: 3 sammu

Video: Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele STM32 -seadmetega: 3 sammu
Video: Videoregistraator (DVR) Bros B807I 2024, November
Anonim
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele koos STM32 -seadmetega
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele koos STM32 -seadmetega
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele koos STM32 -seadmetega
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele koos STM32 -seadmetega
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele koos STM32 -seadmetega
Kõrge eraldusvõimega PWM -signaali genereerimine RC -servodele koos STM32 -seadmetega

Praegu ehitan SX1280 RF -kiibil põhinevat RC -saatjat/vastuvõtjat. Üks projekti eesmärke on see, et soovin 12 -bitist servo eraldusvõimet pulgadest servodeni. Osaliselt seetõttu, et kaasaegsetel digitaalsetel servodel on 12-bitine eraldusvõime, teiseks kasutab tipptasemel saatja niikuinii 12 bitti. Uurisin, kuidas saaksin STM32 seadmetes genereerida kõrge eraldusvõimega PWM -signaale. Ma kasutan praegu prototüübi jaoks musta pille (STM32F103C8T8).

Samm: osade loend

Riistvara

  • Mis tahes STM32F103 arendusplaat (sinine pill, must pill jne)
  • Toiteallikana USB toitepank
  • STM32 programmeerija (Segger j-links, ST-LINK/V2 või lihtsalt st-link kloon)

Tarkvara

  • STM32CubeMX
  • Atollic TrueSTUDIO STM32 jaoks
  • Projekti allikas githubist

2. samm: ilmne lahendus

Ilmselge lahendus
Ilmselge lahendus
Ilmselge lahendus
Ilmselge lahendus
Ilmselge lahendus
Ilmselge lahendus

Tõenäoliselt on kõige lihtsam lahendus kasutada taimerit, mis võib genereerida PWM-signaale, näiteks TIM1-3 STM32F103-l. Kaasaegse digitaalse servo puhul võib kaadrisagedus langeda umbes 5 ms -ni, kuid vana analoogservo puhul peaks see olema 20 ms või 50 Hz. Nii et halvima stsenaariumina genereerime selle. 72 MHz kella ja 16 -bitise taimeriloenduri eraldusvõimega peame seadma taimerite eelseadistaja minimaalseks 23, et katta 20 ms kaadrisagedus. Valisin 24, sest siis pean 20 ms jooksul loenduri täpselt 60000 peale seadma. Ekraanipiltidel näete CubeMX seadistust ning genereeritud 1 ja 1,5 ms PWM signaale. Kahjuks tuleks 1 ms jaoks taimeriloendur seada 3000 -le, mis annaks meile ainult 11 -bitise eraldusvõime. Pole paha, aga eesmärk oli 12 bitine, seega proovime midagi muud.

Muidugi, kui valiksin 32 -bitise taimeriloenduriga mikrokontrolleri, nagu STM32L476, võib see eraldusvõime olla palju suurem ja probleem oleks lahendatud.

Kuid siin sooviksin pakkuda alternatiivset lahendust, mis suurendab isegi STM32F103 eraldusvõimet.

3. samm: kõrgema eraldusvõimega kaskaadtaimerid

Kaskaadtaimerid suurema eraldusvõime jaoks
Kaskaadtaimerid suurema eraldusvõime jaoks
Kaskaadtaimerid suurema eraldusvõime jaoks
Kaskaadtaimerid suurema eraldusvõime jaoks
Kaskaadtaimerid suurema eraldusvõime jaoks
Kaskaadtaimerid suurema eraldusvõime jaoks

Eelmise lahenduse põhiprobleem on see, et kaadrisagedus (20 ms) on tegelikult loodud PWM -signaaliga võrreldes suhteliselt kõrge (vahemikus 1 kuni 2 ms), seega raiskame oodatud bitti ülejäänud 18 ms jooksul järgmine kaader. Seda saab lahendada taimerite kaskaadiga, kasutades sünkroonimiseks taimerilingi funktsiooni.

Idee on selles, et kasutan kaadrisageduse (20 ms) genereerimiseks kaptenina TIM1 ja alluvana PWM -signaalidega toimetulemiseks TIM2, TIM3. Kui kapten käivitab orjad, genereerivad nad PWM -signaali ainult ühes impulssrežiimis. Seetõttu pean neil taimeritel katma ainult 2 ms. Õnneks saate neid taimerid riistvaras kaskaadida, nii et see sünkroonimine ei vaja protsessori sekkumist ja see on ka väga täpne, värin on ps -piirkonnas. CubeMX -i seadistusi näete ekraanipiltidel.

Nagu näete, valisin eelkalariks 3, nii et 2 ms jooksul pean ma taimeri loendurisse seadma 48000. See annab meile 1 ms jaoks 24000, mis on tegelikult rohkem, kui vajame 14 -bitise eraldusvõime jaoks. Tadaaaa…

Lõpptulemuse saamiseks vaadake sissejuhatuses olevaid ostsilloskoobi ekraanipilte. Kanal 3 (lilla) on peataimeri katkestus, mis käivitab salvid ühe impulsi. Kanal 1 ja 4 (kollane ja roheline valgusvihk) on erinevate taimerite genereeritud tegelikud PWM -signaalid. Pange tähele, et need on sünkroonis, kuid need on sünkroonitud lõpuservades, mis on tingitud PWM -režiimist 2. See ei ole probleem, sest konkreetse servo PWM -i määr on endiselt õige.

Selle lahenduse teine eelis on see, et kaadrisageduse muutmine tähendaks ainult TIM1 perioodi muutmist. Kaasaegsete digitaalsete servode puhul saate isegi 200–300 Hz, kuid peenhäälestuse saamiseks lugege palun servo käsiraamatut.

Soovitan: