Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:03
Witam ponownie koledzy:) Tak więc w tym projekcie będziemy sterować serwomotorem za pomocą MCU STM32F4 ARM. W moim przypadku użyję tablicy wykrywania, ale jeśli zrozumiesz istotę problemu, możesz zastosować ją do każdego MCU. Więc. Zacznijmy:)
Krok 1: Wymagania sprzętowe i programowe
Pod względem sprzętowym będziemy potrzebować:
- MCU, którym jest w moim przypadku płyta Discovery STM32f4
- Zwykły silnik serwo, taki jak SG90 lub jakikolwiek inny
W zakresie oprogramowania będziemy potrzebować:
- STM32CubeMX
- Keil uVision
Jeśli masz to wszystko, przejdź do następnego kroku:)
Krok 2: Konfiguracja STM32CubeMX
Jak wiadomo do sterowania serwonapędem potrzebujemy sygnału PWM. Wymagania w zakresie sygnału PWM są takie:
- Okres PWM musi wynosić 20 mS
- Czas musi mieścić się w zakresie od 0,5 ms do 2,5 ms. Gdy czas wynosi 0,5 mS, serwo obróci się o 0 stopni, 1,5 mS na 90 stopni i 2,5 mS na 180 stopni.
Musimy więc skonfigurować PWM i do tego celu użyjemy Timera1.
- Najpierw wybierz TIM1 z sekcji Timery. Ten krok
-
Następnie z sekcji Tryb
- Wybierz zegar wewnętrzny w tym kroku
- Generacja PWM CH1 Ten krok
- Następnie z sekcji Konfiguracja
- Ustaw Prescaler na 160 Ten krok
- Ustaw okres licznika na 2000 Ten krok
- Ustaw tętno na 50 w tym kroku
- Dodatkowo w opcji Clock Configuration ustaw zegary APB1 Timer na 16MHz. Ten krok
Porozmawiajmy teraz trochę o tym kroku:
Częstotliwość zegara naszego timera APB1 wynosi 16 MHz. Oznacza to, że do uzyskania 1 sekundy wymagane jest 16 000 000 tyknięć. Ustawiliśmy jednak nasz preskaler na 160. Oznacza to, że dzielimy naszą częstotliwość przez tę liczbę i zmniejszamy liczbę tików do 100 000. Czyli na 1 sekundę potrzebujemy 100 000 tików. Potrzebujemy jednak 20mS okresu PWM, jak wspomnieliśmy wcześniej. Tak więc, bazując na prostej matematyce, potrzebujemy 2000 tików na 20ms. Tak więc ustawiając Counter Period na 2000 określamy okres sygnału PWM, który wynosi 20ms. Teraz musimy określić liczbę tików dla czasów włączenia od 0,5ms do 2,5ms. Możemy otrzymać to równanie z prostej matematyki i jest to:
On_Time = (Tick_Number / 100). Należy pamiętać, że jest to czas on_time, który zmienia kąt silnika serwo. Tak więc na poniższym obrazku podsumowuję ten krok. Jeśli masz jakieś pytanie napisz w komentarzach a odpowiem najszybciej jak to możliwe.
Obraz obliczeń
Po wykonaniu wszystkich tych czynności wygeneruj kod:)
Krok 3: Kodowanie Keil UVision
Więc najpierw ustalmy, co chcemy zrobić? Chcemy napisać funkcję przyjmującą stopień i zapisać ją do serwa. Jak więc to zrobimy? Jak powiedzieliśmy wcześniej, aby zmienić kąt, musimy zmienić na czas. Nasze kąty zmieniają się między [0, 180] a naszą liczbą tików, co określa zmiany w czasie między [50, 250]. Potrzebujemy więc funkcji mapującej, która odwzorowuje dany kąt na zakres liczby tików. Na przykład dla 0 stopni 50 tików, 180 stopni 250 tików i tak dalej… Napiszmy więc naszą funkcję mapującą:
int map(int st1, int fn1, int st2, int fn2, int value){ return (1.0*(value-st1))/((fn1-st1)*1.0) * (fn2-st2)+st2; }
To jest nasza funkcja mapowania. Czy interesuje Cię, jak to się wywodzi? Więc przeczytaj to. Tak więc bierzemy nasze zakresy i wartość, którą chcemy zmapować.
Napiszmy teraz funkcję, która przyjmuje kąt i odwzorowuje go na zakres tików:
void servo_write(int angle){ htim1. Instance->CCR1 = map(0, 180, 50, 250, angle); }
Jak widać, ten kod akceptuje kąt i odwzorowuje go na zakres liczby tików. Następnie liczba tików jest podawana do rejestru CCR1, który kontroluje czas i tym samym kąt.
Jednak, aby to wszystko zadziałało, najpierw uruchamiamy pwm, co można zrobić za pomocą jednej linii kodu:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
Mamy więc funkcję, która przyjmuje kąt i zapisuje go w serwomechanizmie. Przetestujmy to i napiszmy naszą funkcję przemiatania, która jest bardzo prosta:
void servo_sweep(void){ for(int i = 0; i <= 180; i++) { servo_write(i); HAL_Opóźnienie(10); } for(int i = 180; i>= 0; i--) { servo_write(i); HAL_Opóźnienie(10); } }
Więc po prostu policz do 180, a następnie do 0 i zapisz te wartości do serwa:) Zobaczmy więc wynik!
Krok 4: Wynik:)
To już koniec. Jeśli masz jakieś pytanie, zapytaj. Chętnie na nie odpowiem. Bardzo dziękuję za lekturę i mam nadzieję, że do zobaczenia w kolejnym projekcie:)
Zalecana:
Sterowanie prowadzone na całym świecie za pomocą Internetu za pomocą Arduino: 4 kroki
Sterowanie prowadzone na całym świecie za pomocą Internetu za pomocą Arduino: Cześć, jestem Rithik. Zamierzamy stworzyć kontrolowaną przez Internet diodę LED za pomocą telefonu. Będziemy używać oprogramowania takiego jak Arduino IDE i Blynk. Jest to proste i jeśli Ci się uda, możesz kontrolować tyle komponentów elektronicznych, ile chcesz Rzeczy, których potrzebujemy: Sprzęt:
Sterowanie jasnością Sterowanie diodami LED w oparciu o PWM za pomocą przycisków, Raspberry Pi i Scratch: 8 kroków (ze zdjęciami)
Kontrola jasności Sterowanie diodami LED w oparciu o PWM za pomocą przycisków, Raspberry Pi i Scratch: Próbowałem znaleźć sposób, aby wyjaśnić moim uczniom, jak działa PWM, więc wyznaczyłem sobie zadanie kontrolowania jasności diody LED za pomocą 2 przycisków - jeden przycisk zwiększający jasność diody LED a drugi ją przyciemniający. Aby zaprogramować
Arduino Tutorial - Sterowanie serwosilnikiem za pomocą potencjometru: 5 kroków
Arduino Tutorial - Sterowanie serwosilnikiem za pomocą potencjometru: Ta instrukcja jest pisemną wersją mojego „Arduino: jak sterować serwomotorem za pomocą potencjometru”. Film z YouTube, który niedawno przesłałem. Gorąco polecam to sprawdzić.Odwiedź kanał YouTube
Arduino Tutorial - Sterowanie serwosilnikiem za pomocą Arduino: 5 kroków
Arduino Tutorial - Sterowanie serwosilnikiem za pomocą Arduino: Ta instrukcja jest pisemną wersją mojego „Arduino: jak sterować serwosilnikiem za pomocą Arduino”. Film z YouTube, który niedawno przesłałem. Gorąco polecam to sprawdzić.Odwiedź kanał YouTube
Sterowanie prędkością silnika prądu stałego za pomocą algorytmu PID (STM32F4): 8 kroków (ze zdjęciami)
Kontrola prędkości silnika prądu stałego za pomocą algorytmu PID (STM32F4): witam wszystkich, To jest tahir ul haq z innym projektem. Tym razem jest to STM32F407 jako MC. To koniec projektu w połowie semestru. Mam nadzieję, że Ci się spodoba. Wymaga wielu koncepcji i teorii, więc najpierw zajmiemy się tym. Wraz z pojawieniem się komputerów i