Skocz do zawartości

Problem z drżącymi serwami


KN17

Pomocna odpowiedź

Witam.

Od jakiegoś czasu buduję czworonożnego robota kroczącego. Zaopatrzyłem się we wszystkie niezbędne elementy, zmontowałem jedną nogę robota i zabrałem się za testowanie jej ruchu. Niestety, cały czas zmagam się z problemem nieustannie występujących drgań.

Korzystam z Arduino Mega 2560, do którego podłączone są na razie trzy serwa PowerHD AR-1201MG(http://botland.com.pl/serwa-powerhd/3508-serwo-powerhd-ar-1201mg-standard.html). Zasilanie idzie z akumulatora LiPol Redox 3300mAh 7,4V(http://botland.com.pl/pakiety-li-pol-2-celowe-74v-redox/1700-pakiet-lipol-redox-3300mah-30c-2s-74v.html), które jest przetwarzane na napięcie 6V.

Przy teście korzystałem z samodzielnie napisanego programu, a także ze zwykłego programu "sweep" z biblioteki Arduino. W obu przypadkach noga drży podczas wykonywania ruchu. Wcześniej używałem serw PowerHD HD-6001HB (plastikowe zębatki)(http://botland.com.pl/serwa-typu-standard/2311-serwo-powerhd-hd-6001hb-standard.html i ruch był bardzo płynny, lecz niestety, serwa się "rozwaliły" podczas testowania szybszego ruchu.

Czy macie może pomysł, jak poradzić sobie z tym problemem? Niepokoi mnie to, ponieważ wszystkie roboty, jakie widziałem, wykonują płynne ruchy.

Link do komentarza
Share on other sites

Serwa są zasilane przez przetwornicę 5A ustawioną na 6V. Arduino na razie z USB z komputera. Kondensatory na razie próbowałem 10uF na wejściu i wyjściu przetwornicy.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Użyłem bardziej pojemnych kondensatorów (470uF, zgodnie z poradą), lecz niestety, nie zaobserwowałem żadnej poprawy. Nie próbowałem jeszcze niczego z regulacją częstotliwości PWM, bo szczerze mówiąc, nie wiem jak to zrobić, aby było dobrze :/ Mógłbyś bardziej szczegółowo opisać, co i jak to zrobić? Byłbym wdzięczny.

Mechano, masy są zwarte prawidłowo.

Link do komentarza
Share on other sites

KN17, nigdy się w to nie bawilem, bo ogólnie mało programuję, ale "mój" informatyk to zasugerował. Spróbuj po prostu googlać hasło "arduino pwm frequency", na pewno coś znajdziesz (ja już natknąłem się na jakieś filmiki na samej górze wyników, ale nie wiem czy są dobre, więc sam obadaj)

Link do komentarza
Share on other sites

Jeśli używasz biblioteki Servo z Arduino, to nie używa ona PWM, tylko timera z przerwaniem i nie da się w niej zmienić częstotliwości bez modyfikacji kodu biblioteki. Co zresztą nie powinno być wymagane, bo każde serwo powinno sobie dawać radę z 50Hz które są tam domyślnie.

Powszechnymi przyczynami drżenia serwa mogą być:

* zbyt mały prąd zasilania, na przykład przy zasilaniu go przez płytkę arduino albo z baterii,
* zbyt duża bezwładność obiektu, którym serwo macha -- wtedy PID nie daje rady,
* zakłócenia w zasilaniu lub sygnale,
* uszkodzone serwo.

Z doświadczenia, w 90% przypadków jest to problem z zasilaniem.

Link do komentarza
Share on other sites

Sprawdzałem ruch nogi przy dużych skokach sygnału PWM (np. z 1000 do 2000 mikrosekund) i wszystkie trzy serwa poruszały się płynnie utrzymując początkową i końcową pozycję. W momencie gdy puściłem serwa w pętli dużo gęściej zmieniającej pozycję, to ruch nogi ponownie stał się szarpany. Następnie zmieniłem program sterujący serwami tak, aby nie wykorzystywać biblioteki "". Program steruje tylko za pomocą zmiany czasu trwania poziomu wysokiego na pinach cyfrowych.

int a;
int b = 20;
void setup()
{
 pinMode(4, OUTPUT);      // sets the digital pin as output
 pinMode(8, OUTPUT);      // sets the digital pin as output
 pinMode(12, OUTPUT);      // sets the digital pin as output

}

void loop() {

for (a = 1000; a <= 2000; a += 50) { 
   digitalWrite(4, HIGH);
   digitalWrite(8, HIGH);
   digitalWrite(12, HIGH);
   delayMicroseconds(a);                  
   digitalWrite(4, LOW);
   digitalWrite(8, LOW);
   digitalWrite(12, LOW); 
   delay(b);
 }
 delay(2000);
 for (a = 2000; a >= 1000; a -= 50) { 
   digitalWrite(4, HIGH);
   digitalWrite(8, HIGH);
   digitalWrite(12, HIGH);
   delayMicroseconds(a);                  
   digitalWrite(4, LOW);
   digitalWrite(8, LOW);
   digitalWrite(12, LOW);

  delay(b);       
 }
 delay(2000);
}

Przy zachowaniu wartości a na poziomie 50 i b równe 20 ruch pozostaje w miarę płynny. Zmniejszenie a bądź zwiększenie b powoduje, że noga znowu zaczyna szarpać.

Link do komentarza
Share on other sites

Jak wiadomo bezwładność jest związana z masą spoczynkową a ta jest od dawna zastępowana kilkoma rezystorami 10k (rozwiązanie sprzętowe), dwoma prostymi pętlami for (wersja dla programistów) lub kilkoma Joule'ami energii (dla fanatyków Nauki).

  • Lubię! 1
Link do komentarza
Share on other sites

Czyli rozumiem, że mam upłynnić ruch serw, by ruch był bardziej trapezowy/gaussowy niż skokowy? Bo nie wiem czy dobrze zrozumiałem: daję rezystor na linię zasilania, by spowolnić ładowanie serwa, lub/i pętlami "for" programuję ruch tak by się stopniowo silnik przyspieszał start i spowalniał koniec swójego ruch?

Link do komentarza
Share on other sites

Przestań brnąć, to miał być żart. Zapytałeś czy da się programowo zmienić/zmniejszyć bezwładność. Nie da się. Jedynym wyjściem jest zmniejszenie masy lub skupienie jej wokół osi obrotu. Nie masz wpływu na działanie prostego serwa. Jeżeli jego algorytm nie radzi sobie z bezwładnością obiektu, nic nie zrobisz bo a) nie masz szans się o tym przekonać, b) wewnętrzna pętla regulacji serwa i tak jest szybsza niż sterowanie z PPM a i tak poległa.

A o co właściwie pytasz?

Link do komentarza
Share on other sites

Buduję manipulator za pomocą kilku serw. Zaprogramowałem sztucznie ruch serw, by płynnie się przemieszczały, ale drgają mi dość mocno (nie są to typowe szarpnięcia, które też czasami zdarzy mi się zaobserwować jak coś namieszam z kablami/masą). Zastanawiałem się czy to może być wina bezwładności. Chciałem na to jakoś zadziałać i sprawdzić czy tutaj leży problem.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.