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

[Atmega][Bascom][Serwo] Po podłączeniu serwa zasilanie pada.

29 Lis 2010 23:37 6305 24
  • Poziom 16  
    Witam,
    mam pewien problem. Bowiem musze zroić układ taki aby sterował przerobionym serwem modelarskim w nastepujacej sekwencji:
    lewo
    waitms
    prawo
    waitms
    lewo
    ......
    Zrobiłem coś takiego na atmedze. Bowiem napisałem programik
    Code:
    $regfile = "m16def.dat"                                     'informuje kompilator o pliku
    
           'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
           'o częstotliwości oscylatora
           'taktującego mikrokontroler
    Config Porta.0 = Output
    Config Porta.3 = Output
    Porta.0 = 1
    Porta.3 = 0                                               
    Config Pina.1 = Input                                     
    Config Pina.2 = Input                                     
    Dim I As Byte                                             

    S1 Alias Pina.1                                         
    S2 Alias Pina.2                                             
    Set Porta.1                                                 
    Set Porta.2                                                 

           I = 200
    Do       
    If S1 = 0 Then
    I = I + 1
    End If
    If S2 = 0 Then
    I = I - 1
    End If
    Toggle Porta.0
    Toggle Porta.3
    Waitms I
    Loop
    End 

    Program na diodzie led dziala ale kiedy podlacze serwo to jakos zasilanie jakby padało i dopiero odłączenie serwa i reset procka przywraca pierwotną formę. Podłączyłem też L239D ale taki sam efekt i w końcu na tranzystorach i to samo.
    Co może być przyczyną?
    Za małe napięcie, natężenie?
  • Poziom 35  
    Co do napięcia i natężenia to w sumie nie podałeś, więc ciężko powiedzieć, ale jest to prawdopodobne. Inna rzecz to czy to "przerobione serwo" nie daje na mikroprocesor jakiegoś napięcia wskutek przebicia czy coś? Co to wogóle za przerobione serwo? W Bascomie są gotowe biblioteki obsługi serwa modelarskiego, więc rozumiem, że wywaliłeś z tego serwa całą elektronikę? Możesz spróbowac dac kondensator filtrujący na wejściu +5V, taki na przykład 2200UF. TYLKO PRZED PODŁĄCZENIEM GO DO UKŁADU ROZŁADUJ GO ZWIERAJĄC JEST STYKI. Kiedyś bawiłem się w sterowanie procesorem małym samochodzikiem RC. Efekt działania układu na pajęczynie był mizerny; zakłócenia od silnika zawieszały procesor. Raz się zawiesił, silnik poszedł na maksa, i juz nie mam na czym pisać programów.... Ale crashtest był :-).
    Nic nie dało nawet zasilenie silnika i tranzystora z osobnego pakietu akumulatorów; mimo to procek się wieszał.

    Nie będę ukrywał, przydałby sie jakiś schemacik czy coś, bo nie rozumiem, jak przerobiłeś to serwo?!

    Pozdrawiam.
  • Poziom 20  
    Z doświadczenia mogę powiedzieć że raczej jest to wina zakłóceń od serva na zasilaniu najlepiej było by rozdzielić oba bloki zasilające i pozostawić wspólną tylko masę, jeżeli się nie da to pozostaje jeszcze kilka opcji. Jedną z nich to porządna filtracja na zasilaniu procesora a może lepiej filtr typu PI, inną opcją było by dodanie diody i kondensatora w układzie zasilanie procesora tak żeby kondensator był obciążony tylko procesorem wtedy pewnie spadki napięcia spowodowane włączeniem silnika w serwie nie zakłócą działania procesora. Ogólnie trzeba coś wypróbować bo nie ma na to dobrego i zawsze działającego lekarstwa.

    Pozdrawiam Matejkos
  • Poziom 35  
    biglolo94 napisał:
    Witam,
    mam pewien problem. Bowiem musze zroić układ taki aby sterował przerobionym serwem modelarskim w nastepujacej sekwencji:
    lewo
    waitms
    prawo
    waitms
    lewo
    ......
    Zrobiłem coś takiego na atmedze.
    .............


    Z tego co zrozumiałem to przeróbka serva miała na celu dostosować go do pracy ciągłej.(?)
    Czyli wystarczyłoby odłączyc mechaniczne sprzężenie potencjometru z wałkiem wyjściowym, ustawieniu go i zablokowaniu w pozycji środkowej( lub całkowicie go podmienić dwoma opornikami 2k2 do 3k3), usunąc krańcowy stop mechaniczny. To wszystko.
    Reszta należy do kontrolera, sterujesz go w takim samym stylu jak servo nie przerobione, to znaczy:
    Na przewód kontrolny podajesz sygnał modulowany; może to być np: PWM o częstotliwości 50Hz. Kierunek i szybkość obrotów manipulujesz wypełnieniem stosując tą samą zasade jak dla zwykłego serva (+/- ~180 stopni).
    Impulsy 1.50 ms powinny 'trzymać' servo w bezruchu, dłuższe (do 2 ms)powinny powodowac obroty w prawo natomiast wypełnienie krótsze niz 1.50 ms daja obroty w lewo. Dla płynności startu i hamowania silnika można dodać wypełnienie zmienne/modulowane wg. potrzeby.


    Rozumiem że experymentujesz ze zwykłym, nie cyfrowym servem modelarskim.
    Ponieważ brak jest schematu, (a także z programu nie wiele można wnioskwać) co więc jest podłączone do portu A.0 a co do A.3?

    e marcus
  • Poziom 35  
    Wiecie co, koledzy? Chyba wiem, co autor miał na myśli. Kiedyś dorwałem taki specyficzny silniczek do skrętu kół w samochodziku DICKIE. Przez długi czas nazywałem toto serwem modelarskim. Jednakże było to coś innego; był w tym silnik przekładnie i płytka ze ślizgaczem. O coś takiego może chodzić autorowi; w różnych pozycjach w tym "serwie" były stykane różne ścieżki. Nie było żadnego potencjometru; układ skrętu rozpoznawał środek w taki sposób, że kręcił do skrajnej lewej pozycji, potem liczył i kręcił do skrajnej prawej, potem uśredniał i jakoś znajdował środek (pozycję neutralną). Myślę, że to to autor nazywa serwem modelarskim, ponieważ w programie sa zdefiniowane dwa wejścia. Sam bawiłem się w obsługę tego serwa na tych zasadach, że wpierw w lewo, a potem w prawo, i znów w lewo. Działało całkiem całkiem, ale strasznie wieszało mikroprocka. Mimo oddzielnego źródła zasilania serwa :-) Do końca nie udało mi się dojść do pełnego wyeliminowania powodu zwiechy, ale trochę pomogło:

    -danie rezystora na drodze od tranzystora do procka
    - duży kondzioł filtrujący nie obciążany serwem
    -jakiś przypadkowo znaleziony filtr z rdzeniem ferromagnetycznym?

    Pozdrawiam.
  • Poziom 16  
    Ture11
    Przeróbka mojego Serwa modelarskiego - zwykle Serwo modelarskie Link owa przeróbka polegała na wywaleniu elektroniki, rozwaleniu potencjometru aby zakres ruchu wynosił 360° no i odcięcie Bolczyka blokującego na jednej z zębatek (ostatnia do orczyka). Biblioteki wiem ze są ale nie używam jej ponieważ mam takowe przerobione Serwo chyba ze one by chodziły na tym. Podłączenie tego kondensatora 2200uF nic nie pomogło.

    emarcus
    Jeśli na myśli pracy ciągłej miałeś na myśli działanie Serwa raz w lewo raz w prawo i o regulowanym pomiędzy kierunkami odstępie czasu to tak chodziło mi o prace ciągłą.

    [Atmega][Bascom][Serwo] Po podłączeniu serwa zasilanie pada.
    oto moj schemat.

    P.S. Przedstawię wogole do czego ma być urządzenie. Urządzenie jest tworzone dla fanatyka-wedkarza, który lubi łowić ryby na lodzie. Podobno ta technika wymaga cioglego poruszania żyłka wiec poprosił mnie o stworzenie urządzenia które będzie "szarpać" żyłką wędkarską ( potrzebny ruch lewo prawo) i do tego aby byla regulacja szybkosci owego ruchu (S1 i S2). Do orczyku Serwa ma zostać przytwierdzona rurka a na jej końcu kółeczko przez które przechodzi żyłka a następnie zostaje szarpana.
  • Poziom 14  
    o ile dobrze wszystko zrozumiałem to w tym momencie można ten serwo traktować jako zwykły silnik DC, ale mikroprocek nie da rady go rozruszać. Spróbuj podłączyć ten silnik przez mostek H.
  • Poziom 35  
    Miło jest podciągnąć reset do plusa opornikiem 10KOHm i do minusa kondensatorem (nie pamiętam jakim, ale ceramicznym.), chociaż głowy nie dam, czy w tym przypadku efekt nie będzie odwrotny. Rozumiem, że za prockiem przy silniku jest ten l239d, on pełni role mostka H? No bo nie sądze, żebyś podłączał silnik do gołej atmegi16...... (?)

    Pozdrawiam.
  • Poziom 16  
    Wcześniej podłączyłem L239 i niestety nie działało. Lecz teraz jeszcze raz podłączyłem L239, dałem napięcie perz 7805 i 2 kondensatorki ceramiczne no i zaczęło działać ;)
    Lecz teraz mam problem ponieważ Serwo po wyłączeniu zostaje w danej pozycji a po włączeniu ruch zaczyna się od tego miejsca w którym praca została przerwana. Ja potrzebuje cos takiego aby nie zależnie kiedy został wyłączony prąd układ zawsze rozpoczyna od tego samego momentu.
    Wiem ze to chyba będzie wina programu tylko co tu teraz pozmieniać?
  • Poziom 21  
    AVR-y mają wewnętrznie zapewniony prawidłowy reset, więc kondensator jest zbędny. Teoretycznie pin resetu jest wewnętrznie podciągnięty do VCC, ale brak jego zewnętrznego podciągnięcia może skutkować problemami przy programowaniu, przynajmniej takie rzeczy spotykały innych na forum, ja takich problemów nie miałem.
  • Poziom 14  
    biglolo94 napisał:

    Lecz teraz mam problem ponieważ Serwo po wyłączeniu zostaje w danej pozycji a po włączeniu ruch zaczyna się od tego miejsca w którym praca została przerwana. Ja potrzebuje cos takiego aby nie zależnie kiedy został wyłączony prąd układ zawsze rozpoczyna od tego samego momentu.
    Wiem ze to chyba będzie wina programu tylko co tu teraz pozmieniać?

    Nie da sie tego zrealizowac bez sprzezenia zwrotnego. Po to w serwie jest potencjometr sprzezony z osia serwa . W twoim przypadku jako najprostrze sprzezenie zwrotne wystarczy mikrowylacznik lub mala fotokomorka (transoptor szczelinowy ) , umiescic to trzeba tak aby zalaczylo sygnal w jednym polozeniu na osi serwa.Procesor musi wiedziec gdzie jest fizyczne mejsce startu i konca obrotow napedu.
    Druga sprawa to taka ze na twoim miejscu rozdzielilbym porty mikroprocesora na wejsciowe i wyjsciowe , czyli np.- wej. port A, wyj.port D .
    Zapodaj schemat i zasade mechanizmu pociagania żyłki to otrzymasz konkretne odpowiedzi co do programu i czesci zasilania silnika .
    Po 20 min :) , chyba niemam co robic , narysowalem ci taki ukladzik,jakby cos bylo nie zrozumialego pisz.
    [Atmega][Bascom][Serwo] Po podłączeniu serwa zasilanie pada.
    Uklad sterowania do automatu wedkarskiego :)
  • Poziom 16  
    [Atmega][Bascom][Serwo] Po podłączeniu serwa zasilanie pada.

    Szybko cos takiego narysowałem. Myślę, że bedziecie wiedzieć o co mi chodzi.

    A gdyby na końcu pętli odczytywać czas I i zapisać go do epromu a potem na początku układu odczytać go i zakręcić silniczkiem w drugą stronę przez ten odczytany czas ?
  • Poziom 35  
    Można, tylko co jak podczas gdy jest wyłączony układ poruszysz wałem serwa? Poza tym układ nie wie, kiedy będzie odłączony, toteż musiałby ciągle zapisywać. Przy ciągłym zapisie wymarnujesz cykle R/W komórek pamięci EEPROM. Chyba że dasz przełącznik do wyłączania, który zachowa przez chwilę napięcie na AVR i da znać prockowi, by ten zapisał wartość do EEPROM'u. Ale to oznacza, że procek itak musi cały czas liczyć... Nie łatwiej z transoptorem, jak sugeruje kolega "ATMEG"?
    Zresztą silnik ma swoją bezwładność - po0 odłączeniu napięcia itak jeszcze chwilę się kręci, co zafałszuje wynik. Miałem ten problem w praktyce. Możesz próbować doświadczalnie ustalić czas bezwładności silnika, ale to przysłowiowe "ucieranie szkłem".
    Pozdrawiam.
  • Poziom 16  
    Niby przyszlo mi na myśl ten transoptor, ale miałbym mały problem z umocowaniem tego iż układ nie może być duży. Bo te czujniki pogrubiły by strasznie obudowę urządzenia.
    A gdybym miał serwo nieprzerobione?
  • Poziom 35  
    Serwo w postaci normalnej chyba ustawia się w pozycji neutralnej przy braku sygnału, a nawet jeśli nie, to zawsze musi się ustawić pod takim kątem, jaki mu rozkażesz. Jeśli nie masz już elektroniki to wystarczy także sam potencjometr, który tam był, podpiąć go pod ADC.
    Pozdrawiam.
  • Poziom 14  
    Transoptor szczelinowy jest maly wiec raczej problemu by nie bylo w wielkoscia .
    Przyszedl mi genialny pomysl rozwiazujacy problem i bardzo latwy do zastosowania ,
    mianowicie - jako czujnik kontaktron i maly magnesik na poruszanej dzwigni . To na 100% bedzie OK.I calkowicie odporne na warunki pracy (zabrudzenia , deszcz , czy mroz).
    Pomysl z oryginalnym potencjometrem i ADC wart rozwazenia tylko kolega wspomnial ze z jakiegos powodu to zdemontowal . Pytanie -czy podczas pracy tego polawiacza ryb praca osi potencjometru bedzie w strefie roboczej sciezki ,jesli tak to najlepiej wlasnie wykozystac oryginalny potencjometr + ADC atmegi.Hmm , jedynie odpornosc na wilgos i mrozy takiego potencjometru jest mniejsza.
  • Poziom 16  
    Z tym kontraktronem pomysł dobry jedynie problem jak ktoś niemoże go gdzieś w okolicy dostać.
    Mi przyszło do głowy aby zastosować dwa Switche. Takowe myśle że każdy elektronik będzie miał na składzie ;) A gdy serwo jest mocne takie przełączniku nie stanowią żadnej przeszkody ;)

    Dodano po 3 [minuty]:

    co do potencjometru to musiałem tam wyrwać blaszk, które stykają z resztą częśći potencjometru
  • Poziom 14  
    wystarczy 1 krancowka , reszte zalatwi sie programem . To zdecyduj sie na wersje ukladu a pomoge ci z napisaniem programu , zerknij na schemat jaki zamiescilem wyzej i rozwaz potencjometry do sterowania parametrami pracy bo podejrzewam ze dla urzytkownika takie rowiazanie bedzie bardzo dobre
  • Poziom 16  
    co do sterowania to chcialem uzyc przycisków. Narazie wielkie dzieki wszystkim za pomoc. Pokombinuje sobie z tymi Switchami, program dam rade sam napisac a w razie jakis problemów będe pisac ;)
  • Poziom 35  
    biglolo94 napisał:

    A gdybym miał serwo nieprzerobione?


    To prawdopodobnie nie byłoby większego kłopotu osiągnąć zamierzony efekt, pod warunkiem jednak przełożenie zębate serva pasowało "z grubsza" do projektu.
    Nie wszystkie serva modelarskie maja takie same parametry. Druga istotna sprawa to żywotność takiego serva. Zwykle takie serva modelarskie szacowane są na kilka tysięcy cykli 'normalnej' pracy w modelach (stery, podwozie itp).
    Ty masz zamiar zastosowac go do intensywnej pracy agitacyjnej podobnej jak np. wycieraczki w samochodzie.
    Chyba ten ruch agitacyjny nie jest aż tak duży i twój kolega nie zwija i odwija żyłkę(?). Ja też czasem łapię ryby z pod lodu (nie kommercyjnie) i takie zabiegi wydają sie być ograniczeniem przyjemności z tego tytułu.
    Z chwilą gdy usunąłeś z tego serva elektronikę i pin ograniczający obrót, to urządzenie to przestało być servem i jest zwyczajnym silnikiem elektrycznym DC z przekładnią (motoreduktor). I o taką pomoc powinieneś referować.

    e marcus
  • Poziom 16  
    emarcus
    Ile serwo wytrzyma to mnie nie interesuje, bowiem ja tylko dostałem zlecenie ;)


    Powracam jednak z kolejnym problemem. Znalazłem w domu serwo nieprzerobione.
    Podłączyłem je pod atmege, sterowałem nim przez przyciski i dobierałem sobie wartości położenia serwa, aż w końcu przyszedł dać wartości położenia w pętle, a tu niespodzianka bowiem serwo nie działa poprawnie.

    Code:
    $regfile = "m16def.dat"                                     'informuje kompilator o pliku
    
           'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
           'o częstotliwości oscylatora
           'taktującego mikrokontroler
    Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
    Config Lcd = 16 * 2
    Cursor Off
    Enable Interrupts
    Cls
    Config Portc.0 = Output
    Portc.0 = 0
    Config Servos = 1 , Servo1 = Portc.0 , Reload = 10
    Config Pind.5 = Input
    Config Pind.6 = Input
    Set Portd.5
    Set Portd.6
    S1 Alias Pind.5
    S2 Alias Pind.6
    Servo(1) = 100
    Do
    Servo(1) = 50
    Servo(1) = 150
    Loop
    End
  • Poziom 14  
    Nie znam TEJ gotowej procedury sterowania serwem w Bascomie wiec ci nie pomoge .Natomiast podtrzymuje propozycje pomocy w napisaniu programu sterujacego silnikiem + krancowka. 100% pewnosci ze bedzie dzialac poprawnie.Swoja droga ciekawie brzmi twoje wczesniejsze stwierdzenie ze z programem to dasz sobie rade.
  • Poziom 16  
    Co do programu to chodziło mi oto, że może program nie będzie poprawnie napisany to mimowszystko powinienem dać sobie radę aby działał.
    Ewentulanie w razie problemów bym napisał na forum ;)

    atmeg
    Code:
    Servo(1) = 100

    ta funkcja oznacza położenie serwa/orczyku
    100 - oznacza środek a mniejsze wartości kolejne położenia serwa

    Cytat:
    Dla przykładu:

    I=100 sero na środku
    I= 160 graniczne wychylenie

    160-100 = 60 zakres wychylenia dla 90st

    60/2 = 30 zakres wychylenia o 45st


    w helpie obsługa serwem jest ładnie wyjaśniona:
    config servo - wystarczy poszukac pod takim hasłem
  • Poziom 14  
    Piszac "nieznam" mialem na mysli praktyczne dzialanie , nigdy nietestowalem dzialania tej procedury.wydaje mi sie ze po kazdym wyslaniu rozkazu do serwa musisz dac czas na wykonanie . Czyli np.
    servo(1)= 100
    waitms xxx
    servo(1)=150
    waitms xxx
  • Poziom 35  
    biglolo94 napisał:
    emarcus
    Ile serwo wytrzyma to mnie nie interesuje, bowiem ja tylko dostałem zlecenie ;)

    Znalazłem w domu serwo nieprzerobione.
    .........
    dać wartości położenia w pętle, a tu niespodzianka bowiem serwo nie działa poprawnie.



    Oczywiście że w takim sterowaniu nie będzie ono funkcjonować poprawnie.

    Soróbuj taki kode:

    Code:

    $regfile = "m16def.dat"
    $crystal = 8000000                                          'write actual freq of your mproc
    $hwstack = 32
    $swstack = 8
    $framesize = 16

    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
    Config Portb = Output
    Enable Interrupts

    Dim I As Byte

    Do
       For I = 80 To 140
         Servo(1) = I
         'Waitms 25
       Next

       For I = 140 To 80 Step -1
        Servo(1) = I
         'Waitms 25
       Next
    Loop

    End


    Ponieważ nie wszystkie serva są jednakowe, możesz drogą prób zmieniac graniczne wartości w pętlach 'For.. Next' (te 80 i 140) a takż manipulować z Waitms. Jedynie co każde servo ma wspólne to oczekiwanie na impuls co 20 ms
    i tak jest opracowany algorytm 'Config Servos' w Bascom i tego nie zmienisz.
    Możesz zacząc wszysko po swojemu od tworzenia takiego algorytmu co w końcu dojdziesz do tego samego punktu.
    Impuls na servo nie jest generowany w pętli "Do... Loop" , a jedynie określasz jego wielkość (długość).

    e marcus