Obsah:

Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32: 3 kroky
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32: 3 kroky

Video: Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32: 3 kroky

Video: Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32: 3 kroky
Video: Arduino návody | Dvojitý PWM generátor obdélníkového signálu 2024, Listopad
Anonim
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32
Generování signálu PWM s vysokým rozlišením pro RC serva se zařízeními STM32

V současné době stavím RC vysílač/přijímač na základě RF čipu SX1280. Jedním z cílů projektu je, že chci 12bitové rozlišení serva od páček až po serva. Částečně proto, že moderní digitální serva mají 12bitové rozlišení, zadruhé špičkový vysílač stejně používá 12 bitů. Zkoumal jsem, jak mohu na zařízeních STM32 generovat signály PWM s vysokým rozlišením. Pro prototyp momentálně používám černou pilulku (STM32F103C8T8).

Krok 1: Seznam dílů

Hardware

  • Jakákoli vývojová deska STM32F103 (modrá pilulka, černá pilulka atd.)
  • Powerbanka USB jako napájecí zdroj
  • Programátor STM32 (Segger j-links, ST-LINK/V2 nebo jednoduše klon st-link)

Software

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

Krok 2: Zjevné řešení

Zjevné řešení
Zjevné řešení
Zjevné řešení
Zjevné řešení
Zjevné řešení
Zjevné řešení

Pravděpodobně nejjednodušším řešením je použít jeden z časovačů, které mohou generovat signály PWM, jako TIM1-3 na STM32F103. U moderního digitálního serva může snímková frekvence klesnout přibližně na 5 ms, ale u starého analogového serva by to mělo být 20 ms nebo 50 Hz. V nejhorším případě to tedy vygenerujme. S rozlišením 72 MHz a 16bitovým čítačem časovače musíme nastavit časovač na minimum 23, aby pokryl snímkovou frekvenci 20 ms. Vybral jsem 24, protože pak po dobu 20 ms potřebuji nastavit čítač přesně na 60 000. Na obrázcích můžete vidět nastavení CubeMX a generované signály PWM 1 a 1,5 ms. Bohužel po dobu 1 ms by měl být čítač časovače nastaven na 3000, což by nám poskytlo pouze 11bitové rozlišení. Není to špatné, ale cíl byl 12 bitů, takže zkusme něco jiného.

Samozřejmě, pokud bych vybral mikrořadič s 32bitovým čítačem časovače, jako STM32L476, toto rozlišení může být mnohem vyšší a problém by byl vyřešen.

Zde bych však chtěl navrhnout alternativní řešení, které dále zvýší rozlišení i na STM32F103.

Krok 3: Kaskádové časovače pro vyšší rozlišení

Kaskádové časovače pro vyšší rozlišení
Kaskádové časovače pro vyšší rozlišení
Kaskádové časovače pro vyšší rozlišení
Kaskádové časovače pro vyšší rozlišení
Kaskádové časovače pro vyšší rozlišení
Kaskádové časovače pro vyšší rozlišení

Hlavním problémem předchozího řešení je, že obnovovací kmitočet (20 ms) je relativně vysoký ve srovnání se skutečně generovaným signálem PWM (mezi 1 a 2 ms), takže během zbývajících 18 ms plýtváme některými hodnotnými bity, když čekáme na další snímek. To lze vyřešit kaskádovými časovači pomocí funkce propojení časovače pro synchronizaci.

Myšlenka je taková, že použiji TIM1 jako master pro generování snímkové frekvence (20 ms) a TIM2, TIM3 pro zvládnutí signálů PWM jako podřízených. Když master spustí podřízené jednotky, generují signál PWM pouze v jednom pulzním režimu. Proto v těchto časovačích potřebuji pokrýt pouze 2 ms. Naštěstí můžete tyto časovače kaskádovat v hardwaru, takže tato synchronizace nevyžaduje žádný zásah procesoru a je také velmi přesná, chvění je v oblasti ps. Nastavení CubeMX můžete vidět na screenshotech.

Jak vidíte, vybral jsem 3 jako prescalar, takže na 2 ms potřebuji nastavit 48000 v čítači časovače. To nám dává 24 000 za 1 ms, což je ve skutečnosti více, co potřebujeme pro 14bitové rozlišení. Tadaaaa…

Pro konečný výsledek se prosím podívejte na screenshoty osciloskopu v úvodu. Kanál 3 (fialový) je přerušovač hlavního časovače, který spustí salvy a vygeneruje jeden puls. Kanál 1 a 4 (žlutý a zelený paprsek) jsou skutečné signály PWM generované různými časovači. Všimněte si, že jsou synchronizovány, ale jsou synchronizovány na zadních hranách, to je kvůli režimu PWM 2. To není problém, protože rychlost PWM pro konkrétní servo je stále správná.

Další výhodou tohoto řešení je, že změna snímkové frekvence by znamenala změnu období pouze v TIM1. U moderních digitálních serva můžete dosáhnout až 200-300 Hz, ale pokud chcete doladit, nahlédněte do manuálu k servu.

Doporučuje: