Tartalomjegyzék:

Nagy felbontású PWM jelgenerálás RC szervókhoz STM32 eszközökkel: 3 lépés
Nagy felbontású PWM jelgenerálás RC szervókhoz STM32 eszközökkel: 3 lépés

Videó: Nagy felbontású PWM jelgenerálás RC szervókhoz STM32 eszközökkel: 3 lépés

Videó: Nagy felbontású PWM jelgenerálás RC szervókhoz STM32 eszközökkel: 3 lépés
Videó: Путешествие в глубины океана | Тихие вершины океанов 2024, November
Anonim
Nagy felbontású PWM jel generálás RC szervókhoz STM32 eszközökkel
Nagy felbontású PWM jel generálás RC szervókhoz STM32 eszközökkel
Nagy felbontású PWM jel generálás RC szervókhoz STM32 eszközökkel
Nagy felbontású PWM jel generálás RC szervókhoz STM32 eszközökkel
Nagy felbontású PWM jelgenerálás RC szervókhoz STM32 eszközökkel
Nagy felbontású PWM jelgenerálás RC szervókhoz STM32 eszközökkel

Jelenleg az SX1280 RF chip alapján RC adót/vevőt építek. A projekt egyik célja, hogy 12 bites szervo felbontást akarok a botoktól egészen a szervókig. Részben azért, mert a modern digitális szervók 12 bites felbontással rendelkeznek, másodsorban egy csúcskategóriás adó egyébként 12 bitet használ. Azt vizsgáltam, hogyan tudok nagy felbontású PWM jeleket generálni az STM32 eszközökön. Jelenleg fekete pirulát (STM32F103C8T8) használok a prototípushoz.

1. lépés: Alkatrészlista

Hardver

  • Bármilyen STM32F103 fejlesztőlap (kék pirula, fekete pirula stb.)
  • USB tápegység tápegységként
  • STM32 programozó (Segger j-links, ST-LINK/V2 vagy egyszerűen egy st-link klón)

Szoftver

  • STM32CubeMX
  • Atollic TrueSTUDIO az STM32 -hez
  • A projekt forrása a github

2. lépés: A nyilvánvaló megoldás

A Nyilvánvaló Megoldás
A Nyilvánvaló Megoldás
A Nyilvánvaló Megoldás
A Nyilvánvaló Megoldás
A Nyilvánvaló Megoldás
A Nyilvánvaló Megoldás

Valószínűleg a legegyszerűbb megoldás egy olyan időzítő használata, amely PWM jeleket képes generálni, mint például a TIM1-3 az STM32F103 készüléken. Egy modern digitális szervó esetében a képsebesség akár 5 ms -ra is csökkenhet, de egy régi analóg szervó esetében 20 ms vagy 50 Hz legyen. Tehát a legrosszabb esetben forgassuk meg ezt. A 72 MHz -es órajel és a 16 bites időzítő számláló felbontása esetén az időzítő előskálázóját minimum 23 -ra kell állítanunk, hogy lefedjük a 20 ms -os képsebességet. A 24 -et választottam, mert akkor 20 ms -ig pontosan 60000 -ra kell állítanom a számlálót. A képernyőképeken láthatja a CubeMX beállítást és a generált 1 és 1,5 ms -os PWM jeleket. Sajnos 1 ms -ra az időzítő számlálóját 3000 -re kell állítani, ami csak 11 bites felbontást eredményezne. Nem rossz, de a cél 12 bites volt, szóval próbáljunk ki valami mást.

Természetesen ha 32 bites időzítővel rendelkező mikrovezérlőt választanék, mint például az STM32L476, ez a felbontás sokkal magasabb lehet, és a probléma megoldódik.

De itt egy alternatív megoldást szeretnék javasolni, amely még az STM32F103 felbontását is tovább növeli.

3. lépés: Kaszkád időzítők a nagyobb felbontás érdekében

Kaszkád időzítők a nagyobb felbontás érdekében
Kaszkád időzítők a nagyobb felbontás érdekében
Kaszkád időzítők a nagyobb felbontás érdekében
Kaszkád időzítők a nagyobb felbontás érdekében
Kaszkád időzítők a nagyobb felbontás érdekében
Kaszkád időzítők a nagyobb felbontás érdekében

A korábbi megoldás fő problémája az, hogy a képkockasebesség (20 ms) viszonylag magas a ténylegesen generált PWM jelhez képest (1 és 2 ms között), ezért néhány értékes bitet pazarolunk a fennmaradó 18 ms -ra, amikor a következő keret. Ezt úgy lehet megoldani, hogy a szinkronizáláshoz az időzítő link funkciót használva lépcsőzetes időzítőket használunk.

Az elképzelés az, hogy a TIM1 -et fogom használni mesterként a képkockasebesség (20 ms) generálásához, a TIM2 -et, a TIM3 -at pedig, hogy szolgaként kezeljem a PWM jeleket. Amikor a mester aktiválja a slave -eket, azok csak egy impulzus üzemmódban generálnak PWM jelet. Ezért ezekben az időzítőkben csak 2 ms -ot kell lefednem. Szerencsére ezeket az időzítőket hardveresen lehet kaszkádolni, így ez a szinkronizálás nem igényel beavatkozást a processzortól, és nagyon pontos is, a jitter a ps régióban van. A képernyőképeken látható a CubeMX beállítása.

Amint láthatja, 3 -at választottam előrejelzőnek, így a 2 ms -hoz 48000 -t kell beállítanom az időzítő számlálójában. Ez 24000 -et ad 1 ms -ra, ami valójában több, mint amire szükségünk van a 14 bites felbontáshoz. Tadaaaa…

Kérjük, tekintse meg a bevezető oszcilloszkóp képernyőképeit a végeredmény érdekében. A 3. csatorna (lila) a mester időzítő megszakítása, amely a pulzusokat egy impulzus generálására fogja késztetni. Az 1. és 4. csatorna (sárga és zöld sugárzás) a különböző időzítők által generált tényleges PWM -jelek. Ne feledje, hogy szinkronban vannak, de a szélein vannak szinkronizálva, ez a 2. PWM mód miatt van. Ez nem jelent problémát, mert az adott szervó PWM aránya továbbra is helyes.

A megoldás további előnye, hogy a képsebesség megváltoztatása csak a TIM1 időszakának megváltoztatását jelenti. A modern digitális szervóknál akár 200-300 Hz-re is lemehet, de kérjük, olvassa el a szervó kézikönyvét, ha finomhangolást szeretne.

Ajánlott: