Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Arduino Uno] - Servo Tower Pro MG995 nie działa poprawnie

slasuc 22 Feb 2015 16:24 3447 14
  • #1
    slasuc
    Level 9  
    Witam, zmontowałem prosty układ do sterowania serwem: serwo zasilane 4xAA, Arduino Uno zasilane z usb, wspólna masa, przewód sygnałowy serwa podpięty do pinu 9. Próbuję odpalić przykład sweep ze stronki Arduino (obrót serwem na pozycję 180° i powrotem na 0°), ale serwo zachowuje się dziwnie. Porusza się między ok 120° a 180° potem staje, potem próbuje przekroczyć zakres ruchu, generalnie to co się dzieje nie jest ruchem, którego oczekuję.

    Próbowałem zmiany kąta w programie, ale to niczego nie zmienia. Trafiłem na informację że rezystor 330Ω na linii sygnałowej może pomóc - nic, wpiąłem kondensator 470µF między Vcc i GND zasilania serwa - też nie pomogło. Otwierałem serwo myśląc, że problemem może być potencjometr ale pomiary nie wskazują na to. Dodam jeszcze że inne serwo Power HD 1600A w tym układzie zachowuje się prawidłowo.

    Czy ktoś z doświadczeniem mógłby posłużyć pomocą w opanowaniu serwa?
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • #2
    sylweksylwina
    Moderator of Computers service
    Najlepiej było by sprawdzić serwo pod aparaturą modelarską, ewentualnie pod testerem serw. Jak potencjometr jest sprawny to może być padnięta elektronika serwa lub nawet mechanika. Sprawne serwo z pewnością nie powinno próbować przekroczyć zakres ruchu.
  • #3
    slasuc
    Level 9  
    Testowanie pod aparaturą odpada - nie mam takiej możliwości. Mechanika jest ok, też oglądałem. Być może płytka... Mam drugie takie samo serwo, ale z nim jest taki sam problem. Wiem że MG955 potrzebuje większego prądu więc używam baterii. Trochę to wygląda jakby serwo nie potrafiło znaleźć pozycji, ale przestrzał jest za duży.

    Myślałem o hacku serwa na rezystorach (2 pozycje mi wystarczą) lecz zanim to zrobię chcę wykorzystać wszystkie inne opcje.
  • #4
    BlueDraco
    MCUs specialist
    Zasil serwo z zewnątrz, nie z Arduino.
  • #5
    slasuc
    Level 9  
    Tak robię. Arduino jest zasilane z usb a serwo z czterech baterii AA. "Minus" baterii połączony do GND na płytce (tak jak to opisałem wcześniej).
  • Helpful post
    #6
    dondu
    Moderator on vacation ...
    Może baterie nie mają odpowiedniej wydajności prądowej?
    Sprawdzałeś spadek napięcia w czasie pracy serwa?

    Podaj link do przykładu z programem testowym serwa, a najlepiej to wklej tutaj program.
  • Helpful post
    #7
    atom1477
    Level 43  
    To jest wina sterownika serwa.
    Jakiś rok temu zrobiłem ostry research bo nakupiłem dużo serw MG995 i MG996, i MG995 nie chciały działać tak jak bym oczekiwał (Twoje MG955 jest chyba elektrycznie identyczne z MG995).
    Doszło do tego że podmieniałem potencjometry, przekładnie oraz układy sterujące.
    I jednoznacznie wyszło że winny jest układ sterujący. Po prostu działa on jak niepełnosprytny układ PID i jest trochę przeregulowany.
    Nie pomaga nic (np. wymiana elementów RC w otoczeniu układu sterującego).
    Po prostu układ sterujący jest zły sam w sobie, i doprowadza do przeregulowania.
    Pomaga dopiero spowolnienie sygnału sterującego (filtrem dlnoprzepustowym (np. IIR) w procesorze generującym sygnały PPM dla serwa).
    Próbowałem też z innymi, np. HS311, TG9, HXT900 i nigdy nic takiego nie występuje. Tylko w MG995.
    A przeniesienie płytki sterującej z tego serwa (MG995), do innego serwa, przenosi problem na to inne serwo.
  • #8
    slasuc
    Level 9  
    Quote:
    To jest wina sterownika serwa.


    To bardzo zła wiadomość :| Upewnie się jeszcze co do prądu tak jak radzi Dondu - może dochodzi do ciągłego resetowania.

    Jeśli Atom ma rację to chyba muszę serwa zwrócić do sklepu...

    Wklejam jeszcze kod, chociaż IMO nie tędy droga do rozwiązania:
    Code: c
    Log in, to see the code
  • #10
    slasuc
    Level 9  
    Na początek mała poprawka, zrobiłem literówkę nazwa serwa to MG995.

    Z pracy przyniosę dziś pakiet 8 aku AA. 4x2 da 4.8V i zapas prądu, który musi wystarczyć (w sieci są filmy z tym serwem, które działa na 4xAA). Przy okazji spróbuję zmierzyć spadek miernikiem.

    Co do kodu: to jest podstawowa wersja, oczywiście próbowałem modyfikacji stosujący np:

    Code: c
    Log in, to see the code


    próbowałem też .writeMicroseconds() zamiast .write() (link do biblioteki servo Link) ale bez skutków - dla innego serwa działa wzorowo.

    Natrafiłem również w sieci przypadek poluzowania śruby trzymającej potencjometr w odpowiedniej pozycji, ale moje pomiary wykluczyły ten problem (w pozycji 0° pot jest w połowie zakresu tzn. ok 2kΩ).
  • #11
    atom1477
    Level 43  
    slasuc wrote:
    Na początek mała poprawka, zrobiłem literówkę nazwa serwa to MG995.

    No to widzisz: to dokładnie takie serwa jak moje. A więc niestety to sterownik.
    Tylko filmik jakiś nagraj bo nie wiadomo o co chodzi. U mnie się tak działo po skokowym wymuszeniu. Przy płynnym powolnym sterowaniu serwo nadążało za sygnałem i nie przeregulowywało.

    slasuc wrote:
    []cała reszta[]

    Ja zasilałem z pakietu 2200mAh 30C. Jak zwarcie się zrobiło (kiedy indziej, jak się bawiłem modelem RC) to wypaliło kabel.
    Tak więc prądu na pewno nie brakowało. To wina sterownika serwa.
    U mnie niektóre miały zakres ruchu z 60°. I nie była to wina potencjometru. Po podmianie elektroniki (z innego serwa MG995) nagle zaczynało działać w pełnym zakresie. A jak się podmieniło elektronikę na elektronikę z MG996 to i przestawało przeregulowywać.
  • Helpful post
    #12
    pimpuk
    Level 23  
    Miałem ten sam problem z tym serwem. Nie działało mi jak należy, sprawdzałem nawet w zestawie modelarskim (nadajnik lotniczy + dobrej klasy odbiornik). Podłączyłem więc go do generatora, dałem prostokąt na 50Hz i bawiłem się wypełnieniem. Oczywiście efekt ten sam. Zauważyłem jednak, że zmiana częstotliwości sygnału ratuje sytuację.
    Sygnały PWM dla serw modelarskich, powinny być generowane w przedziale 40~60Hz, zwykle jest 50Hz i taki też sygnał generuje Twoje Arduino. Serwomechanizm posiada w swoim sterowniku generator 50Hz, czyli co 20ms oczekuje na impuls sterujący.
    Zmierz częstotliwość generatora w układzie sterującym swojego serwa. Idę o zakład, że nie mieści się w przedziale 40~60Hz, albo jeśli się mieści, to jest bardzo niestabilny. W tym pierwszym przypadku możesz ratować sytuację edytuując plik servo.cpp, a konkretnie chodzi o wartości zmiennej [timer] o ile dobrze pamiętam.
    Jak będę miał czas to tam zajrzę.
  • #13
    slasuc
    Level 9  
    EUREKA :D

    Problem rozwiązany, ale wychodzi tu słaba jakość serwa i niedokładna dokumentacja...

    Mianowicie po zastosowaniu pakietu 4x2 aku AA i na kodzie:

    Code: c
    Log in, to see the code


    zapanowałem nad niewdzięcznikiem. Wg sprzedawcy zakres pracy zaczyna się od 4.8V ale najwidoczniej to nie wystarczyło (nawet 3x2 AA), dopiero pakiet 4x2 pozwolił opanować sytuację. Tak jak przeczuwał Dondu:

    dondu wrote:
    Może baterie nie mają odpowiedniej wydajności prądowej?
    Sprawdzałeś spadek napięcia w czasie pracy serwa?




    Dziękuje wszystkim za pomoc i podzielenie się wiedzą.

    PS zdesperowany kontaktowałem się już ze sprzedawcą - był gotowy przyjąć reklamację, więc chyba jest coś na rzeczy w sprawie tego modelu serwa...

    Czy ktoś chce podsumować zanim zamkniemy temat?
  • #15
    slasuc
    Level 9  
    atom1477 wrote:
    Czyli jakie napięcie?
    Kurcza ja na 5V testowałem (z układu BEC 10A). To i to jest za mało?
    W sumie sprawdzę jak będę miał swoje pod ręką. To może coś z nich jeszcze zrobię.


    Miernik pokazał 6.9V: dwa równolegle połączone pakiety każdy złożony z szeregowo 3x Panasonic Ni-HM 2700 + 1x bateria Warta Long Life.