
Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-23 15:01


Hallo weer vrienden:) Dus in dit project zullen we een servomotor besturen met STM32F4 ARM MCU. In mijn geval zal ik het ontdekkingsbord gebruiken, maar als je de kern van het probleem begrijpt, kun je het voor elke MCU toepassen. Dus. laten we beginnen:)
Stap 1: Hardware- en softwarevereisten
Qua hardware hebben we nodig:
- Een MCU die in mijn geval STM32f4 Discovery board is
- Een gewone servomotor, zoals SG90 of een andere;
Qua software hebben we nodig:
- STM32CubeMX
- Keil uVision
Als je al deze hebt, ga dan naar de volgende stap:)
Stap 2: STM32CubeMX-configuratie
Zoals u weet, hebben we voor het aansturen van een servomotor een PWM-signaal nodig. De vereisten in termen van PWM-signaal zijn als volgt:
- PWM-periode moet 20 mS. zijn
- De aan-tijd moet tussen 0,5 mS en 2,5 mS liggen. Wanneer op tijd 0,5 mS is, dan draait de servo 0 graden, 1,5 mS voor 90 graden en 2,5 mS voor 180 graden.
We moeten dus PWM configureren en daarvoor zullen we Timer1 gebruiken.
- Selecteer eerst TIM1 in het gedeelte Timers. Deze stap
-
Vervolgens, vanuit het gedeelte Modus
- Kies Interne Klok Deze stap
- PWM Generatie CH1 Deze stap:
-
Vervolgens, vanuit het gedeelte Configuratie
- Stel Prescaler in op 160 Deze stap
- Stel Tellerperiode in op 2000 Deze stap
- Stel Puls in op 50 Deze stap
- Bovendien stelt u vanuit Clock Configuration de APB1 Timer-klokken in op 16 MHz. Deze stap
Laten we het nu eens hebben over deze stap:
De frequentie van onze APB1 Timer-klok is 16 MHz. Het betekent dus dat er 16, 000, 000 ticks nodig zijn om 1 seconde te krijgen. We hebben onze prescaler echter ingesteld op 160. Het betekent dat we onze frequentie door dat aantal delen en het aantal tikken hebben verlaagd tot 100.000. Dus voor 1 seconde hebben we 100.000 tikken nodig. We hebben echter 20 mS PWM-periode nodig, zoals we eerder hebben vermeld. Dus, op basis van eenvoudige wiskunde, hebben we 2000 ticks nodig voor 20 mS. Dus door Tellerperiode in te stellen op 2000, bepalen we de periode van het PWM-signaal dat 20 mS is. Nu moeten we het tick-nummer bepalen om Aan-tijden van 0,5 mS tot 2,5 mS te krijgen. We kunnen deze vergelijking uit eenvoudige wiskunde halen en het is:
On_Time = (Tick_Number / 100). Houd er rekening mee dat dit de aan_tijd is die de hoek van de servomotor verandert. Dus onderstaande afbeelding vat ik deze stap samen. Als je een vraag hebt, schrijf dan in de comments en ik zal zo snel mogelijk antwoorden.
Afbeelding van berekeningen
Na het doen van al deze genereer code:)
Stap 3: Keil UVision-codering
Laten we dus eerst bepalen wat we willen doen? We willen een functie schrijven die graad accepteert en deze naar de servo schrijven. Dus, hoe gaan we dat doen? Zoals we eerder hebben gezegd, moeten we de hoek op tijd veranderen om van hoek te veranderen. Onze hoeken veranderen tussen [0, 180] en ons aantal tikken dat bepalend is voor de tijdsveranderingen tussen [50, 250]. We hebben dus een mapping-functie nodig die een gegeven hoek toewijst aan het bereik van het aantal tikken. Bijvoorbeeld, voor 0 graden 50 ticks, voor 180 graden 250 ticks enzovoort… Laten we dus onze mapping functie schrijven:
int map(int st1, int fn1, int st2, int fn2, int waarde){ return (1,0*(value-st1))/((fn1-st1)*1,0) * (fn2-st2)+st2; }
Dit is onze mappingfunctie. Ben je geïnteresseerd hoe het is afgeleid? Lees dat dan. We nemen dus onze bereiken en de waarde die we in kaart willen brengen.
Laten we nu een functie schrijven die de hoek accepteert en deze toewijst aan het bereik van teken:
void servo_write (int hoek) {htim1. Instance-> CCR1 = kaart (0, 180, 50, 250, hoek); }
Zoals u kunt zien, accepteert deze code de hoek en wijst deze toe aan het bereik van het aantal teken. Vervolgens wordt het aantal tikken gegeven aan het CCR1-register dat de op tijd en dus de hoek regelt.
Om deze allemaal te laten werken, starten we echter eerst de pwm, wat kan worden gedaan met slechts een regel code:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
We hebben dus een functie die de hoek accepteert en deze naar de servo schrijft. Laten we het testen en onze sweep-functie schrijven, wat heel eenvoudig is:
void servo_sweep(void){ for(int i = 0; i <= 180; i++) { servo_write(i); HAL_Vertraging(10); } for(int i = 180; i>= 0; i--) { servo_write(i); HAL_Vertraging(10); } }
Dus, het telt gewoon tot 180 en dan omlaag naar 0 en schrijft deze waarden naar de servo:) Dus, laten we eens kijken naar het resultaat!
Stap 4: Het resultaat:)
Dit is dus het einde. Als u een vraag heeft, stel deze dan alstublieft. Ik zal ze graag beantwoorden. Heel erg bedankt voor het lezen en ik hoop je te zien in het volgende project:)
Aanbevolen:
Huishoudelijke apparaten bedienen met Node MCU en Google Assistant - IOT - Blynk - IFTTT: 8 stappen

Huishoudelijke apparaten bedienen met Node MCU en Google Assistant | IOT | Blynk | IFTTT: een eenvoudig project om apparaten te bedienen met Google Assistant: Waarschuwing: omgaan met netstroom kan gevaarlijk zijn. Met uiterste zorg behandelen. Huur een professionele elektricien in tijdens het werken met open circuits. Ik neem geen verantwoordelijkheden voor de da
STM32F4 Discovery Board en Python USART-communicatie (STM32CubeMx): 5 stappen

STM32F4 Discovery Board en Python USART-communicatie (STM32CubeMx): Hallo! In deze tutorial zullen we proberen om USART-communicatie tot stand te brengen tussen STM32F4 ARM MCU en Python (deze kan worden vervangen door elke andere taal). Dus laten we beginnen:)
KRACHTIGE Wi-Fi REPEATER (NODE-MCU): 7 stappen (met afbeeldingen)

KRACHTIGE Wi-Fi REPEATER (NODE-MCU): Geselecteerd !! voor de wedstrijd stem alsjeblieft als je houdt van !!!!;LAAG WiFi-SIGNAAL Veel mensen die dagelijks met dit probleem worden geconfronteerd, kunnen we niet op hoge snelheid internetten als het signaal te laag is, alles heeft internet nodig. Smart TV, Smart Phone, Laptop, Desktop ComputerB
Node MCU met 4-poorts relaismodule, Blynk-app, IFTTT en Google Home. Winst?: 5 stappen

Node MCU met 4-poorts relaismodule, Blynk-app, IFTTT en Google Home. Winst?: Dit bericht gaat helemaal over hoe je Google Home kunt verbinden met NodeMCU en de blynk-app, je kunt je apparaten bedienen met een eenvoudige blynk-gestuurde NodeMCU-schakelaar en Google Assistant. Dus laten we gaan, Ok Google. Zet ding aan
Veel schakelaars lezen met één MCU-pin: 4 stappen

Hoe lees je veel schakelaars met één MCU-pin: Ben je ooit bezig geweest met een project (en) en het project blijft groeien en groeien, terwijl je er meer dingen aan toevoegt (we noemen dat een Feaping Creaturism)? Bij een recent project was ik een frequentiemeter aan het bouwen en voegde een vijf-functie toe