Inhoudsopgave:
- Stap 1: Onderdelenlijst
- Stap 2: De voor de hand liggende oplossing
- Stap 3: Trapsgewijze timers voor hogere resolutie
Video: Hoge resolutie PWM-signaalgeneratie voor RC-servo's met STM32-apparaten - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Momenteel ben ik een RC-zender/ontvanger aan het bouwen op basis van de SX1280 RF-chip. Een van de doelen van het project is dat ik een 12-bits servoresolutie wil van de sticks helemaal tot aan de servo's. Deels omdat moderne digitale servo's een resolutie van 12 bits hebben, gebruikt een high-end zender sowieso 12 bits. Ik was aan het onderzoeken hoe ik PWM-signalen met hoge resolutie kan genereren op STM32-apparaten. Ik gebruik momenteel zwarte pil (STM32F103C8T8) voor het prototype.
Stap 1: Onderdelenlijst
Hardware
- Elk STM32F103-ontwikkelbord (blauwe pil, zwarte pil, enz.)
- Een USB powerbank als voeding
- STM32 programmeur (Segger j-links, ST-LINK/V2 of gewoon een st-link kloon)
Software
- STM32CubeMX
- Atollic TrueSTUDIO voor STM32
- Projectbron van github
Stap 2: De voor de hand liggende oplossing
De gemakkelijkste oplossing is waarschijnlijk om een van de timers te gebruiken die PWM-signalen kunnen genereren, zoals TIM1-3 op een STM32F103. Voor een moderne digitale servo kan de framesnelheid dalen tot 5 ms of zo, maar voor een oude analoge servo zou dit 20 ms of 50 Hz moeten zijn. Dus laten we als worstcasescenario dat genereren. Met een kloksnelheid van 72 MHz en een resolutie van 16 bit timer-teller moeten we de prescaler van de timer op minimaal 23 zetten om de framesnelheid van 20 ms te dekken. Ik heb 24 gekozen omdat ik dan voor 20 ms de teller precies op 60000 moet zetten. Je kunt de CubeMX-opstelling en de gegenereerde 1 en 1,5 ms PWM-signalen zien in de screenshots. Helaas moet de teller van de timer voor 1 ms worden ingesteld op 3000, wat ons slechts een resolutie van 11 bits zou geven. Niet slecht, maar het doelpunt was 12 bit, dus laten we iets anders proberen.
Als ik een microcontroller met 32 bit timer-teller zou kiezen, zoals STM32L476, kan deze resolutie natuurlijk veel hoger zijn en zou het probleem zijn opgelost.
Maar hier zou ik een alternatieve oplossing willen voorstellen die de resolutie verder zal verhogen, zelfs op de STM32F103.
Stap 3: Trapsgewijze timers voor hogere resolutie
Het grootste probleem met de vorige oplossing is dat de framesnelheid (20 ms) relatief hoog is in vergelijking met het daadwerkelijk gegenereerde PWM-signaal (tussen 1 en 2 ms), dus we verspillen enkele waardevolle bits voor de resterende 18 ms wanneer we wachten op het volgende kader. Dit kan worden opgelost door timers te laten cascaderen met behulp van de timer-link-functie voor synchronisatie.
Het idee is dat ik TIM1 als master gebruik om de framesnelheid (20 ms) te genereren en TIM2, TIM3 om de PWM-signalen als slaves te verwerken. Wanneer de master de slaves triggert, genereren ze slechts een PWM-signaal in één pulsmodus. Daarom hoef ik in die timers maar 2 ms af te dekken. Gelukkig kun je die timers in hardware cascaderen, zodat deze synchronisatie geen tussenkomst van de processor nodig heeft en het is ook heel precies, de jitter zit in de ps-regio. U kunt de CubeMX-opstelling zien op de schermafbeeldingen.
Zoals je kunt zien, heb ik 3 als prescalar geselecteerd, dus voor de 2 ms moet ik 48000 instellen in de teller van de timer. Dit geeft ons 24000 voor 1 ms, wat eigenlijk meer is wat we nodig hebben voor een resolutie van 14 bits. Tadaaa…
Bekijk de screenshots van de oscilloscoop in de intro voor het eindresultaat. Het kanaal 3 (paars) is de onderbreking van de mastertimer die de zalven zal triggeren om één puls te genereren. Kanaal 1 en 4 (gele en groene straal) zijn de eigenlijke PWM-signalen die door verschillende timers worden gegenereerd. Merk op dat ze gesynchroniseerd zijn, maar ze zijn gesynchroniseerd aan de achterranden, dat komt door de PWM-modus 2. Dit is geen probleem, omdat de PWM-snelheid voor de specifieke servo nog steeds correct is.
Een ander voordeel van deze oplossing is dat het wijzigen van de framesnelheid zou betekenen dat de periode alleen in TIM1 wordt gewijzigd. Voor moderne digitale servo's kun je zelfs tot 200-300 Hz gaan, maar raadpleeg de handleiding van de servo als je wilt finetunen.
Aanbevolen:
Webcam met hoge resolutie: 9 stappen (met afbeeldingen)
Hoge resolutie webcam: Ik heb enkele jaren een op RPi gebaseerde webcam gebruikt (met de PiCam-module). De geproduceerde beelden waren in orde, maar toen was er het moment waarop ik niet meer tevreden was met de kwaliteit. Ik besloot een webcam met hoge resolutie te maken. De volgende onderdelen w
VPN Premium-installatiegids voor DOWNLOAD MET HOGE SNELHEID en OKAY Streaming door REO: 10 stappen
VPN Premium-installatiegids voor HIGH SPEED DOWNLOAD en OKAY Streaming door REO: Bedankt, Asuswrt-MerlinHi, ik kom uit Thailand. Ik ga een gedetailleerde VPN-installatiegids schrijven voor een snelle download van gemiddeld ongeveer 100 Mb/s en misschien wel de meest vloeiende streaming voor Netflix, Crunchyroll, Hulu, enz. Uit Thailand, de bestemming
Idee voor doe-het-zelf-activiteit voor weerstations voor 12+ jaar: 4 stappen
Idee voor doe-het-zelf-weerstationactiviteit voor 12-plussers: in deze activiteit zullen deelnemers hun weerstation opzetten, de lucht in sturen en de opnames (licht, temperatuur, vochtigheid) in realtime volgen via de Blynk-app. Bovendien leert u hoe u de geregistreerde waarden publiceert
Afbeeldingen met hoge resolutie uit Instructables halen: 4 stappen
Hoe u afbeeldingen met een hoge resolutie uit Instructables haalt: Hebt u echt genoten van die instructable-afbeelding en wilt u er een kopie met hoge resolutie van opslaan? Deze geweldige kleine functie wordt gemakkelijk over het hoofd gezien
Luister naar uw muziek voor het werken in hoge geluidsniveaus: 16 stappen
Luister naar je deuntjes voor het werken in hoge geluidsniveaus.: Dit is mijn eerste crack in dit zo kaal met mij. Probleem: op het werk mogen we geen koptelefoon dragen en aangezien er een 100% gehoorbeschermingsregel is, is dit hoe ik het systeem verslaan. We mogen radio's maar we zijn in een stalen gebouw en ra