unnamed7 wrote: jak określić dobrze maksymalne wychylenie serva lewo/prawo ? Teraz niby coś nim mogę poruszać, ale działa mi to coś tylko w jedną stronę i osiągając maksymalne wychylanie podskakuje.
Jeżeli serwo jedzie w jedną stronę. to znaczy że impuls sterujący jest zbyt długi lub zbyt krótki. Nominalna szerokość impulsu to 1,5ms, aktywny jest stan wysoki.
Typowe wartości brzegowe to 1,0ms (-125%) i 2,0ms (+125%), jednak zwykle można przeciągnąć impuls o jeszcze 0,2ms w każdą stronę. Trzeba tylko sprawdzić czy serwo nie dochodzi do ogranicznika mechanicznego, bo wtedy silnik zostanie zablokowany a elektronika serwa będzie chciała jeszcze kręcić dalej. Efekt nie będzie zdrowy dla serwa. Te podskoki, które teraz obserwujesz to być może efekt działania takiego stanu.
Zobacz też na oscyloskopie, czy sygnał sterujący jest stabilny - bo może masz kaszankę w sterowaniu. Nie znam xmegi, ale typowy kontroler powinien mieć PWM. W zależności od możliwości PWMa albo definiujesz dwa rejestry, jednym ustawiasz stan wysoki a drugi stan niski po upłynięciu czasu impulsu. W wersji ekonomicznej czasami można dać wspólne dla wszystkich serw ustawianie sygnału wysokiego a potem jednym rejestrem na serwo zerujesz impuls. W ten sposób można obsłużyć więcej serw.
Rozwiązanie pierwsze jest rozsądniejsze, bo sterowanie wielu serw jest rozłożone czasie i przynajmniej teoretycznie powinno mniej szarpać prądem. W praktyce czas pracy silnika zwykle jest dłuższy od odległości pomiędzy kolejnymi impulsami wynoszącej 50ms dla zwykłego sygnału i silniki kilku serw przez sporą część czasu pracują równocześnie. W rozwiązaniu drugim (ekonomicznym) wszystkie serwa startują razem.
W swoim urządzeniu sterowanym ARMem steruję 12 serwami a teoretycznie nawet do 24, za pomocą 6-kanałowego PWM i 3 multiplekserów. Sześcioma kanałami PWM generuję trzy serie impulsów a kolejne impulsy w serii rozdzielam na poszczególne serwa multiplekserem przełączanym w przerwaniu kanału 0 PWM. Timer PWMa poganiam zegarem 1MHz i mam rozdzielczość sterowania 1us (0,25%).