logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega 1284][C/WinAVR] - Kontrolowanie Serwomechanizmu

jpowie01 14 Mar 2013 18:34 2514 12
REKLAMA
  • #1 12060352
    jpowie01
    Poziom 9  
    Witajcie,
    Mam problem ze sterowaniem serwomechanizmu NewPower XL-9 z poziomu Atmegi 1284. Kod wydaje się być OK. Serwo non-stop kieruje się w jedną stronę, do oporu. Nawet z różnymi wartościami OCR1A, serwo wykonuje ten sam ruch. Co mam źle ? Kod to w sumie gotowiec z internetu, gdyż poprzednie, własne kody także nie działały :/

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeżeli możecie mnie naprowadzić na rozwiązanie problemu, to będę wdzięczny.

    Pozdrawiam,
    jpowie01
  • REKLAMA
  • #2 12060512
    BlueDraco
    Specjalista - Mikrokontrolery
    Jaki jest roboczy zakres szerokości impulsów? Coś mi tu nie pasuje.

    Przypnij oscyloskop lub chociażby LED do wyjścia i zobacz, co tam masz.
  • REKLAMA
  • #3 12060680
    jpowie01
    Poziom 9  
    Do oscyloskopu niestety nie mam dostępu, lecz dioda LED wyraźnie zmienia natężenie światła, a więc PWM wygląda jakby działał prawidłowo. Tylko dlaczego serwo nie chce współpracować ?
  • #4 12061198
    nproton
    Poziom 12  
    A fuse bity jak masz ustawione ?
    Zrób diodę migająca z częstotliwością 1s i sprawdź czy się częstotliwość zgadza.
  • #5 12061987
    kamyczek
    Poziom 38  
    Serwo powinno otrzymywać impuls dodatni od 1 do 2ms co 50ms jakoś mi się nie wydaje żeby ten program tak działał ..
  • #6 12062297
    Konto nie istnieje
    Poziom 1  
  • #7 12064402
    jpowie01
    Poziom 9  
    @nproton = Fuse bity ustawione są standardowo. Nic w nich nie zmieniałem, gdyż jest to Atmega 1284(bez P) i nie mogłem nigdzie w necie znaleźć do niej odpowiedniej konfiguracji. Bałem się wgrywać te od wersji P, aby nie zablokować sobie uC.
    Częstotliwość to na pewno 1MHz. Timer działa prawidłowo.

    @kamyczek - to, że nie działa to wiem ;) Tylko co tu jest źle.. ?

    @emarcus - Fabrycznie jest 1MHz. Ze wzoru, który znalazłem w Internecie wartość ICR1 jest OK.

    W takim razie, co robię nie tak ?
  • REKLAMA
  • #8 12064799
    Konto nie istnieje
    Poziom 1  
  • #9 12067811
    jpowie01
    Poziom 9  
    Może jestem za głupi na AVR, ale przecież tak to wyliczyłem...

    PWM skonfigurowany jako FastPWM (może powinienem to zmienić).
    Preskaler (CS10), według tabelki z Datasheet na stronie 135, wynosi 1.

    Atmega chodzi na wewnętrznym oscylatorze 1MHz, a więc liczmy razem:
    ICR1 = ($crystal[MHz] * period[us] / prescaler) - 1 = (1 * 20000 / 1) - 1 = 19999

    W związku z tym:
    Wartość OCR1A powinna zawierać się w zakresie ~1000-2000.

    Serwo teraz podłączyłem następująco: PWM do PD5 (OC1A), 5V do 5V, GND do GND. Wcześniej do zasilania serwa użyłem osobnego zasilacza. Teraz wszystko jest zasilane z programatora USBASP.

    Jeżeli rzeczywiście fuse bity mają coś z tym wspólnego, to poproszę o informację co dokładnie zmienić.

    Czy to możliwe, że serwo jest zepsute ? Dopiero co 2 dni temu go kupiłem i rozpakowałem.

    Z góry dziękuję wam za pomoc !
  • REKLAMA
  • #10 12067907
    kamyczek
    Poziom 38  
    Jakie to serwo ? Jeśli analogowe i otrzymywało nieprawidłowy sygnał mogło się uszkodzić ...
  • #11 12068515
    slx
    Poziom 19  
    Program z pierwszego postu jest dobry. No może nie tak całkiem, ale konfiguracja timera jest dobra.
    Na początek lepiej ustawić wartości bliżej środka szerokości impulsu przewidzianego dla serwa. Czyli zamiast 800 i 2200 np. 1200 i 1800. Później można sprawdzić maksymalne wychylenia.
    No i wydłużyć czasy przerwy między zmianami OCR1A (np _delay_ms(1000)) - bo o ile nie jest to bardzo szybkie serwo to na pewno nie zdąży w tak krótkim czasie przekręcić się z jednej strony w drugą.
    Z programatora to bym serwa nie zasilał - lepiej oddzielny zasilacz.
    Cytat:
    Jakie to serwo ? Jeśli analogowe i otrzymywało nieprawidłowy sygnał mogło się uszkodzić ...
    Raczej nie - o ile chodzi o parametry czasowe, a nie np za wysokie napięcie.

    A jak to serwo się zachowuje: stabilnie stoi w miejscu bez wydawania żadnych odgłosów czy inaczej?
  • #12 12069511
    jpowie01
    Poziom 9  
    Jest to serwo analogowe - NewPower XL-9.
    Serwo stabilnie się trzyma końcowego wychylenia i "próbuje" przejść dalej, lecz przeszkadza mu w tym blokada. Gdy ręcznie (oczywiście bez prądu) przesunę orczyk w drugą stronę, po podłączeniu prądu serwo wraca na tą samą pozycję, ale nie chce już wracać.

    Ponownie serwo podłączyłem do zasilacza poprzez 7805 oraz tak jak zaproponowałeś, zwiększyłem czas do sekundy oraz zmieniłem OCR1A na wartości bliżej środka.

    Serwo nie piszczy, nie krzyczy. Słychać tylko pracujący silniczek w środku, lecz wciąż tak samo reaguje na moje polecenia.

    Ehh.. męcząca ta walka.

    Dziękuję Wam za dotychczasową pomoc i poświęcony czas ;)
  • #13 12069703
    kamyczek
    Poziom 38  
    Zacznij od sprawdzenia mechanizmu na prostym testerze na 555 schematów jest wiele : TU

    jak serwo działa poprawnie to ok jak nie możesz sprawdzić czy zamiana na potencjometrze wewnątrz skrajnych przewodów nic nie zmieni ... Jeśli okaże się że masz uszkodzone serwo trzeba będzie kupić nowe . Będąc modelarzem mogę napisać tyle nieprawidłowy sygnał sterujący (zbyt małe przerwy między impulsami ) lub zbyt wysokie napięcie zasilania wyższe od 6V uszkadzają serwomechanizmy .
REKLAMA