Innholdsfortegnelse:
- Trinn 1: Deleliste
- Trinn 2: Den åpenbare løsningen
- Trinn 3: Cascading -tidtakere for høyere oppløsning
Video: Høyoppløselig PWM -signalgenerering for RC -servoer med STM32 -enheter: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
For tiden bygger jeg en RC -sender/mottaker basert på SX1280 RF -brikken. Et av målene for prosjektet er at jeg vil ha 12 biters servooppløsning fra pinnene helt ned til servoene. Dels fordi moderne digitale servoer har 12 biters oppløsning, for det andre bruker en high-end sender 12 bits uansett. Jeg undersøkte hvordan jeg kan generere høyoppløselige PWM -signaler på STM32 -enheter. Jeg bruker svart pille (STM32F103C8T8) for øyeblikket for prototypen.
Trinn 1: Deleliste
Maskinvare
- Enhver STM32F103 utviklingstavle (blå pille, svart pille, etc.)
- En USB -strømbank som strømforsyning
- STM32 programmerer (Segger j-links, ST-LINK/V2, eller bare en st-link klon)
Programvare
- STM32CubeMX
- Atollic TrueSTUDIO for STM32
- Prosjektkilde fra github
Trinn 2: Den åpenbare løsningen
Sannsynligvis den enkleste løsningen er å bruke en av timeren som kan generere PWM-signaler, som TIM1-3 på en STM32F103. For en moderne digital servo kan bildefrekvensen gå ned til 5 ms eller så, men for en gammel analog servo bør den være 20 ms eller 50 Hz. Så, i verste fall, la oss generere det. Med 72 MHz -klokke og 16 -biters timer -oppløsning må vi stille timerenes forhåndskalkulator til minimum 23 for å dekke 20 ms bildefrekvensen. Jeg valgte 24 fordi jeg i 20 ms må sette telleren nøyaktig til 60000. Du kan se CubeMX -oppsettet og de genererte 1 og 1,5 ms PWM -signalene i skjermbildene. Dessverre, for 1 ms bør tidtelleren settes til 3000, noe som ville gi oss bare 11 biters oppløsning. Ikke verst, men målet var 12 bit, så la oss prøve noe annet.
Selvfølgelig Hvis jeg ville velge en mikrokontroller med 32 -biters timerteller, som STM32L476, kan denne oppløsningen være mye høyere og problemet ville bli løst.
Men her vil jeg foreslå en alternativ løsning som vil øke oppløsningen ytterligere selv på STM32F103.
Trinn 3: Cascading -tidtakere for høyere oppløsning
Hovedproblemet med forrige løsning er at bildefrekvensen (20 ms) er relativt høy sammenlignet med det faktisk genererte PWM -signalet (mellom 1 og 2 ms), så vi sløser med noen verdsatte biter for de resterende 18 ms når vi venter på neste ramme. Dette kan løses ved å kaskade timere ved hjelp av timerkoblingsfunksjonen for synkronisering.
Tanken er at jeg skal bruke TIM1 som master for å generere bildefrekvensen (20 ms) og TIM2, TIM3 for å takle PWM -signalene som slaver. Når masteren utløser slaver, genererer de bare et PWM -signal i en pulsmodus. Derfor trenger jeg bare å dekke 2 ms i disse timerne. Heldigvis kan du kaskade disse tidtakerne i maskinvare, slik at denne synkroniseringen ikke trenger inngrep fra prosessoren, og det er også veldig presist, jitteren er i ps -regionen. Du kan se CubeMX -oppsettet på skjermbildene.
Som du kan se valgte jeg 3 som prescalar, så for 2 ms må jeg sette 48000 i timertelleren. Dette gir oss 24000 for 1 ms som faktisk er mer det vi trenger for 14 biters oppløsning. Tadaaaa…
Ta en titt på oscilloskopets skjermbilder i introen for det endelige resultatet. Kanal 3 (lilla) er master -timers avbrudd som vil utløse salvene til å generere en puls. Kanal 1 og 4 (gul og grønn stråle) er de faktiske PWM -signalene som genereres av forskjellige tidtakere. Vær oppmerksom på at de er synkronisert, men de er synkronisert ved bakkantene, det er på grunn av PWM -modus 2. Dette er ikke et problem, fordi PWM -frekvensen for den aktuelle servoen fortsatt er korrekt.
Andre fordeler med denne løsningen er at å endre bildefrekvensen ville bety å endre perioden bare i TIM1. For moderne digitale servoer kan du gå ned til og med 200-300 Hz, men vennligst se servoens manual hvis du vil finjustere.
Anbefalt:
Kraftig digital vekselstrømdimmer med STM32: 15 trinn (med bilder)
Kraftig digital vekselstrømdimmer ved bruk av STM32: Av Hesam Moshiri, [email protected] -belastninger bor hos oss! Fordi de er overalt rundt oss og i det minste husholdningsapparater får strøm. Mange typer industrielt utstyr drives også med enfaset 220V-AC
Høyoppløselig webkamera: 9 trinn (med bilder)
Høyoppløselig webkamera: I noen år brukte jeg et RPi -basert webkamera (med PiCam -modulen). De produserte bildene var i orden, men da var det øyeblikket jeg ikke var fornøyd med kvaliteten lenger. Jeg bestemte meg for å lage et webkamera med høy oppløsning. Følgende deler med
OpenLogger: En høyoppløselig, Wi-Fi-aktivert, åpen kildekode, bærbar datalogger: 7 trinn
OpenLogger: En høyoppløselig, Wi-Fi-aktivert, åpen kildekode, bærbar datalogger: OpenLogger er en bærbar, åpen kildekode, lavpris, høyoppløselig datalogger designet for å levere høykvalitetsmålinger uten å kreve kostbar programvare eller skriveprogramvare fra bunnen av. Hvis du er ingeniør, vitenskapsmann eller entusiast som ikke
PWM Med ESP32 - Dimmende LED med PWM på ESP 32 Med Arduino IDE: 6 trinn
PWM Med ESP32 | Dimmende LED med PWM på ESP 32 Med Arduino IDE: I denne instruksen vil vi se hvordan du genererer PWM -signaler med ESP32 ved hjelp av Arduino IDE & PWM brukes i utgangspunktet til å generere analog utgang fra hvilken som helst MCU, og den analoge utgangen kan være alt mellom 0V til 3,3V (i tilfelle esp32) & fra
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer: 6 trinn (med bilder)
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer: Hei folkens, Dette er min første instruerbare, jeg håper du vil like det! I utgangspunktet har jeg i dette prosjektet brukt seriell kommunikasjon mellom min Arduino og min bærbare, for å overføre musikkdata fra min bærbare til Arduino. Og ved å bruke Arduino TIMERS t