piechnat Napisano Marzec 14, 2018 Udostępnij Napisano Marzec 14, 2018 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? Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Marzec 14, 2018 Udostępnij Marzec 14, 2018 Będą szorować. Albo zostaw dwa koła nienapędzane, albo załóż enkodery na wszystkie. Cytuj Link do komentarza Share on other sites More sharing options...
piechnat Marzec 14, 2018 Autor tematu Udostępnij Marzec 14, 2018 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? Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Marzec 14, 2018 Udostępnij Marzec 14, 2018 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. 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
Lukaszm Marzec 15, 2018 Udostępnij Marzec 15, 2018 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.). Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Marzec 16, 2018 Udostępnij Marzec 16, 2018 @Lukaszm: naprawdę myślisz, że koło będzie miało 250 obrotów na sekundę? Cytuj Link do komentarza Share on other sites More sharing options...
Lukaszm Marzec 16, 2018 Udostępnij Marzec 16, 2018 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. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Marzec 17, 2018 Udostępnij Marzec 17, 2018 Nie koło, a wał silnika. Tyle że wspomniany przez kolegę napęd ma enkoder na osi koła. Cytuj Link do komentarza Share on other sites More sharing options...
Lukaszm Marzec 17, 2018 Udostępnij Marzec 17, 2018 A to nie wiedziałem Cytuj Link do komentarza Share on other sites More sharing options...
piechnat Kwiecień 18, 2018 Autor tematu Udostępnij Kwiecień 18, 2018 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? Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Kwiecień 18, 2018 Udostępnij Kwiecień 18, 2018 Jakie grube są te przewody? Myślałeś, żeby poprowadzić zasilanie od baterii do każdego ze sterowników oddzielnie? Cytuj Link do komentarza Share on other sites More sharing options...
piechnat Kwiecień 18, 2018 Autor tematu Udostępnij Kwiecień 18, 2018 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. Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Kwiecień 18, 2018 Udostępnij Kwiecień 18, 2018 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ął. Cytuj Link do komentarza Share on other sites More sharing options...
piechnat Kwiecień 19, 2018 Autor tematu Udostępnij Kwiecień 19, 2018 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? Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Kwiecień 19, 2018 Udostępnij Kwiecień 19, 2018 "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. 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!