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+ Bascom+Serwo modelarskie

marrog 08 Kwi 2011 00:00 3859 12
REKLAMA
  • #1 9373779
    marrog
    Poziom 22  
    Witam

    Przeczytałem kilkanaście różnych tematów nt. serw i nie znalazłem informacji. Przy sterowaniu podaje się impulsy czasach 1,5ms dla neutralnego położenia ( środkowe) i 1 i 2ms skrajne. Jaki kąt uzyskuje się dla skrajnych położeń?
    Dla przykładu gdyby serwo wychylało się o kąt +- 135 czyli razem 270.
    To jak zadać np. kąt 50° lub jakiś inny?? Czy to będzie czas 0,37ms dla tych 50°, skoro 1ms to max 135°.
  • REKLAMA
  • #2 9374043
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 9374924
    marrog
    Poziom 22  
    To może przedstawię mój problem i ktoś mi doradzi (ktoś bardziej doświadczony w tej kwestii).
    Chcę zrobić sterowanie klapa (nie jest duża - spokojnie serwo modelarskie podniesie). Uchylanie ma być sterowane poprzez uP z zaimplementowanym regulatorem P (opcjonalnie PI) zobaczę jak się będzie spisywał jeden i drugi. Mam wszystko opracowane do momentu wyznaczenia zmiennej sterującej. Teraz pojawia się problem, co będzie lepsze, czy serwo, czy silnik krokowy?
    W serwie mam ten plus że nie jako znam położenie klapy, bo np. przy jakimś niekontrolowanym uderzeniu w klapę, serwo powinno wrócić do poprzedniej pozycji ( chyba, że się mylę) a krokowy nie bardzo...
    Kolejna sprawa to zanik napięcia (to rozwiązałem przy pomocy akumulatora żelowego i ładowania opartego na sterowaniu z uP.

    Osobiście bardziej jestem skłonny ku serwom, jednak nie używałem nigdy tego i nie wiem dokładnie jak się będą spisywały (krokowych też, ale bardziej sterowanie nimi jakoś do mnie dociera - mam krok i kąt i jestem w stanie wyznaczać położenie klapy na podstawie prostych obliczeń), a jak się ma do tego sterowanie serwem, czy da radę np. ustawiać serwo o kąt powiedzmy ~7,5* (jak np. w krokowym)??
    Skoro różnica w czasie impulsów między skrajnym a neutralnym położeniem to 0.5ms, a kąt np aż 135* to wypada na to, że ruch o 1* to impuls ok. 0.0037ms, czy jest to możliwe do uzyskania?? Dla 7,5* to jakieś 0,027ms
  • #4 9375026
    Szumlus
    Poziom 17  
    Witam,

    Serwo modelarskie może nie wytrzymać uderzenia w klapę. Przekładnia raczej na pewno ulegnie zniszczeniu. Można kombinować z serwem z przekładnią metalową ale wynik uderzenia ciężko przewidzieć.

    Sprawa rozdzielczości sterowania jest dość prosta. W helpie do bascom AVR jest podane jak wyliczyć minimalny czas trwania impulsu w zależności od użytego kwarcu. Porównaj z tym którego Ty potrzebujesz jeśli jest co najmniej równy wszystko powinno działać.

    Pozdrawiam,
    Marcin
  • #5 9375065
    marrog
    Poziom 22  
    A gdyby dał małą sprężynę na ramię serwa i klapy (tak, aby przy normalnej pracy sprężyna się nie odkształcała), a w momencie uderzenia sprężyna amortyzowała uderzenie....
    Co do Bascom-a, to rozumiem, że oznacza, że co 10us będę miał przerwanie i teraz aby wychylić serwo na max to muszę dać:

    czyli 10*100 da mi 1000us czyli 1ms, zatem wychylenie serwa na skrajne położenie powiedzmy w lewo, natomiast na max w prawo daje Servo(1)= 200 i dla neutralnego daję 150, natomiast to co dam między 100 a 150 to będzie jakiś kąt pośredni między 0 a 135* przy serwie które ma kąt wychylania 270*.
    Czyli ja bym musiał określić w swoim programie max kat na jaki chcę uchylic klapę powiedzmy 50* i dla tego położenia to będzie moje 100% wartość sygnału sterującego z P (PI), a resztę po prostu obliczyć.
  • #6 9375205
    Szumlus
    Poziom 17  
    Pomysł ze sprężyną jest bardzo ciekawy. Powinien się sprawdzić.

    Co do sterowania serwem to najlepiej sprawdzić wszystko empirycznie. Będziesz miał servo i procka piszesz program i testujesz na bieżąco. Poza tym czasy podane przez kolegów to standard czasem trafiają się serwa co nie pasują do tego wzoru i czasy dla poszczególnych położeń będą się trochę różnić.

    Pozdrawiam,
    Marcin
  • REKLAMA
  • #7 9375231
    marrog
    Poziom 22  
    Witam ponownie
    Widzę, że kolega się trochę orientuje (bynajmniej bardziej niż ja), zatem ośmielę się zapytać, czy takie serwo TowerPro SG 90 lub HK15178 HobbyKing będzie w miarę dobre? Element którym mają sterować, jest dośc lekki (właśnie testowałem sprężynkę od "wózka" z flopów (sprężynki wypychają dyskietkę). Sprężynka się nawet nie odkształciła, dopiero w momencie uderzenia ręką poddała się ;-) czyli powinna spełnić swoją rolę (inna kwestia, to zmęczenia materiału, być może po jakimś czasie zacznie się odkształcać, ale to inna kwestia)...
  • #8 9382169
    Szumlus
    Poziom 17  
    Witam kolegę ponownie,

    Ja bym proponował serwo Tower Pro MG 995. Nie do zajechania jest!!!
    Budowałem na takim ruchome ramię, model zbudowany z listw dural-aluminiowych więc konstrukcja ciężka. Na małopolskiej nocy naukowców wytrzymał bez problemu 8 godzin ciągłej pracy.
    Koszt ich jest wprawdzie nieco większy ale jeśli się nadają to Twojego projektu to polecam.
    Przy zastosowaniu tego "mocarnego" serwa można takich sprężynek dać więcej niż jedną wiec problem ze zmęczeniem materiału co najmniej oddali się w czasie, jeśli nie zniknie całkowicie w porównaniu z długością życia projektu.
    Ja bym proponował założyć tyle sprężynek, aby nie pozwoliły na obrót serwa przy uderzeniu w klapę gdy serwo jest odłączone od zasilania. W czasie normalnej pracy układu klapa będzie dość sztywna aby nie reagować na lekkie uderzenia a jednocześnie na tyle elastyczna, że na pewno uszkodzenia serwa nie spowoduje przy udrzeniu.

    Pozdrawiam,
    Marcin
  • #9 9384385
    marrog
    Poziom 22  
    Dzięki Marcin za odpowiedź.

    W sobotę kupiłem TowerPro SG-5010, bo tamte, faktycznie za delikatne były, jak mi sprzedawca w sklepie pokazał (prawdziwe mini) ;-)

    Uruchomiłem serwo bez problemów. Sterowanie sygnałem z regulatora PI zbudowanego na Atmega16.
    Jedynie problem mam tego typu, że przy korzystaniu z drugiego timera Timer1 (Timer0 wykorzystuje serwo) nie bardzo mi działa timer1.
    Chciałem zrobić coś takiego:
    Normalnie Timer1 wykorzystuje do odmierzania czasu (sek) ustawiłem dla kwarcu 8Mhz zliczanie,
    Kod: text
    Zaloguj się, aby zobaczyć kod

    które de facto po odpowiednim sumowaniu daje 1 sek (wiadomo o co chodzi), chciałem w programie zrobić coś takiego, że np. po naciśnięciu przycisku zapala się podświetlanie LCD na powiedzmy 30 sek, a w tym czasie program głowny jest wykonywany normalnie, i jak odmierzy te 30 sek, to LCD gaśnie.
    Jednak w momencie pojawiania się impulsów na serwo, LCD i tak gaśnie...
    Serwo mam ustawione na
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Czy da się to obejść? Próbowałem nawet ustawić tak samo Timer1 jak Timer0, ale to nic nie daje...

    -=pozdrawiam=-
    Marcin
  • #10 9384553
    Szumlus
    Poziom 17  
    Najprawdopodobniej jest gdzieś błąd w kodzie tak sytuacja nie powinna mieć miejsca. Sprawdź czy to "podświetlenie" jest przypisane do dobrego wektora przerwania (Timer1 w Twoim przypadku).
    Jeśli możesz to wrzuć cały kod wtedy coś więcej można będzie powiedzieć.

    pozdrawiam,
    Marcin
  • #11 9384698
    marrog
    Poziom 22  
    Hejka

    Podświetlanie już działa na zadany czas ;-) faktycznie znalazłem błąd w kodzie.
    Jednak teraz gdy załącze podświetlanie i program ma się wykonywać przez dany czas, to nie działa mi pomiar temp z DS18B20. Jak usunę pomiar, to program działa normalnie, wykonuje wszystkie podprogramy. Doszedłem do tego, że przerwanie powoduje, że komenda 1Wreset nie działa, czyli nie ustawia linii DQ na 480us, bo zwraca mi zmienna Err=1.

    Musiałbym zatrzymać Timer1 aby wejść do pomiaru temp i przy wyjściu wystartować ponownie....
    Czy to da się obejść?? Może musiałbym zmienić czas przerwania dla Timer1 czyli na więcej niż 480us??
    Zmieniłem parametry dla Timer1 na
    Kod: text
    Zaloguj się, aby zobaczyć kod

    czyli przepełnienie co 4ms i teraz wszystko działa ;-)
  • REKLAMA
  • Pomocny post
    #12 9386061
    Szumlus
    Poziom 17  
    Witam,

    Magistrala 1-wire posiada dość mocne restrykcje czasowe co do trwania poszczególnych stanów na DQ. Przerwanie Timera, a wiec wykonanie podprogramu związanego z obsługa przerwania, powodowało zmianę długości tych czasów, gdyż są one generowane softwaerowo przez Bascom.
    Czasem może się zdarzyć że kolizja i tak wystąpi pomimo że teraz wszystko jest ok. Wszystko zależy od tego kiedy przerwanie "wystrzeli".
    Proponuje dopisać procedurę, która sprawdzi poprawność pomiaru z DS-a i w razie potrzeby powtórzy pomiar, zwłaszcza że korzystasz z serw a funkcja servos w Bascom, również korzysta z przerwań i może się zdarzyć że zakłóci pomiar.

    Pozdrawiam,
    Marcin
  • #13 9389043
    marrog
    Poziom 22  
    No właśnie podczas wieczornych (nocnych) testów, w kilku momentach uzyskałem odczyt z DS-a -132* czyli źle coś odmierzył w momencie wystąpienia przerwania.
    Poczytałem trochę Ds od DS18b20 i tematy na elektrodzie i wstawiłem pętelkę z CRC. Teraz chyba będzie działać tak jak się należy.
REKLAMA