INHOUDSOPGAWE:
- Stap 1: Onderdele lys
- Stap 2: Die voor die hand liggende oplossing
- Stap 3: Timers waterval vir hoër resolusie
Video: PWM -seinopwekking met hoë resolusie vir RC -servo's met STM32 -toestelle: 3 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Tans bou ek 'n RC -sender/ontvanger gebaseer op die SX1280 RF -chip. Een van die doelwitte vir die projek is dat ek 'n 12 -bits servo -resolusie van die stokkies tot by die servo's wil hê. Deels omdat moderne digitale servo's 'n resolusie van 12 bis het, tweedens gebruik 'n hoë-end sender 12 bits. Ek het ondersoek ingestel na hoe ek PWM -seine met 'n hoë resolusie op STM32 -toestelle kan genereer. Ek gebruik tans 'n swart pil (STM32F103C8T8) vir die prototipe.
Stap 1: Onderdele lys
Hardeware
- Enige ontwikkelingsbord van STM32F103 (blou pil, swart pil, ens.)
- 'N USB -kragbank as kragbron
- STM32 programmeerder (Segger j-links, ST-LINK/V2, of bloot 'n st-link kloon)
Sagteware
- STM32CubeMX
- Atollic TrueSTUDIO vir STM32
- Projekbron van github
Stap 2: Die voor die hand liggende oplossing
Die maklikste oplossing is waarskynlik om een van die timer te gebruik wat PWM-seine kan genereer, soos TIM1-3 op 'n STM32F103. Vir 'n moderne digitale servo kan die raamtempo tot 5 ms daal, maar vir 'n ou analoog servo behoort dit 20 ms of 50 Hz te wees. Dus, as 'n ergste geval, laat ons dit genereer. Met 'n 72 MHz -horlosie en 'n 16 -bit timer -teenresolusie moet ons die voorafkalker van die timer op minimum 23 stel om die raamkoers van 20 ms te dek. Ek het 24 gekies, want dan moet ek die teller vir 20 ms presies op 60000 stel. U kan die CubeMX -opstelling en die gegenereerde 1 en 1,5 ms PWM -seine in die skermkiekies sien. Ongelukkig moet die tydteller vir 1 ms op 3000 gestel word, wat ons slegs 'n resolusie van 11 bit sou gee. Nie sleg nie, maar die doel was 12 bit, so laat ons iets anders probeer.
Natuurlik, as ek 'n mikrobeheerder met 'n 32 -bits timer -teller sou kies, soos STM32L476, kan hierdie resolusie baie hoër wees en die probleem sal opgelos word.
Maar hier wil ek 'n alternatiewe oplossing voorstel wat die resolusie selfs op die STM32F103 verder sal verhoog.
Stap 3: Timers waterval vir hoër resolusie
Die grootste probleem met die vorige oplossing is dat die raamtempo (20 ms) relatief hoog is in vergelyking met die eintlik gegenereerde PWM -sein (tussen 1 en 2 ms), so ons mors 'n paar gewaardeerde stukkies vir die oorblywende 18 ms as ons wag die volgende raam. Dit kan opgelos word deur timers wat deurloop, met behulp van die timer -skakelfunksie vir sinchronisasie.
Die idee is dat ek TIM1 as meester sal gebruik om die raamtempo (20 ms) en TIM2, TIM3 te genereer om die PWM -seine as slawe te hanteer. As die meester die slawe aktiveer, genereer hulle slegs 'n PWM -sein in een polsmodus. Daarom hoef ek slegs 2 ms in hierdie tydsberekeninge te dek. Gelukkig kan u die tydmeters in hardeware onderbreek, sodat hierdie sinchronisasie geen ingryping van die verwerker benodig nie, en dit is ook baie presies; die jitter is in die ps -gebied. U kan die CubeMX -opstelling op die skermkiekies sien.
Soos u kan sien, het ek 3 gekies as prescalar, dus vir die 2 ms moet ek 48000 in die timer se teller stel. Dit gee ons 24000 vir 1 ms, wat eintlik meer is wat ons nodig het vir 'n resolusie van 14 bis. Tadaaaa…
Kyk na die skermkiekies van die ossilloskoop in die inleiding vir die finale uitslag. Die kanaal 3 (pers) is die onderbreking van die meester -tydteller wat die slawe sal veroorsaak om een pols te genereer. Kanaal 1 en 4 (geel en groen balk) is die werklike PWM -seine wat deur verskillende tydtellers gegenereer word. Let op dat hulle gesinkroniseer is, maar dat hulle aan die agterkant gesinkroniseer word, dit is as gevolg van die PWM -modus 2. Dit is nie 'n probleem nie, want die PWM -koers vir die betrokke servo is steeds korrek.
'N Ander voordeel van hierdie oplossing is dat die verandering van die raamkoers slegs beteken dat die tydperk in TIM1 verander word. Vir moderne digitale servo's kan u tot 200-300 Hz daal, maar raadpleeg die handleiding van die servo as u wil verfyn.
Aanbeveel:
Teller met hoë resolusie: 5 stappe (met foto's)
Teller met hoë resolusie: hierdie instruksies toon 'n wederkerige frekwensieteller wat frekwensies vinnig en met redelike presisie kan meet. Dit is gemaak met standaardkomponente en kan binne 'n naweek gemaak word (dit het my 'n bietjie langer geneem :-)) EDIT: Die kode is nou beskikbaar
Webkamera met hoë resolusie: 9 stappe (met foto's)
Webkamera met hoë resolusie: Ek het 'n paar jaar lank 'n RPi -webkamera gebruik (met die PiCam -module). Die vervaardigde beelde was goed, maar dan was daar die oomblik dat ek nie meer tevrede was met die kwaliteit nie. Ek het besluit om 'n webkamera met 'n hoë resolusie te maak. Die volgende dele w
OpenLogger: 'n hoë resolusie, Wi-Fi geaktiveer, open source, draagbare datalogger: 7 stappe
OpenLogger: 'n hoë-resolusie, Wi-Fi-aangeskakel, open source, draagbare datalogger: OpenLogger is 'n draagbare, open source, goedkoop, hoë-resolusie datalogger wat ontwerp is om metings van hoë gehalte te lewer sonder dat dit duur sagteware of skryfprogrammatuur benodig van die begin af. As u 'n ingenieur, wetenskaplike of entoesias is wat nie
Hoe om 'n hoë krag LED -koplamp vir die fiets te maak: 4 stappe (met foto's)
Hoe om 'n hoë krag LED -koplamp vir 'n fiets te maak: dit is altyd gerieflik om 'n helder lig te hê terwyl u snags fietsry vir duidelike visie en veiligheid. Dit waarsku ook ander in donker plekke en vermy ongelukke. So in hierdie instruksies sal ek demonstreer hoe u 'n 100 watt LED p bou en installeer
Hoe om hoë resolusie -beelde uit instruksies te haal: 4 stappe
Hoe om hoë resolusie -beelde uit die instruksies te haal: Het u die instruksionele prentjie regtig geniet en wil u 'n kopie daarvan met 'n hoë resolusie stoor? Hierdie wonderlike funksie word maklik oor die hoof gesien