Skocz do zawartości

Napęd czterokołowy - wątpliwości początkującego


piechnat

Pomocna odpowiedź

Dzień dobry.

Moja pierwsza konstrukcja pojazdu kołowego – aspirującego do bycia robotem 😃 (okrągłe podwozie, dwa koła napędowe + przednie i tylne koło podporowe) – nie zdała egzaminu, ponieważ nie radzi sobie z progami (w mieszkaniu) oraz jazdą po linii prostej. Z tego względu w kolejnym podwoziu chciałbym użyć enkoderów oraz czterech kół napędowych. Tutaj pojawiają się wątpliwości.

Jeśli przy podaniu tej samej wartości PWM silnik lewego koło obraca się z inną prędkością niż prawego, to znaczy, że w nowej konstrukcji przednie i tylne koło – nawet przy podłączeniu pod ten sam kanał sterownika silników – mogą mieć identyczny problem?

Pytanie:

Czy obroty przedniego i tylnego koła (na jednym kanale) jakoś się uśrednią zgodnie z niewyjaśnionymi prawami przyrody? 😃

A więc na cały napęd czterokołowy wystarczą mi dwa enkodery?

Czy jedno koło będzie jechać trochę szybciej, a drugie będzie trochę szorować po podłodze? A więc należy użyć łącznie czterech enkoderów, żeby to wszystko uśrednić?

PS:

Czy są jakieś oferty silników z przekładnią i obustronnym wałem tańsze od Pololu (ok. 70zł), a trochę szybsze i mocniejsze od tych żółtych zestawów za kilka złotych (https://abc-rc.pl/Naped-DC-6V-kolo-65mm).

Może jest jakieś lepsze rozwiązanie napędu czterokołowego przy użyciu tylko dwóch silników?

Link do komentarza
Share on other sites

Będą szorować. Albo zostaw dwa koła nienapędzane, albo załóż enkodery na wszystkie.

Dziękuję za odpowiedź, to jeszcze dopytam w tym samym wątku.

W moim przypadku enkoder będzie stanowić tarcza (20 otworów) i czujnik szczelinowy. Rozumiem, że obsługa ujednolicenia prędkości sprowadza sie do zliczania przejechanych otworów na tarczach i korygowania PWM silników do jednego wybranego. Np.

Lpwm = Ppwm = 200

Lenkoder = Penkoder = 0

[ podczas zliczania otworow ]

if (Lenkoder - Penkoder > 0) Ppwm++

if (Lenkoder - Penkoder < 0) Ppwm--

Czy dobrze rozumuję?

Jeśli popularne atmegi maja tylko dwa piny do obslugi przerwań, to w przypadku 4 enkoderów podłączyć je jakoś parami, czy lepiej zrobić to na przerwaniu zegara?

Link do komentarza
Share on other sites

Nigdy sam tego nie robiłem, ale do sterowania takimi rzeczami które mają opóźnienie zazwyczaj używa się sterownika PID — to znaczy, że patrzysz nie tylko na aktualną wartość, ale także na to jak ona się zmienia. Na forum jest kilka artykułów wyjaśniających o co chodzi. Oczywiście jest szansa, że taki prosty kod jaki podałeś zadziała na początek wystarczająco dobrze.

Nie potrafię ci pomóc z czytaniem z encoderów — być może ktoś inny coś doradzi. Zawsze masz opcję dołożenia jakiegoś prostego attiny tylko do zliczania impulsów (najlepiej osobny na każdy encoder) i wtedy w głównym programie nie musisz się martwić o przerwania.

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

Jeśli popularne atmegi maja tylko dwa piny do obslugi przerwań, to w przypadku 4 enkoderów podłączyć je jakoś parami, czy lepiej zrobić to na przerwaniu zegara?

Przerwania możesz generować z większej liczby pinów, ale w obsłudze przerwania sam musisz sprawdzać, który pin był źródłem przerwania.

Przeprowadź obliczenia związane z tym, ile czasu procesora zostanie Ci na wykonywanie innych rzeczy niż obsługa enkoderów (przy założeniu maksymalnej prędkości obrotowej). Masz 4 enkodery, 20 przerwań na obrót (40 jeżeli przerwanie będziesz miał na obu krawędziach). Jeżeli będziesz miał np. łączenie 40000 przerwań na sekundę, to policz sobie (uwzględniając czas wykonywania przerwania i czas zmiany kontekstu), czy przy taktowaniu np. 16MHz wyrobisz się ze wszystkim.

Co do regulacji prędkości obrotowej to ja w moim robocie zastosowałem statyczny feedforward (do wyznaczania punktu pracy) + PID do korekty zakłóceń (wynikających z np. nachylenia podłoża, oporu toczenia itd.).

Link do komentarza
Share on other sites

Nie koło, a wał silnika. 15k RPM to sporo, ale nie niemożliwe. Generalnie liczba z rękawa, chodziło o nakłonienie do policzenia, czy na przerwaniach mikrokontroler się wyrobi.

Link do komentarza
Share on other sites

Dziękuję wszystkim za odpowiedzi, udało mi się w końcu zdobyć wszystkie potrzebne elementy do budowy podwozia, skorzystałem z biblioteki PID do Arduino, zrobiłem liczenie prędkości na przerwaniach pinów – wszystko działa względnie dobrze, jednak mam jeszcze jeden problem.

Zauważyłem pewne różnice w mocy silników, zwłaszcza podczas ruszania lub kręcenia piruetów, proporcjonalne do kolejności ich podłączenia. Zasilanie z baterii (4 paluszki) prowadzi do pierwszego sterownika silników, a stamtąd kolejny przewód łączy się z drugim sterownikiem i taka też jest kolejność mocy (1A > 1B > 2A > 2B).

Jak sobie z tym poradzić? Lepsza wydajność zasilania, większa średnica przewodów?

Link do komentarza
Share on other sites

Na początku mam standardowe przewody z koszyka na baterie, później płytka stykowa i standardowe przewody do płytek stykowych. Dalej dosyć duży rozdzielacz, z którego wychodzi już do silników porządny przewód 0.35mm2. Jeśli ma to jakieś znaczenie, to masy dla silników oraz logiki 5v (Arduino, 2xSterownik, 4xCzujnik szczelinowy) są połączone w rozdzielaczu i wszystko wraca do baterii jednym przewodem do płytek stykowych.

Link do komentarza
Share on other sites

Nigdy nie używaj płytek stykowych do zasilania czegokolwiek, a już na pewno niczego powyżej 100mA.

Wymień to na porządne grube przewody, polutuj połączenia albo użyj właściwych wtyczek/gniazdek, a twoje problemy znikną jak ręką odjął.

Link do komentarza
Share on other sites

Ok. Faktycznie doprowadzenie osobnych przewodów zasilania wyeliminowało kilka dziwnych zachowań, jednak problem z nierównoczesnym ruszaniem kół pozostał.

Mam wrażenie, że silniki mają różne progi napięcia, z którego zaczynają się kręcić. PID steruje napięciem płynnie od zera, więc ruszają po kolei, a wspomniana w poprzednim poście kolejność ułożyła się zupełnie przypadkowo.

Niestety nie mogę dać większych wartości Kp, Ki, żeby szybciej ruszało, bo wtedy niektóre silniki wpadają w "huśtawkę", zanim osiągną Setpoint. (Zupełnie nie rozumiem działania Kd?)

Tutaj mam kolejny dylemat. Być może dojdę do tego za trzy dni, ale może ktoś ma już jakieś doświadczenie.

Jak zsynchronizować start kół? Ustalić osobno parametry Kp, Ki dla każdego z silników? Czy nie ruszać tego i jedynie przyjąć indywidualne wartości początkowe PWM (Output), z których rozpocznie działanie algorytm PID?

Link do komentarza
Share on other sites

"Jak zsynchronizować start kół?"

Bez kontroli trakcji każdego koła osobno musisz to robić tylko za pomocą szybkiego załączania mocy takiej by na pewno wszystkie koła ruszyły a i tak nie masz pewności, że zrobią to w tym samym czasie i z takim samym przyspieszeniem. Po prostu żadne dwa silniki, przekładnie czy łożyska nie są identyczne. Istotne jest nawet to, czy dany silnik obraca się w (jego) lewo czy prawo. To samo dotyczy przekładni, bo inaczej osie naciskają na łożyskowania w obudowie. Dla silnika ma też znaczenie w jakiej pozycji zatrzymał się ostatnio, bo funkcja momentu od kąta obrotu wału nie jest płaska i w jednym położeniu jest silniejszy a w innym słabszy. Tanie, trzybiegunowe silniki DC są pod tym względem bardzo ułomne.

Płynne ruszanie zrobisz tylko poprzez sprzężenie zwrotne od każdego koła i zamknięcie "małych" pętli regulacji wokół każdego napędu osobno: enkodery na silnikach lub choćby na osiach wyjściowych. Możesz też spróbować mierzyć prądy wszystkich silników i skorzystać z silnej (i praktycznie liniowej z offsetem) zależności pobieranego prądu od oddawanego momentu, choć to nie uwzględnia różnic w oporach poszczególnych osi. Zawsze to lepiej niż obecna zabawa na ślepo.

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.