Innehållsförteckning:
- Steg 1: Krav på hårdvara och programvara
- Steg 2: STM32CubeMX -konfiguration
- Steg 3: Keil UVision -kodning
- Steg 4: Resultatet:)
Video: Servomotorstyrning med STM32F4 ARM MCU: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Hej igen kompisar:) Så i detta projekt kommer vi att styra en servomotor med STM32F4 ARM MCU. I mitt fall kommer jag att använda upptäcktskort, men om du förstår kärnan i problemet kan du använda det för varje MCU. Så. låt oss börja:)
Steg 1: Krav på hårdvara och programvara
När det gäller hårdvara behöver vi:
- En MCU som i mitt fall är STM32f4 Discovery board
- En vanlig servomotor, som SG90 eller någon annan
När det gäller programvara behöver vi:
- STM32CubeMX
- Keil uVision
Om du har alla dessa, hoppa till nästa steg:)
Steg 2: STM32CubeMX -konfiguration
Som du vet behöver vi PWM -signal för att styra en servomotor. Kraven när det gäller PWM -signal är så här:
- PWM -perioden måste vara 20 mS
- Tid måste vara mellan 0,5 mS till 2,5 mS. När tiden är 0,5 mS, kommer servon att vända 0 grader, 1,5 mS för 90 grader och 2,5 mS för 180 grader.
Så vi måste konfigurera PWM och för det ändamålet kommer vi att använda Timer1.
- Välj först TIM1 från avsnittet Timers. Detta steg
-
Sedan från lägesdelen
- Välj Intern klocka Detta steg
- PWM Generation CH1 Detta steg
-
Sedan från konfigurationsavsnittet
- Ställ Prescaler på 160 Detta steg
- Ställ in räknarperiod till 2000 Detta steg
- Ställ in pulsen på 50 Detta steg
- Från klockkonfiguration ställer du dessutom in APB1 Timer -klockor till 16MHz. Detta steg
Låt oss nu prata lite om detta steg:
Vår APB1 -timerurfrekvens är 16MHz. Så det betyder att det krävs 16 000 000 fästingar för att få 1 sekund. Vi ställer dock in vår förkalkning på 160. Det betyder att vi delar vår frekvens med det antalet och minskade antalet fästingar till 100 000. Så för 1 sekund behöver vi 100 000 fästingar. Vi behöver emellertid 20 ms PWM -period som vi sade tidigare. Så, baserat på enkel matematik, behöver vi 2000 fästingar för 20 ms. Så genom att ställa in Räkneperiod till 2000 bestämmer vi perioden för PWM -signalen som är 20mS. Nu måste vi bestämma bocknumret för att få på -tider från 0,5 ms till 2,5 ms. Vi kan få denna ekvation från enkel matematik och det är:
On_Time = (Tick_Number / 100). Tänk på att detta är on_time som ändrar vinkeln på servomotorn. Så under bilden sammanfattar jag detta steg. Om du har några frågor skriv i kommentarerna så svarar jag så snabbt som möjligt.
Bild på beräkningar
Efter att ha gjort alla dessa generera kod:)
Steg 3: Keil UVision -kodning
Så, låt oss först avgöra vad vi vill göra? Vi vill skriva en funktion som accepterar examen och skriva den till servon. Så hur ska vi göra det? Som vi har sagt tidigare, för att ändra vinkel måste vi ändra tid. Våra vinklar ändras mellan [0, 180] och vårt antal fästingar som avgör tidsändringar mellan [50, 250]. Så, vi behöver en kartläggningsfunktion som kartlägger en given vinkel till intervallet för antal fästingar. Till exempel för 0 grader 50 fästingar, för 180 grader 250 fästingar och så vidare … Så låt oss skriva vår kartfunktion:
int map (int st1, int fn1, int st2, int fn2, int value) {return (1.0*(value-st1))/((fn1-st1)*1.0)*(fn2-st2)+st2; }
Detta är vår kartfunktion. Är du intresserad av hur det härleds? Läs sedan det. Så vi tar våra intervall och det värde som vi vill kartlägga.
Låt oss nu skriva en funktion som accepterar vinkel och kartlägger den till fästingarna:
void servo_write (int vinkel) {htim1. Instance-> CCR1 = map (0, 180, 50, 250, vinkel); }
Som du kan se accepterar den här koden vinkel och kartlägger den till antalet fästingar. Därefter ges antalet fästingar till CCR1 -registret som styr på -tiden och så, vinkel.
Men för att alla dessa ska fungera startar vi först pwm som kan göras med bara en kodrad:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Så vi har en funktion som accepterar vinkel och skriver den till servon. Låt oss testa det och skriva vår svepfunktion som är väldigt lätt:
void servo_sweep (void) {för (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Fördröjning (10); } för (int i = 180; i> = 0; i--) {servo_write (i); HAL_Fördröjning (10); }}
Så det räknas bara upp till 180 och sedan ner till 0 och skriver dessa värden till servon:) Så, låt oss se resultatet!
Steg 4: Resultatet:)
Så det här är slutet. Om du har några frågor, fråga. Jag kommer att vara glad för att kunna svara på dem. Tack så mycket för att du läste och hoppas att vi ses i nästa projekt:)
Rekommenderad:
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 steg
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
Arduino -handledning - Servomotorstyrning med joystick: 4 steg
Arduino -handledning - Servomotorstyrning med joystick: I denna handledning lär vi oss hur du använder servo med joystick. Vi kommer att styra 1 st servomotor med 1 joystick. Du kan implementera dina robotarmsprojekt med hänvisning till denna handledning. Naturligtvis kommer vi att använda externt batteri / ström när vi gör
Arduino -handledning - Servomotorstyrning med potentiometer: 5 steg
Arduino -handledning - Servomotorstyrning med potentiometer: Denna instruerbara är den skriftliga versionen av min " Arduino: Hur man styr servomotor med potentiometer " YouTube -video som jag har laddat upp nyligen. Jag rekommenderar dig starkt att kolla in det. Besök YouTube -kanalen
Arduino -handledning - Servomotorstyrning med Arduino: 5 steg
Arduino -handledning - Servomotorstyrning med Arduino: Denna instruerbara är den skrivna versionen av min " Arduino: Hur man styr servomotorn med Arduino " YouTube -video som jag har laddat upp nyligen. Jag rekommenderar dig starkt att kolla in det. Besök YouTube -kanalen
Hastighetsreglering av likströmsmotor med PID -algoritm (STM32F4): 8 steg (med bilder)
Hastighetsreglering av likströmsmotor med PID -algoritm (STM32F4): hej alla, det här är ett annat projekt. Den här gången är det STM32F407 som MC. Detta är ett projekt i mitten av terminen. Hoppas du gillar det. Det kräver många koncept och teori så vi går in på det först. Med tillkomsten av datorer och