Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega8+serwo - niekontrolowany ruch przy starcie

janeczek23 09 Cze 2014 12:26 1959 14
  • #1 09 Cze 2014 12:26
    janeczek23
    Poziom 5  

    Cześć,
    napisałem program do obsługi serwa(jest to serwo Tower Pro),program działa, ale mam problem polegający na tym, że przy starcie zasilania serwo wykonuje szybki ruch z pozycji w której się znajduje (do góry) , i zaraz wraca do pozycji określonej przez OCR1A czyli do pozycji w której było przed włączeniem zasilania. Chciałbym wiedzieć czy mogę się pozbyć jakoś tego efektu, czyli żeby serwo nie ruszało się przy starcie tak gwałtownie tylko stało tak jak stoi.Drugi problem to taki że przy wyłączeniu zasilania serwo nieznacznie traci pozycję i też nie wiem jak się pozbyć tego efektu.

    Inicjalizacja kod

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 14
  • #2 09 Cze 2014 12:46
    dondu
    Moderator Mikrokontrolery Projektowanie

    Cześć.
    1. Jak masz ustawione fusebity w zakresie czasu startu mikrokontrolera?
    2. Ile czasu upływa od momentu włączenia zasilania do inicjalizacji serwa?
    3. Czy następuje jakieś opóźnienie pomiędzy włączeniem zasilania serwa i mikrokontrolera?
    4. W którym miejscu programu inicjujesz serwo?
    5. Typ serwa?

    0
  • #3 09 Cze 2014 14:24
    janeczek23
    Poziom 5  

    1.z fuse bitami nic nie robiłem, więc chyba są tak jak fabrycznie
    2,3. nie wiem czy dobrze rozumiem, jeżeli chodzi o jakieś opóznienia w programie przed/ pomiędzy inicjalizacją to nie mam żadnego
    4.Inicjalizacja jest na początku funkcji

    Kod: c
    Zaloguj się, aby zobaczyć kod

    5.serwo tower pro micro

    0
  • #4 09 Cze 2014 15:58
    dondu
    Moderator Mikrokontrolery Projektowanie

    Skoro fusebity ustawione fabrycznie to znaczy, że masz ustawiony wewnętrzny generator 1MHz wraz z opóźnieniem 65ms po włączeniu zasilania (resecie), czli fusebity low=E1, high=D9. Możesz to zobaczyć wybierając ATmega8 tutaj: http://www.engbedded.com/fusecalc

    Zmień na 0ms czyli fusebity low=C1, high=D9. Wprawdzie to zbyt krótki czas, by serwo zadziałało w sposób jaki opisujesz, jednak od czegoś należy zacząć.

    W punkcie 3 pytałem o stronę sprzętową - zastanów się nad tym punktem jeszcze raz.

    0
  • #5 09 Cze 2014 16:39
    janeczek23
    Poziom 5  

    Zmieniłem fuse bit, tak jak poradziłeś, ale to nic nie zmieniło, co do pkt nr 3 zasilanie jest to samo do serwa i procesora więc opóźnień nie ma (chyba),
    zauważyłem jeszcze że niekontrolowany ruch występuje tylko przy starcie, jak resetuje z przycisku albo po wgraniu programu tego nie ma

    0
  • #6 09 Cze 2014 17:14
    dondu
    Moderator Mikrokontrolery Projektowanie

    1. Sprawdź jak działa samo serwo po podłączeniu zasilania, a jak po jego odłączeniu.
    2. Pokaż schemat.
    3. Pokaż kompletny program.
    4. Zastanów się, jaki tryb pracy Timer1 włączasz, a w konsekwencji do jakiej wartości zlicza Timer1 i jak to się ma do 1Mhz (którym taktujesz mikrokontroler) oraz standardu sygnału sterującego serwem?

    atmega8+serwo - niekontrolowany ruch przy starcie

    0
  • #7 09 Cze 2014 19:07
    janeczek23
    Poziom 5  

    Podłączyłem samo serwo bez uC i ustawiło się w pozycji do której szedł przy starcie zasilania z podpiętym uC, a co do trybu pracy to wydaje mi się że dobrze to ustawiłem tzn ICR=19999, przy preskaler=1 daje mi częstotliwość 50Hz sygnału PWM, a reszta ustawiona tak że przy porównaniu mam zmianę z 1 na 0

    0
  • #8 09 Cze 2014 19:14
    dondu
    Moderator Mikrokontrolery Projektowanie

    janeczek23 napisał:
    Podłączyłem samo serwo bez uC i ustawiło się w pozycji do której szedł przy starcie zasilania z podpiętym uC

    Jakie więc wnioski?

    janeczek23 napisał:
    ... a co do trybu pracy to wydaje mi się że dobrze to ustawiłem tzn ICR=19999, przy preskaler=1 daje mi częstotliwość 50Hz sygnału PWM, a reszta ustawiona tak że przy porównaniu mam zmianę z 1 na 0

    A teraz popatrz na to co wkleiłeś w pierwszym poście i znajdź tam rejestr ICR1 :)

    0
  • #9 09 Cze 2014 19:16
    janeczek23
    Poziom 5  

    według mnie to za wolno działa uC( ale jak naprawić to nie wiem), a ICR1 musiało gdzieś wyparować przy wklejaniu

    0
  • #10 09 Cze 2014 20:04
    BlueDraco
    Specjalista - Mikrokontrolery

    ściągnij na wszelki wypadek wejście sterujące serwa rezystorem np. 10k do masy.

    0
  • #11 09 Cze 2014 20:15
    janeczek23
    Poziom 5  

    a jest jakaś opcja programowa naprawy tego czy nie za bardzo?

    0
  • #12 09 Cze 2014 20:21
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeśli to stan nieustalony przy starcie, to programowo elektryki nie naprawisz. Nie wgryzałem się w kod - może to być błąd w zaprogramowaniu timera.

    0
  • #13 09 Cze 2014 20:31
    dondu
    Moderator Mikrokontrolery Projektowanie

    janeczek23 napisał:
    według mnie to za wolno działa uC ...

    Skąd taki wniosek?

    Jeżeli chcesz uzyskać od nas pomoc, to pisz obszerniej, a nie pojedynczymi zdaniami, które zmuszają nas do zadawania kolejnych pytań. Poza tym prosiłem o konkretne informacje, ale ich nie podajesz. Lekarzowi także nie?

    0
  • #14 09 Cze 2014 22:56
    janeczek23
    Poziom 5  

    wywnioskowałem to po tym, jak sprawdziłem, że dla samego zasilania serwo jest w tej pozycji do której idzie na bardzo krótki czas przy starcie z podłączonym uC + z tego co pisałeś

    Kod: c
    Zaloguj się, aby zobaczyć kod

    pin PB1 jest podłączony do sygnału sterującego 1 serwa, pin pb2 do sygnału 2 serwa , każde serwo ma kondensator 100nf, zasilanie całego układu vcc do masy przez kondensator 100nf

    0
  • #15 26 Cze 2014 16:02
    janeczek23
    Poziom 5  

    Cześć, chciałbym jeszcze raz poruszyć temat bo sam próbowałem dość długo, ale nie udało mi się tego naprawić.
    Wyrzuciłem wszystko z programu i zostawiłem tylko inicjalizacje PWM

    Kod: c
    Zaloguj się, aby zobaczyć kod

    mam ten sam efekt czyli serwo robi szybki ruch w dół i wraca do pozycji

    0