Sisällysluettelo:

Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla: 3 vaihetta
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla: 3 vaihetta

Video: Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla: 3 vaihetta

Video: Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla: 3 vaihetta
Video: This chapter closes now, for the next one to begin. 🥂✨.#iitbombay #convocation 2024, Marraskuu
Anonim
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla
Korkean resoluution PWM -signaalin luominen RC -servoille STM32 -laitteilla

Rakennan tällä hetkellä SX1280 RF -siruun perustuvaa RC -lähetintä/vastaanotinta. Yksi projektin tavoitteista on, että haluan 12 -bittisen servotarkkuuden tikkuista aina servoihin asti. Osittain siksi, että nykyaikaisilla digitaalisilla servoilla on 12-bittinen resoluutio, toiseksi huippuluokan lähetin käyttää joka tapauksessa 12 bittiä. Tutkin, kuinka voin tuottaa korkean resoluution PWM -signaaleja STM32 -laitteille. Käytän prototyyppiä varten tällä hetkellä mustaa pilleriä (STM32F103C8T8).

Vaihe 1: Osaluettelo

Laitteisto

  • Mikä tahansa STM32F103 -kehityskortti (sininen pilleri, musta pilleri jne.)
  • USB -virtapankki virtalähteenä
  • STM32-ohjelmoija (Segger j-links, ST-LINK/V2 tai yksinkertaisesti st-link-klooni)

Ohjelmisto

  • STM32CubeMX
  • Atollic TrueSTUDIO STM32: lle
  • Projektin lähde githubista

Vaihe 2: Selvä ratkaisu

Ilmeinen ratkaisu
Ilmeinen ratkaisu
Ilmeinen ratkaisu
Ilmeinen ratkaisu
Ilmeinen ratkaisu
Ilmeinen ratkaisu

Luultavasti helpoin ratkaisu on käyttää yhtä ajastimesta, joka voi tuottaa PWM-signaaleja, kuten TIM1-3 STM32F103: ssa. Nykyaikaisen digitaalisen servon kuvataajuus voi laskea noin 5 ms: iin, mutta vanhan analogisen servon sen pitäisi olla 20 ms tai 50 Hz. Joten pahimmassa tapauksessa kehitämme sen. 72 MHz: n kellon ja 16 -bittisen ajastinlaskurin tarkkuuden vuoksi meidän on asetettava ajastimen esiasetin vähintään 23: een 20 ms: n kuvataajuuden kattamiseksi. Valitsin 24, koska sitten 20 ms: n ajan minun on asetettava laskuri täsmälleen 60000: een. Näet CubeMX -asetukset ja luodut 1 ja 1,5 ms PWM -signaalit kuvakaappauksissa. Valitettavasti 1 ms: n ajastinlaskurin tulisi olla 3000, mikä antaisi meille vain 11 -bittisen resoluution. Ei paha, mutta tavoite oli 12 -bittinen, joten kokeillaan jotain muuta.

Tietenkin Jos valitsisin mikro -ohjaimen, jossa on 32 -bittinen ajastinlaskuri, kuten STM32L476, tämä resoluutio voi olla paljon suurempi ja ongelma ratkaistaan.

Mutta tässä haluaisin ehdottaa vaihtoehtoista ratkaisua, joka lisää entisestään jopa STM32F103: n resoluutiota.

Vaihe 3: Cascading -ajastimet parempaa resoluutiota varten

Cascading -ajastimet parempaan resoluutioon
Cascading -ajastimet parempaan resoluutioon
Cascading -ajastimet parempaan resoluutioon
Cascading -ajastimet parempaan resoluutioon
Cascading -ajastimet parempaan resoluutioon
Cascading -ajastimet parempaan resoluutioon

Suurin ongelma edellisessä ratkaisussa on se, että kehysnopeus (20 ms) on suhteellisen korkea verrattuna todellisuudessa luotuun PWM -signaaliin (1-2 ms), joten tuhlaamme joitain arvokkaita bittejä jäljellä oleville 18 ms: lle odottaessamme seuraava kehys. Tämä voidaan ratkaista porrastamalla ajastimia käyttämällä ajastinlinkkiominaisuutta synkronointia varten.

Ajatuksena on, että käytän TIM1: tä isäntänä kehysnopeuden (20 ms) ja TIM2, TIM3 selviytymään PWM -signaaleista orjina. Kun isäntä laukaisee orjat, ne tuottavat vain PWM -signaalin yhdessä pulssitilassa. Siksi minun on katettava vain 2 ms näissä ajastimissa. Onneksi voit laskea nämä ajastimet laitteistoon, joten tämä synkronointi ei vaadi prosessorin väliintuloa ja se on myös erittäin tarkka, värinä on ps -alueella. Näet CubeMX -asetukset kuvakaappauksissa.

Kuten näette, valitsin esikalariksi 3, joten 2 ms: n ajan minun on asetettava 48000 ajastinlaskuriin. Tämä antaa meille 24000 1 ms, joka on itse asiassa enemmän mitä tarvitsemme 14 -bittiselle resoluutiolle. Tadaaaa…

Katso intro -oscilloskoopin kuvakaappaukset lopputuloksesta. Kanava 3 (violetti) on pääajastimen keskeytys, joka laukaisee salvat tuottamaan yhden pulssin. Kanava 1 ja 4 (keltainen ja vihreä säde) ovat eri ajastimien tuottamia todellisia PWM -signaaleja. Huomaa, että ne ovat synkronoituja, mutta ne synkronoidaan takareunoilla, mikä johtuu PWM -tilasta 2. Tämä ei ole ongelma, koska tietyn servon PWM -nopeus on edelleen oikea.

Tämän ratkaisun toinen etu on se, että kehysnopeuden muuttaminen merkitsisi vain TIM1 -ajanjakson muuttamista. Nykyaikaisilla digitaalisilla servoilla voit laskea jopa 200-300 Hz: iin, mutta tarkista servon käyttöopas, jos haluat hienosäätää.

Suositeltava: