Sterowanie servo za pomocą PWM - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Silniki, Mechanika i Zasilanie (https://forum.arduinopolska.pl/dzial-silniki-mechanika-i-zasilanie) +--- Wątek: Sterowanie servo za pomocą PWM (/watek-sterowanie-servo-za-pomoc%C4%85-pwm) |
Sterowanie servo za pomocą PWM - makuban - 18-12-2023 Witam, pracuję nad oprogramowaniem do sterowania serwomechanizmem pozycyjnym za pomocą PWM. Według teorii w celu ustawienia servo na danej pozycji należy wygenerować impuls prostokątny o łącznym czasie trwania jednego impulsu 20ms i w zależności od kąta obrotu poziom wysoki powinien trwać odpowiednio: - dla 0[stopni] - 1ms, - dla 90[stopni] - 1,5ms, - dla 180[stopni] - 2ms. Problem pojawia się, że dla wyżej wyznaczonych czasów servo ustawia się na innych pozycjach odpowiednio: - dla 1ms - 45[stopni], - dla 1,5ms - 90[stopni], - dla 2ms - 125[stopni]. Oczywiście metodą prób i błędów jestem w stanie tak dobrać czas trwania impulsu aby servo pracowało w pełnym zakresie 0-180[stopni] ale chciałbym usłyszeć opinię bardziej doświadczonych osób co o tym sądzą. Poniżej fragment kodu: Kod: void setup() RE: Sterowanie servo za pomocą PWM - oscarX - 18-12-2023 (18-12-2023, 20:30)makuban napisał(a): Poniżej fragment kodu: W jakim celu na końcu for-a jest to delay(10), przecież to się po prostu dodaje do poprzedniego delayMicroseconds i razem zamiast 20ms okresu masz 30, stąd wypełnienie jest mniejsze. Nie wiem czy serwa reagują na samą długość impulsu, czy na współczynnik wypełnienia. Na pewno na impulsy o istotnie innej częstotliwości mogą w ogóle nie zareagować. Po drugie - te impulsu mają przychodzić cały czas, nie tylko w czasie zmiany pozycji. Serwo ciągle porównuje impulsy wejściowe z położeniem i dokonuje korekty jeśli coś się poruszy. Przypuszczam, że gdy brakuje impulsów silnik zostaje odłączony i nie ma aktywnego ustawiana pozycji. RE: Sterowanie servo za pomocą PWM - kaczakat - 19-12-2023 Jak nie robisz z tego doktoratu to w Arduino są do tego gotowe funkcje biblioteki, każdy timer ma dedykowane piny do PWM. Delayami nie ustawisz dokładnie czasu, bo to jest funkcja, której wywołanie też coś trwa, a po to są timery z PWM by robić to "w tle" niezależnie od tego co robi się w programie. http://akademia.nettigo.pl/serwomechanizm/ |