KD93 Czerwiec 28, 2011 Udostępnij Czerwiec 28, 2011 A właśnie jak KD93 udało się sterować 12 serwami w skarabeuszu z użyciem jednego procesora bo przejrzałem opis tego robota i inforamacji na ten temat nie znalazłem? Rzekłbym: "normalnie", po prostu skonfigurowałem 13 serw (teraz jest jeszcze jedno w chwytaku). Trzeba mieć tylko osobne i bardzo stabilne zasilanie dla nich, najlepiej z kondensatorem przy każdym serwie (chociaż ja nie mam), a przynajmniej jakieś większe elektrolity przy źródle. Config Servos obsługuje do 16 serw. W skrócie: konfiguruje się tak samo jak np 2 serwa, tyle że więcej 😋 Jak ktoś będzie bardzo chciał to mogę poszukać programu i zamieścić fragmenty. Cytuj Link do komentarza Share on other sites More sharing options...
Wojtek Czerwiec 28, 2011 Autor tematu Udostępnij Czerwiec 28, 2011 KD93 Inni koledzy z tego forum skutecznie mnie przekonali żebym nie korzystał z poleceń Config Servos tylko abym zrealizował to samemu na timerach. U mnie na jeden procek będzie przyopadały max 6 serwa (na drugi 5 serw). Byłbym bardzo wdzięczny jakby udało Ci się znaleźć ten program. Czy wystarczy wewnętrzny kwarc 1Mhz czy bez zewnętrznego się nie obejdzie? Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Czerwiec 28, 2011 Udostępnij Czerwiec 28, 2011 Zdecydowanie lepsze zewnętrzne taktowanie, ja mam 20MHz ALE nie testowałem na niższych, możliwe że tez działa. "Podstawowe" AVR'y mają taktowanie chyba do 16MHz, przy nim na pewno zadziała. Te wszystkie megi 48, 88 itd mają już do 20MHz. Już szukam programu. Cytuj Link do komentarza Share on other sites More sharing options...
pawel Czerwiec 28, 2011 Udostępnij Czerwiec 28, 2011 Sześć serwo spokojnie obsłużysz, chociaż ja też odradzam tą funkcje, ale jak już to robisz w bascomie to dobrze jest ją wykorzystać, a przynajmniej sprawdzić czy działa. Ja obsługiwałem najwięcej 5 i wszystko chodziło. Teraz to robię kompletnie inaczej, ale w c, stosuje PWM o częstotliwości 50Hz. Jest to łatwo zrobić w trybie 15 licznika 1. W rejestrze ICR mam zdefiniowaną częstotliwość, a w OCR czas trwania impulsu. Jak zastosuje się kwarc 1MHz lub 10MHz, to łatwo się określa wszystko, bo wartości które ustawiamy, to czas impulsu przemnożony przez wielokrotność 10(zależnie od kwarcu). Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Wojtek Czerwiec 28, 2011 Autor tematu Udostępnij Czerwiec 28, 2011 Natomiast do obsługi serw procesor można spokojnie taktować 1MHz, w zupełności wystarczy, a jeszcze między obsługą serw procesorowi będzie się nudzić. Czyli jak z tym kwarcem? Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Czerwiec 28, 2011 Udostępnij Czerwiec 28, 2011 Config Portd.4 = Output 'serwa HXT900 Config Portd.7 = Output Config Portb.5 = Output Config Portb.4 = Output Config Portb.3 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Servos = 13 , Servo1 = Portd.7 , Servo2 = Portb.1 , Servo3 = Portb.3 , Servo4 = Portc.2 , Servo5 = Portc.1 , Servo6 = Portb.5 , Servo7 = Portb.0 , Servo8 = Portb.2 , Servo9 = Portb.4 , Servo10 = Portc.3 , Servo11 = Portc.4 , Servo12 = Portd.4 , Servo13 = Portc.5 , Reload = 8 S1 Alias Servo(1) 'aliasy serw S2 Alias Servo(2) S3 Alias Servo(3) S4 Alias Servo(4) S5 Alias Servo(5) S6 Alias Servo(6) S7 Alias Servo(7) S8 Alias Servo(8) S9 Alias Servo(9) S10 Alias Servo(10) S11 Alias Servo(11) S12 Alias Servo(12) Szczeki Alias Servo(13) S1 = 112 'wyzerowanie serw S2 = 132 S3 = 111 S4 = 126 S5 = 112 S6 = 130 S7 = 110 S8 = 120 S9 = 130 S10 = 130 S11 = 120 S12 = 110 Szczeki = 150 '______________________ PODPROGRAM CHWYTANIA ____________________________ Chwyt: Do Klawisz = Inkey() Print Szczeki If Klawisz = "x" Then Szczeki = Szczeki - 5 If Klawisz = "z" Then Szczeki = Szczeki + 5 If Szczeki > 160 Then Szczeki = 160 If Szczeki < 100 Then Szczeki = 100 If Klawisz = "w" Then S1 = S1 + 5 S3 = S3 + 5 S4 = S4 - 5 S6 = S6 - 5 Elseif Klawisz = "s" Then S1 = S1 - 5 S3 = S3 - 5 S4 = S4 + 5 S6 = S6 + 5 Elseif Klawisz = "a" Then S1 = S1 + 5 S2 = S2 + 5 S3 = S3 - 5 S4 = S4 + 5 S5 = S5 + 5 S6 = S6 - 5 Elseif Klawisz = "d" Then S1 = S1 - 5 S2 = S2 - 5 S3 = S3 + 5 S4 = S4 - 5 S5 = S5 - 5 S6 = S6 + 5 Elseif Klawisz = "c" Then Gosub Zero Elseif Klawisz = "j" Then S7 = S7 - 5 S8 = S8 - 5 S9 = S9 - 5 S10 = S10 - 5 S11 = S11 - 5 S12 = S12 - 5 Elseif Klawisz = "g" Then S7 = S7 + 5 S8 = S8 + 5 S9 = S9 + 5 S10 = S10 + 5 S11 = S11 + 5 S12 = S12 + 5 Elseif Klawisz = "h" Then S7 = S7 + 5 S8 = S8 + 5 S9 = S9 + 5 S10 = S10 - 5 S11 = S11 - 5 S12 = S12 - 5 Elseif Klawisz = "y" Then S7 = S7 - 5 S8 = S8 - 5 S9 = S9 - 5 S10 = S10 + 5 S11 = S11 + 5 S12 = S12 + 5 Elseif Klawisz = "q" Then Gosub Wybor End If Waitms 10 Loop OK, tłumaczę. To są fragmentu dotyczące tylko ustawień serw i kilka przykładów. Na początku ustawiasz wszystkie piny od serw jako wyjściowe, później jest instrukcja Config Servos (Reload dobierałem doświadczalnie, żeby zakres wychyleń mi odpowiadał wartościami - chyba było między 50 a 150). Później zmieniam sobie te niewygodne nazwy na wygodniejsze, w domu miałem kartkę z ponumerowanymi wszystkimi serwami, więc bardzo mi to upraszczało pracę. Następnie jest przykład ustawienia serw w danej pozycji. Jak widać jest to banalne, bo po prostu wpisuje się jakąś wartość i serwo się w niej ustawia. W tym przypadku jest to pozycja "zerowa", czyli robot stoi w położeniu początkowym, z którego będą dodawane lub odejmowane wartości, dzięki czemu serwa będą się poruszać. Na końcu jest podprogram chwytaka, czyli reakcja serw na klawisze, w tym programie są też nachylenia robota, które są konieczne do chwycenia przedmiotu. Szybkość pracy serw można spowolnić, ale troszkę już to komplikuje program, bo trzeba dodawac opóźnienia czasowe pomiędzy małe wartości wychylenia (czyli jakby pulsacyjnie, przy pracy serwa to się później "zlewa"), jakby cię to zagadnienie interesowało to zapraszam na GG, bo ciężko mi tu będzie zamieszczać większe fragmenty programu i tłumaczyć. Co do Config Servos - nie jest to instrukcja idealna, pozwala na szybkie i proste wysterowanie serw, jednakże nie mamy nad nią żadnej innej kontroli poza ustawieniami. Nadaje się do Bascomowych projektów, natomiast jeśli będziesz chciał kiedyś napisać obsługę serw w C to i tak to musisz zrobić na Timerach. Póki używasz do 16 serw i piszesz w Bascomie, to będzie ona zadowalająca. [ Dodano: 28-06-2011, 11:33 ] Co do kwarcu, nie testowałem na niższych, więc nie mogę Ci obiecać, że będzie działać. Możliwe że tak. Natomiast przy 12-16MHz będzie ci działać na pewno. [ Dodano: 28-06-2011, 11:40 ] Const W = 30 'stała podniszenia nóg Const P = 15 'stała wychylenia nóg Const N = 20 'stała podnoszenia nóg w nachyleniach Const Pp = 20 'stała wychylenia nóg podnoszeniu/opuszczaniu korpusu Const Predkosc = 4000 'stała prędkości robota 'nachylenia Nachyl_przod: Z = 1 For Z = 1 To N S1 = S1 + 1 S3 = S3 + 1 S4 = S4 - 1 S6 = S6 - 1 Waitus 2 * Predkosc If Z = N Then Exit For Next Z Return Nachyl_tyl: Z = 1 For Z = 1 To N S1 = S1 - 1 S3 = S3 - 1 S4 = S4 + 1 S6 = S6 + 1 Waitus 2 * Predkosc If Z = N Then Exit For Next Z Return Nachyl_prawo: Z = 1 For Z = 1 To W S1 = S1 - 1 S2 = S2 - 1 S3 = S3 + 1 S4 = S4 - 1 S5 = S5 - 1 S6 = S6 + 1 Waitus 2 * Predkosc If Z = W Then Exit For Next Z Return Nachyl_lewo: Z = 1 For Z = 1 To W S1 = S1 + 1 S2 = S2 + 1 S3 = S3 - 1 S4 = S4 + 1 S5 = S5 + 1 S6 = S6 - 1 Waitus 2 * Predkosc If Z = W Then Exit For Next Z Return To są instrukcje spowalniające pracę serw w moim programie. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Wojtek Czerwiec 28, 2011 Autor tematu Udostępnij Czerwiec 28, 2011 KD93 A gdzie dyrektywa Enable Interrupts odblokowująca timery z których korzysta polecenie config servos, bo nie mogę się jej dopatrzyć? I do zmiennej Servo można maksymalnie wpisać 256 i minimalnie 0 co odpowiada skarajnym wychyleniom serwa? Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Czerwiec 28, 2011 Udostępnij Czerwiec 28, 2011 Zapomniałem o tym Enable Interrupts, tzn w programie mam tylko w innym miejscu i zapomniałem o tym dopisać. Nie, skrajne wychylenia serwa trzeba niestety sprawdzić doświadczalnie, nigdy nie będzie to 0 i 256. Przy skrajnym położeniu serwo zaczyna tykać, łatwo więc znaleźć te wartości. Na początek najlepiej wpisać wartość z przedziału 100-120 i dodawać lub odejmować po 5-10, do momentu w którym serwo zacznie tykać. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!