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

Sterowanie 3 serwami przez RS232

19 Cze 2011 18:17 3099 11
  • Poziom 9  
    Witam, jest to mój pierwszy post dlatego proszę o wyrozumiałość. Zabieram się do pisania pracy inżynierskiej, jako temat mam sterowanie pozycyjne w trój wymiarze. Ogólnie chodzi o to żeby podać, w programie napisanym na komputerze, punkt w przestrzeni dla manipulatora, sam komputer wylicza wartości kątów dla 3 serw (kinematyka odwrotna nie powinna być problemem) i później.. no właśnie, mam dwa pomysły. Chciałem zrobić układ pod port szeregowy RS232 który będzie odbierał wartości 3 kątów (wysyłane jedna po drugiej oddzielane jakimiś znacznikami aby można było się zorientować która wartość do którego serwa) i na podstawie odebranych wartości generował sygnały PWM sam, albo za pomocą jeszcze jednego procesora, aby jeden był tylko od transmisji drugi tylko od sterowania. Jednak zastanawiam się czy nie jest to trochę przerost formy nad treścią ponieważ czytałem że jest możliwe generowanie sterowania serwami przez port LPT bezpośrednia na napędy (bezpośrednio to znaczy oczywiście po odpowiedniej korekcji napięcia) lub też podawanie wartości kątów przez port LPT do zewnętrznego układu. Teraz rodzi się pytanie do doświadczonych forumowiczów, co myślicie o moich pomysłach?, a może ktoś z was robił coś podobnego i ma lepsze pomysły.

    Pozdrawiam
  • MetalworkMetalwork
  • Poziom 39  
    Nie ma potrzeby stosowania dwóch mikrokontrolerów , nie wiem co zastosujesz do pomiaru kątów jeżeli wystarczy Ci ok. 270° to zupełnie wystarczą potencjometry i tak ruch masz ograniczony kątem obrotu danego serwa .
    Moja propozycja to pomiar kątów potencjometrami następnie odczyt z wykorzystaniem przetwornika ADC mikrokontrolera wysłanie danych do PC , z PC nie PWM tylko obliczona wartość czasu dla danego serwa na jej podstawie mikrokontroler wysteruje serwo . Można jeszcze inaczej czas impulsów sterujących dane serwo będzie informacją o położeniu danego serwa . Tak więc RS232 bez problemu da radę obsłużyć takie rozwiązanie , nie wiem jak chciałeś rozwiązać to z LPT masz w podstawowej konfiguracji 8bitów cyfrowych , czyli 3 bity na PWM dla serw pozostałe bity na informacje o położeniu w jakiej formie . Pamiętaj o tym że serwo musi otrzymywać sygnał cały czas a generowanie go z PC nie zawsze jest takie pewne , lepiej jak tym zajmie się tylko mikrokontroler w którym przy błędnych danych lub braku transmisji nie zrobi nic , pozostawi ostatnie dobre wartości lub zrobi cokolwiek innego co mu zaprogramujesz .
  • MetalworkMetalwork
  • Poziom 9  
    zastanawia mnie tylko to dlaczego piszesz o potencjometrach jako sprzężeniu zwrotnym?, przecież na serwa podaje tylko daną wartość PWMa i one robią juz konkretną wartość kąta zależną właśnie od wypełnienia, nie zależy mi na aż takiej dokładności. Myślałem tylko o tym aby podawać na okrągło na serwa konkretną wartość początkową i jak otrzymam z komputera wartość kąta to wtedy sterując PWM sprowadzam jego wartość do spodziewanej dla danego kąta, oczywiście, nie za szybko żeby fizycznie było to tako jako stabilne. A jeżeli chodzi o LPT to chyba się z tobą zgodzę, nie bardzo ufam bezpośredniemu sterowaniu za pomocą komputera, co najwyżej jakbym miał problemy z komunikacją przez RS232 to użyłbym równoległej transmisji do podawania konkretnych kątów do procesora na zewnątrz. Bo trochę martwi mnie to iż przez RS232 mogę pojedynczo wysłać jedynie 8 bitów, przez co muszę oddzielić informację o konkretnym serwie i samą wartość kąta, gdyby była możliwość wysłania jednorazowo ciągu 16 bitów, to np pierwsze 8 były by wartością kąta (255 spokojnie powinno wystarczyć) a pozostałe informacją o konkretnym serwie (8 bitów to tutaj i tak za dużo). Dlatego skoro już na samym stracie mam ograniczenie takiej natury to chyba jednak zdecyduje się na port LPT jak ten łatwiejszy. Co o tym myślicie?
  • Poziom 39  
    Chyba nadal się nie rozumiemy :
    Cytat:
    A jeżeli chodzi o LPT to chyba się z tobą zgodzę, nie bardzo ufam bezpośredniemu sterowaniu za pomocą komputera

    A co ja napisałem ....... tylko to że PC wyliczy potrzebne Ci dane a nie będzie sterował bezpośrednio PWM dla serw !
    Cytat:
    Bo trochę martwi mnie to iż przez RS232 mogę pojedynczo wysłać jedynie 8 bitów, przez co muszę oddzielić informację o konkretnym serwie i samą wartość kąta, gdyby była możliwość wysłania jednorazowo ciągu 16 bitów, to np pierwsze 8 były by wartością kąta (255 spokojnie powinno wystarczyć) a pozostałe informacją o konkretnym serwie (8 bitów to tutaj i tak za dużo).

    Tego to już zupełnie nie rozumiem , co niby ma Ci wysyłać serwo dane o swoim położeniu ......... wydaje mi się że za bardzo nie wiesz co chcesz .
    Faktyczny stan położenia możesz określić tak jak pisałem wcześniej lub za pomocą enkodera co za problem wysłać 3 ramki danych z przyporządkowaniem analogicznie będzie z sterowaniem serw np:
    dane położenia
    - 1K ( 8 bitów )
    - 2K ( 8 bitów )
    - 3K ( 8 bitów )
    dane dla serw
    - 1S (8 bitów )
    - 2S ( 8 bitów)
    - 3S ( 8 bitów )
    żaden problem zinterpretować dwie pierwsze dane tak aby były przyporządkowane konkretnej funkcji tak więc w czym problem .
  • Poziom 9  
    z tym RS232 nie o to mi chodzi, serwo nic mi nie wysyła i nic nie będzie bo przecież nie potrafi, ale nie potrafię zrozumieć dlaczego upierasz się z tymi danymi o położeniu, np z enkodera, przecież po to serwo samo w sobie ma sprzężenie za pomocą potencjometru, abym ja już się dokładną wartością kąta nie przejmował. Podaję wypełnienie takie czy takie i mam kąt taki czy taki i tyle wystarczy. A jeżeli mowa o komunikacji to myślałem o tym aby bajt o wartości kąta poprzedzać bajtem informującym zewnętrzny procesor do jakiego serwa ma ono trafić aby nie było sytuacji że serwo które miało obrócić się o 15 stopni obraca sie tak jak miałoby sie obrócić inne serwo.

    Pozdrawiam
  • Poziom 39  
    Jeżeli masz mieć konkretne dane o położeniu to musisz mieć jakikolwiek pomiar jak wystarczy Ci tylko interpretacja czasu sterowania serwa to co innego , w takim przypadku wystarczy Ci prosty sterownik serw przez RS232 są nawet gotowe zestawy , przy samodzielnej budowie zasada dokładnie taka sama jak opisałem wcześniej nazwa ( symboliczna ) serwa dane do sterowania . Tylko skąd program w PC będzie wiedział że to co wysłał do serwa jest fizycznie wykonane .
  • Poziom 9  
    tak też zrobię, jadna ranka informacja o którą oś chodzi, druga ramka inforamcja o kącie i tak w kółko. Jeżeli chodzi o sam układ to myślałem o Atmega8, bo jest popularny, ma programowalny USART i zawsze znajdę informację w razie problemów, jego zadaniem będzie odbieranie danych po RSie i generowanie 3 niezależnych PWMów w zależności od tych danych. Komputer będzie generował kinematykę odwrotną i robił jakąś ładną grafikę o ruchach manipulatora. Jak tylko wezmę się do roboty to opiszę moje poczynania dla potomnych

    Pozdrawiam
  • Poziom 35  
    Jak możesz użyć gotowego rozwiązania to spójrz na serwokontrolery maestro jakie sprzedaje. Mają kilka fajnych cech:
    -steruje serwami w szerokim przedziale czasów i z dużą dokładnością (wersje od 6 do 24 serw)
    -wolne wyjścia można wykorzystać jako wyjścia cyfrowe, wejścia cyfrowe lub wejścia analogowe - np. do sterowania elektromagnesem na chwytaku (z pomocą tranzystora), sprawdzaniem stanu różnych czujników itp.
    -całość działa po USB - więc nie ma problemów z przejściówkami i do tego jest gotowy soft jak i biblioteka żeby można było łatwo sterować urządzeniem z własnego oprogramowania
    -istnieje możliwość zapisania sekwencji ruchów i odtwarzania ich na urządzeniu bez pomocy komputera
  • Poziom 9  
    płytka bardzo ciekawa, to Ci muszę przyznać, jednak ma to być praca inżynierska i muszę wykonać to sam, bo z tym układem to miałbym naprawdę mało do roboty :) mimo wszystko dziękuje za zainteresowanie

    Pozdrawiam
  • Poziom 9  
    Witam, zabieram się właśnie za budowę tak programatora jak i samego układu. Programator jaki będę budował znalazłem na takiej stronie:

    http://ajd.czest.pl/~pawel.borkowski/wyklady/avrisp/budo_pro.html

    chciałem programować w c lub c++, zatem chciałbym użyć środowiska "avr studio" dlatego mam pytanie czy środowiska z tym programatorem będą współpracować? to znaczy czy bezpośrednio ze środowiska będę mógł programować układ podpięty pod LPT czy tylko wypluje mi program a sama transmisja odbywa się za pomocą innego oprogramowania?
    do tego płytke testową z portem RS232 i diodami pod którą podłączę później moje serwa, coś takiego:

    http://www.forbot.pl/forum/upload_img/obrazki/IMG_4b901eea25afb2736.png

    Jeżeli mowa o zasilaniu myślałem o kupieniu używanego zasilacza komputerowego i korzystać z jego wyprowadzeń tak do programatora, układu i zasilania serw. Co o tym myślicie?

    Pozdrawiam
  • Pomocny post
    Poziom 39  
    Programator to typowy STK200/300 powinien działać z AVR-Studio tylko poczytaj sobie informacje na forum mikrokotrolery bo z najnowszymi wersjami bywa różnie , w razie problemów jest cała masa programów obsługujących ten typ programatora .
    Zasilacz AT czy ATX do testów raczej odradzam , po pierwsze " goły zasilacz " nie ma żadnej filtracji napięcia po drugie prąd zwarcia zależnie od modelu dla 5V to 20-30A a nawet więcej , dodatkowo zasilacz nie lubi gwałtownych zmian prądu obciążenia z czym będziesz miał do czynienia przy sterowaniu serwami . Nie przekreśla to jego zastosowania ale wymaga dodania układu filtrów najlepiej LC oraz dobrze dobranego zabezpieczenia prądowego choćby w postaci bezpieczników .
    Kolejna sprawa to zasilanie z jednego źródła serw i mikrokotrolera to zrodzi kolejne problemy , skoro tak bardzo chcesz zastosować ten zasilacz to wykorzystaj +12V do stabilizacji napięcia +5V dla mikrokotrolera a napięcie +5V do zasilania serw oczywiście dokładając przynajmniej dość dużej wartości kondensatory EL + ceramiczne . Osobiście jednak radzę typowe zasilacze transformatorowe szczególnie w fazie testów i prób .