Indholdsfortegnelse:
- Trin 1: Krav til hardware og software
- Trin 2: STM32CubeMX -konfiguration
- Trin 3: Keil UVision -kodning
- Trin 4: Resultatet:)
Video: Servomotorstyring med STM32F4 ARM MCU: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Hej igen venner:) Så i dette projekt vil vi styre en servomotor med STM32F4 ARM MCU. I mit tilfælde vil jeg bruge discovery board, men hvis du forstår kernen i problemet, kan du anvende det på hver MCU. Så. Lad os komme igang:)
Trin 1: Krav til hardware og software
Med hensyn til hardware har vi brug for:
- En MCU, som i mit tilfælde er STM32f4 Discovery board
- En almindelig servomotor, som SG90 eller enhver anden
Med hensyn til software har vi brug for:
- STM32CubeMX
- Keil uVision
Hvis du har alle disse, skal du springe til næste trin:)
Trin 2: STM32CubeMX -konfiguration
Som du ved, har vi brug for PWM -signal til styring af en servomotor. Kravene med hensyn til PWM -signal er sådan:
- PWM -perioden skal være 20 mS
- Til tiden skal være mellem 0,5 mS til 2,5 mS. Når tiden er 0,5 mS, vil servoen dreje 0 grader, 1,5 mS for 90 grader og 2,5 mS for 180 grader.
Så vi skal konfigurere PWM, og til det formål vil vi bruge Timer1.
- Vælg først TIM1 fra sektionen Timere. Dette trin
-
Derefter fra tilstandsafsnittet
- Vælg Intern ur Dette trin
- PWM Generation CH1 Dette trin
-
Derefter fra konfigurationsafsnittet
- Indstil Prescaler til 160 Dette trin
- Indstil tællerperiode til 2000 Dette trin
- Indstil Pulse til 50 Dette trin
- Derudover indstillede APB1 Timer -ure fra urkonfiguration til 16MHz. Dette trin
Lad os nu tale lidt om dette trin:
Vores APB1 -timerurets frekvens er 16MHz. Så det betyder, at det kræves 16.000.000 flåter for at få 1 sekund. Vi indstiller imidlertid vores forkalkningsmaskine til 160. Det betyder, at vi dividerer vores frekvens med det tal og reducerede antallet af flåter til 100.000. Så i 1 sekund har vi brug for 100.000 flåter. Vi har imidlertid brug for 20 ms PWM -periode, som vi sagde tidligere. Så baseret på simpel matematik har vi brug for 2000 flåter til 20 ms. Så ved at indstille Tællerperiode til 2000 bestemmer vi perioden for PWM -signalet, som er 20mS. Nu skal vi bestemme krydsnummeret for at få On -tider fra 0,5 ms til 2,5 ms. Vi kan få denne ligning fra simpel matematik, og den er:
On_Time = (Tick_Number / 100). Husk, at dette er on_time, der ændrer vinklen på servomotoren. Så under billedet opsummerer jeg dette trin. Hvis du har spørgsmål, skriv i kommentarerne, og jeg svarer så hurtigt som muligt.
Billede af beregninger
Efter at have gjort alle disse genererer kode:)
Trin 3: Keil UVision -kodning
Så lad os først afgøre, hvad vi vil gøre? Vi vil skrive en funktion, der accepterer grad og skrive den til servoen. Så hvordan gør vi det? Som vi har sagt før, skal vi ændre til tiden for at ændre vinkel. Vores vinkler skifter mellem [0, 180] og vores antal flåter, der bestemmer tidsændringer mellem [50, 250]. Så vi har brug for en kortlægningsfunktion, der kortlægger en given vinkel til rækkevidde af flåter. For eksempel for 0 grader 50 flåter, for 180 grader 250 flåter og så videre … Så lad os skrive vores kortlægningsfunktion:
int map (int st1, int fn1, int st2, int fn2, int value) {return (1,0*(værdi-st1))/((fn1-st1)*1,0)*(fn2-st2)+st2; }
Dette er vores kortlægningsfunktion. Er du interesseret i, hvordan det stammer? Så læs det. Så vi tager vores intervaller og den værdi, vi vil kortlægge.
Lad os nu skrive en funktion, der accepterer vinkel og kortlægger den til flåter:
void servo_write (int vinkel) {htim1. Instance-> CCR1 = map (0, 180, 50, 250, vinkel); }
Som du kan se, accepterer denne kode vinkel og tilknytter den til antallet af flåter. Derefter gives antallet af flåter til CCR1 -registret, der styrer til -tiden og så vinkel.
Men for at alle disse kan fungere, starter vi først pwm, som kun kan udføres med en linje kode:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Så vi har en funktion, der accepterer vinkel og skriver den til servoen. Lad os teste det og skrive vores fejefunktion, som er meget let:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_forsinkelse (10); } for (int i = 180; i> = 0; i--) {servo_write (i); HAL_forsinkelse (10); }}
Så det tæller bare op til 180 og derefter ned til 0 og skriver disse værdier til servoen:) Så lad os se resultatet!
Trin 4: Resultatet:)
Så det er slutningen. Spørg hvis du har spørgsmål. Jeg vil være glad for at besvare dem. Mange tak for din læsning, og håber at vi ses i det næste projekt:)
Anbefalede:
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 trin
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
Arduino Tutorial - Servomotorstyring med joystick: 4 trin
Arduino Tutorial - Servomotorstyring med joystick: I denne vejledning lærer vi, hvordan du bruger servo med joystick. Vi styrer 1 stk servomotor med 1 joystick. Du kan implementere dine robotarmsprojekter med henvisning til denne vejledning. Selvfølgelig vil vi bruge eksternt batteri / strøm, når vi gør
Arduino Tutorial - Servomotorstyring med potentiometer: 5 trin
Arduino Tutorial - Servomotorstyring med potentiometer: Denne instruktive er den skriftlige version af mit " Arduino: Sådan styres servomotor med potentiometer " YouTube -video, som jeg har uploadet for nylig. Jeg anbefaler dig på det kraftigste at tjekke det ud. Besøg YouTube -kanalen
Arduino Tutorial - Servomotorstyring med Arduino: 5 trin
Arduino Tutorial - Servomotorstyring med Arduino: Denne instruktive er den skrevne version af min " Arduino: Sådan styres servomotor med Arduino " YouTube -video, som jeg har uploadet for nylig. Jeg anbefaler dig på det kraftigste at tjekke det ud. Besøg YouTube -kanalen
Hastighedskontrol af DC -motor ved hjælp af PID -algoritme (STM32F4): 8 trin (med billeder)
Hastighedskontrol af jævnstrømsmotor ved hjælp af PID -algoritme (STM32F4): hej alle sammen, dette er tahir ul haq med et andet projekt. Denne gang er det STM32F407 som MC. Dette er et afslutning på midt semester projekt. Håber du kan lide det. Det kræver mange begreber og teori, så vi går først ind på det. Med fremkomsten af computere og