Skocz do zawartości

Sterowanie jazdą robota po RS-232


newman

Pomocna odpowiedź

witam,
mam złożonego robota na przerobionych serwach bez elektroniki ( l293dne ), do tego moduły radiowe MOBOT-RCR-V2 i MOBOT-RCR-USB-V2. Wszystko ładnie działa, do tej pory sterowanie odbywa się na zasadzie odbioru znaku po RS-232 na procku 8 bitowym ( tu akurat attiny2313 ) i w przerwaniu ustawieniu odpowiedniego trybu jazdy:

ISR(USART_RX_vect)
{
  char ReceivedByte;
  ReceivedByte = UDR; 

if(ReceivedByte==0x5D) { if(OCR1A<10000)OCR1A+=100;
if(OCR1B<10000)OCR1B+=100; }
if(ReceivedByte==0x5B) { if(OCR1A>0) OCR1A-=100;
if(OCR1B>0) OCR1B-=100;}

if(ReceivedByte==0x77) { PORT_STER = 0x21;}// 0010 0001
if(ReceivedByte==0x73) { PORT_STER = 0x42;} // 0100 0010
if(ReceivedByte==0x61) { PORT_STER = 0x41;}// 0100 0001
if(ReceivedByte==0x64) {  PORT_STER = 0x22;} // 0010 0010

if(ReceivedByte==0x78) {  PORT_STER =0x00;}
} 

czyli po wciśnięciu odpowiedniego klawisza jedzie do przodu/tyłu/obrót w lewo/obrót w prawo - praca ciągła aż do wystąpienia znaku stop i wyzerowania portu sterującego.

Tutaj chciałbym zrobić coś na zasadzie wciskam odpowiedni klawisz i jedzie do przodu, puszczam go to przestaje jechać. To są praktycznie cały czas wysyłane znaki po rs'ie, więc myślałem, że najprościej można by było zrobić to tak:

 if ( znak==do_przodu ) { jedz_do_przodu(); delayms(x) ; stop(); } 

gdzie x to dobrane praktycznie opóźnienie ( może ten delay powinien być zsynchronizowany z częstotliwością odbioru znaku ? )

nie wiem czy jest to eleganckie rozwiązanie i czy nie można tego zrobić jakoś lepiej ?

I druga sprawa jak by tu dodać płynne ruszanie, czyli trzymam klawisz zaczyna się rozpędzać, puszczam to staje.

I kolejne pytanie: mam joystick usb, który bardzo łatwo można uruchomić w LabView, gdzie zczytywane są wartości jego położenia X, Y. liczby z zakresu -32 000 do +32 000 z groszami ( 16 bitów ). Można bardzo łatwo otworzyć port szeregowy w LV i przesłać w tym wypadku 4 pakiety danych ( razem 32 bity,po 2 pakiety na oś ). I tutaj też moje pytanie jak to dobrze zrealizować, że np. im bardziej wychylam do przodu tym z większą prędkością zaczyna jechać, potem np. na maksymalny wychyleniu do przodu skręcam w lewo ( pojawia się składowa X ) i zaczyna skręcać. Maksymalne wychylenie w lewo to np. obrót w lewo w okół swojej własnej osi. Może wykonać odpowiednią tabelę z warunkami wartości położeń, i w każdej komórce tej tabeli było by również odpowiednie ustawienie wypełnienia PWM ?

Jak tutaj jeszcze zrealizować przesłanie 32 bitów ? wcisnąć to jakoś do jakiegoś bufora, po odebraniu 32 bitów wyzerować ten bufor i zapisywać do niego od nowa ?

Z góry dziękuję za odp. i wszelkie podpowiedzi

pozdrawiam

Link do komentarza
Share on other sites

Możesz napisać sobie aplikację sterującą na kompa. Kiedy naciskasz klawisz, to wysyła komendę jazdy w odpowiednim kierunku, kiedy go puszczasz wysyła komendę stop. W .net jest gotowy komponent do obsługi portu szeregowego, więc taki program można w godzinkę napisać

Dodatkową zaletą takiego rozwiązania jest to, że możesz sobie łatwo rozbudować komendy wysyłane po RSie. Np. wysyłasz komendę "jedź naprzód" a po niej parametr z jaką prędkością.

Link do komentarza
Share on other sites

hej,
no w labview już mam ogarnięte otwieranie portu szeregowe, także z tym nie ma problemów, kwestia tego jak to dokładnie wysłać i w jaki sposób to zrealizować i zinterpretować na uC.

pozdro

[ Dodano: 25 Wrz 10 11:11 ]

może jak pokażę jadącego robocika, to ktoś chętniej pomoże 🙂

całość jeździ na algorytmie podanym wcześniej

 if ( znak==do_przodu ) { jedz_do_przodu(); delayms(x) ; stop(); } 

ale coś zrywa przy ruszaniu, tzn. lekko rusza , chwila stopu i potem już jedzie normalnie, aż do puszczenia klawisza.

pozdrawiam

Link do komentarza
Share on other sites

Ja bym na twoim miejscu zrealizował radę mactra, na uC wszystko działa tak jak wcześniej, tyle, że sygnał stopu jest wysyłany po puszczeniu klawisza, wszystko powino działać i nie wysyłasz niepotrzebnie nadmiaru danych.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.