Skocz do zawartości

Kalibracja dwóch serw HXT900


rafmart

Pomocna odpowiedź

Czołem,

Próbuję z synem zabrać się za zrobienie jeżdżącego robota. Jesteśmy totalnie zieloni. Przerobiłem dwa serwa takie jak w temacie - usunąłem blokadę i zablokowałem potencjometr, który jest jedną z osi. Oba serwa przy 90 ładnie się nie ruszają. Dalej jest jednak trochę gorzej. Przy 91 jeden już zaczyna się kręcić ale drugi dalej stoi. Dalej oba już się kręcą ale oczywiście z niewielką różnicą w prędkości. Mam zamiar sterować całością poprzez Arduino. Da się w prosty sposób jakoś skalibrować oba serwa żeby kręciły się tak samo i robot nie skręcał? Czy pozostaje jedynie ponowna regulacja potencjometrów? Jednak jak widzę jak jest czuły ten potencjometr to obawiam się, że i tak może nic z tego nie wyjść. Samo serwo jest bardzo małe i dodanie tam rezystorów też będzie ciężkie.

Dzięki za pomoc.

Rafał

Link do komentarza
Share on other sites

Możesz spróbować zrobić to programowo. Sprawdź w jakich zakresach serwo działa i przeskaluj podawanie prędkości na ten zakres. Dodatkowo będziesz musiał ograniczyć zakreś od góry w szybszym serwie - przy pełnym wychyleniu z pewnością jedno kręci się trochę szybciej.

Metoda ta nigdy nie da Tobie idealnie prostego toru jazdy, ale powinna sporo pomóc jak masz duże różnice.

Inna możliwość to jak nie masz konkretnego planu zbuduj robota line-follower. Robot podąża po linii, więc przy dobrym algorytmie sterowania sam będzie się ustawiał na linię i jechał prosto. Różnica w prędkości serw nie będzie miała tutaj istotnego znaczenia.

Link do komentarza
Share on other sites

Dzięki za odpowiedź.

Od początku myślałem o programowym skalowaniu. Okazało się jednak, że metoda write() w bibliotece Servo z arduino przyjmuje jako parametr jedynie int. Patrzyłem dalej i metoda ta woła map, która również wymaga int'ów. Więc nic mi z mapowania nie wyjdzie bo nie przeskaluję sobie np. z 91 na 91.8. Mogę skalować tylko z int na int a takie skalowanie będzie niedokładne i nic mi w moim przypadku nie da (małe różnice między dwoma serwami).

W zasadzie myślałem, że mój problem jest jakimś standardem. Wszystkie jeżdżące i skręcające roboty muszą mieć idealnie zsynchronizowane serwa. Tymczasem szukałem w sieci, na Youtube i jakoś ciężko. Może w ogóle inaczej powinienem się za to zabrać? Do głowy przychodzą mi takie pomysły:

1. biorę jedno serwo za wzorcowe i próbuję w drugim zablokować potencjometr w takiej pozycji żeby oba kręciły się identycznie. Jest to w ogóle wykonalne? Teraz już tego nie przetestuję bo skutecznie zablokowałem potencjometr 😉

2. Większe serwo, gdzie wytnę potencjometr i zastosuję dodatkowe rezystory. Ale rezystory mają różne tolerancje więc jest szansa, że i tak będą się inaczej kręcić.

3. kupuję gotowe silniczki DC z przekładnią. No ale czy na pewno będą się kręcić tak samo? 🙂

Rafał

Link do komentarza
Share on other sites

Co do twoich pytań:

1. Wykonalne.. raczej słabo.

2. Bez problemu dostaniesz rezystory z tolerancja 1%, co więcej, chwila z miernikiem i możesz dobrać dwa praktycznie identyczne (typu 0,1%). Co innego, że rezystory też się zmieniają po czasie, pod wpływem temperatury itd. a dodatkowo identyczne rezystory nie gwarantują identycznej prędkości chociażby z powodu na... silnik.

3. Silnik.. jak w pkt. 2 nigdy nie będzie identyczny, więc zawsze będziesz miał różne prędkości. Najczęściej jednak różnice tutaj są już dosyć ograniczone i tragedii nie ma. Zrobisz jednemu PWM maks na 255, drugiemu na 240 i robot będzie jeździł prosto...

Co do int...

Jak masz skalę 0..255 to rzeczywiście trochę mało, ale z tego co rozumiem to Twój robot dosyć mocno skręca, więc nawet taka niedokładność w ustalaniu szybkości silnika może zdecydowanie zmniejszyć skręcanie pojazdu w czasie jazdy prosto.

Kompletne wyeliminowanie problemu to zastosowanie enkoderów na osiach. Jest to niestety już trochę bardziej skomplikowane i drogie...

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

Według mnie, jedyną możliwością na uzyskanie prostego toru ruchu jest zastosowanie sprzężenia zwrotnego od silników/kół, czyli enkoderów. Bez tego raczej nie zmusisz dwóch silników do kręcenia się z taką samą prędkością.

Pozostaje jeszcze możliwość mechanicznego sprzężenia dwóch kół (mechanizm różnicowy?), ale to pewnie będzie jeszcze trudniejsze od enkoderów.

Link do komentarza
Share on other sites

Ogólnie problem jeżdżenia prosto jest znacznie bardziej skomplikowany niż by się to mogło wydawać. Nawet po zastosowaniu enkoderów, które faktycznie pozwalają zsychronizować prędkości obrotowe, może okazać się, że koła mają różne średnice, albo nie są równolegle, w wyniku czego robot nie będzie jechał idealnie prosto.

Link do komentarza
Share on other sites

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.