Obsah:

Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32: 3 kroky
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32: 3 kroky

Video: Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32: 3 kroky

Video: Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32: 3 kroky
Video: Основы горизонтально масштабируемых вычислений Джеймса Каффа 2024, Júl
Anonim
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32
Generovanie signálu PWM s vysokým rozlíšením pre RC serva so zariadeniami STM32

V súčasnej dobe staviam RC vysielač/prijímač na základe RF čipu SX1280. Jedným z cieľov projektu je, že chcem 12 -bitové rozlíšenie serva od páčok až po servá. Čiastočne preto, že moderné digitálne servá majú 12-bitové rozlíšenie, za druhé, špičkový vysielač aj tak používa 12 bitov. Skúmal som, ako môžem na zariadeniach STM32 generovať signály PWM s vysokým rozlíšením. Na prototyp momentálne používam čiernu pilulku (STM32F103C8T8).

Krok 1: Zoznam dielov

Hardvér

  • Akákoľvek vývojová doska STM32F103 (modrá pilulka, čierna pilulka atď.)
  • Napájacia banka USB ako napájací zdroj
  • Programátor STM32 (Segger j-links, ST-LINK/V2 alebo jednoducho klon st-link)

Softvér

  • STM32CubeMX
  • Atollic TrueSTUDIO pre STM32
  • Zdroj projektu z github

Krok 2: Zjavné riešenie

Zjavné riešenie
Zjavné riešenie
Zjavné riešenie
Zjavné riešenie
Zjavné riešenie
Zjavné riešenie

Pravdepodobne najľahším riešením je použiť jeden z časovačov, ktoré môžu generovať signály PWM, ako napríklad TIM1-3 na modeli STM32F103. V prípade moderného digitálneho serva môže snímková frekvencia klesnúť na 5 ms alebo menej, ale v prípade starého analógového serva by to malo byť 20 ms alebo 50 Hz. V najhoršom prípade to teda vygenerujme. Pri 72 MHz takte a 16 bitovom počítadle časovača musíme počítadlo časovača nastaviť na minimum 23, aby bolo možné pokryť snímkovú frekvenciu 20 ms. Vybral som 24, pretože potom na 20 ms potrebujem nastaviť počítadlo presne na 60 000. Nastavenie CubeMX a generované signály PWM 1 a 1,5 ms môžete vidieť na snímkach obrazovky. Bohužiaľ, na 1 ms by mal byť počítadlo časovača nastavené na 3000, čo by nám poskytlo iba 11 -bitové rozlíšenie. Nie je to zlé, ale cieľ bol 12 bitov, takže skúsme niečo iné.

Samozrejme, že ak by som vybral mikrořadič s 32 -bitovým počítadlom časovača, ako STM32L476, toto rozlíšenie môže byť oveľa vyššie a problém by bol vyriešený.

Ale tu by som chcel navrhnúť alternatívne riešenie, ktoré ešte viac zvýši rozlíšenie aj na STM32F103.

Krok 3: Kaskádové časovače pre vyššie rozlíšenie

Kaskádové časovače pre vyššie rozlíšenie
Kaskádové časovače pre vyššie rozlíšenie
Kaskádové časovače pre vyššie rozlíšenie
Kaskádové časovače pre vyššie rozlíšenie
Kaskádové časovače pre vyššie rozlíšenie
Kaskádové časovače pre vyššie rozlíšenie

Hlavným problémom predchádzajúceho riešenia je, že snímková frekvencia (20 ms) je relatívne vysoká v porovnaní so skutočne generovaným signálom PWM (medzi 1 až 2 ms), takže počas zvyšných 18 ms plytváme niektorými hodnotnými bitmi, keď čakáme na ďalší rám. To je možné vyriešiť kaskádovými časovačmi pomocou funkcie prepojenia časovača na synchronizáciu.

Ide o to, že použijem TIM1 ako master na generovanie snímkovej frekvencie (20 ms) a TIM2, TIM3 na vyrovnanie sa so signálmi PWM ako podriadené. Keď master spustí podriadené jednotky, generujú signál PWM iba v jednom impulznom režime. Preto v týchto časovačoch potrebujem pokryť iba 2 ms. Našťastie tieto časovače môžete kaskádovať v hardvéri, takže táto synchronizácia nevyžaduje žiadny zásah procesora a je tiež veľmi presná, chvenie je v oblasti ps. Nastavenie CubeMX môžete vidieť na snímkach obrazovky.

Ako vidíte, vybral som 3 ako predkalárne, takže na 2 ms musím v počítadle časovača nastaviť 48 000. To nám dáva 24 000 za 1 ms, čo je v skutočnosti viac, čo potrebujeme pre 14 -bitové rozlíšenie. Tadaaaa…

Pozrite sa na screenshoty osciloskopu v úvode, kde nájdete konečný výsledok. Kanál 3 (fialový) je prerušením hlavného časovača, ktoré spustí salvy na generovanie jedného impulzu. Kanál 1 a 4 (žltý a zelený lúč) sú skutočné signály PWM generované rôznymi časovačmi. Všimnite si toho, že sú synchronizované, ale sú synchronizované na zadných okrajoch, to je kvôli režimu PWM 2. To nie je problém, pretože rýchlosť PWM pre konkrétne servo je stále správna.

Ďalšou výhodou tohto riešenia je, že zmena snímkovej frekvencie by znamenala zmenu obdobia iba v TIM1. Pri moderných digitálnych servách môžete dosiahnuť až 200-300 Hz, ale ak chcete doladiť, prečítajte si príručku k servu.

Odporúča: