Skocz do zawartości

Jazda po prostej z enkoderami


Treker

Pomocna odpowiedź

Testując micromouse sporym problemem okazała się jazda po prostej na podstawie enkoderów. Mimo dość dobrej dokładności, to algorytm, który co określony czas porównuje ilość odczytów z enkoderów w danym przedziale czasu i koryguje PWM o stałą wartość w dół lub w górę nie daje zbyt dobrych efektów - pewnie jest to kwestia regulacji. Jednak na pewno można to zrealizować jakoś inaczej.

Co możecie ciekawego doradzić?

Nie pytam o konkretne kody, tylko o samą zasadę działania.

Link do komentarza
Share on other sites

Robiąc namiastkę licznika rowerowego, prędkość mierzyłem na podstawie czasu obrotu koła.

Może i w mm to by się sprawdziło.

coś w podobie:

lewy silnik 12ms/obr., prawy 18ms/obr -> przyspiesz prawy, spowolnij lewy

Lewy 15ms/obr, prawy 15ms/obr -> zostań przy nastawach

można by to też bardziej skomplikować dodając choćby regulator P dla lepszej kontroli.

Link do komentarza
Share on other sites

Ogólnie myślę , że warto w całym torze byłoby wyróżnić parę elementów, które mają znaczenie:

->silniki (nieidentyczne charakterystyki V=f(U),bezwładność)->przyczepność (przy niewielkich różnicach prędkości i w ogóle nie wielkich prędkościach myślę do pominięcia)-> enkodery (przede wszystkim sposób odczytu)->zaimplementowany regulator (struktura,nastawy,czas przeliczania)->do początku

i przeanalizować każdy z osobna. Jeżeli chcesz, aby to dokładnie działało to naprawdę przydadzą się jakieś sensowne pomiary. Sprawdź w czasie jak wygląda sterowanie, reakcja na silnikach, same obliczenia. Niestety 8bitowce wg nie nadają się do jakichkolwiek bardziej złożonej arytmetyki wykraczającej poza typy 1 bajtowe (- taka moja opinia, z resztą ostatnio się z tym zmagam). Poza tym duży wpływ ma też czas głównej pętli sterowania (powiedzmy czas odświeżania). Warto zapewnić jego stałą wartość, aby wyeliminować chociaż tą zmienną.

Enkodery inkrementalne najprościej wrzucić na zewnętrzne przerwania proca. Polecam, bo bardzo wygodna sprawa, nic nie zgubisz.

Odnośnie nieidentycznych silników- robot jeździ prosto przy jednakowym wysterowaniu? Ostatnio się spotkałem z zauważalnie dużą różnicą prędkości pomiędzy pololu 30:1 w lewo/prawo a pololu 30:1 z przedłużoną osią prawo/lewo, ale z braku dokładniejszych pomiarów nikomu niczego nie zarzucam.

Link do komentarza
Share on other sites

A robiłeś regulator PWM na same silniki, czy tylko do sterowania prędkością poruszania robota?

Zrób tak, walnij pomiary z enkodera przy zadanym PWM (jeden silnik w lewo, drugi w prawo) i oblicz transmitancje każdego z silników. Następnie na podstawie metody ziglera nicholsa (z odpowiedzi skokowej) wrzuc nastawy i steruj PWM każdego silnika z osobna opierając się o pomiary z enkoderów. W ten sposób powinienes zapewnic jazdę po prostej. PD powinien starczyć do tego zadania.

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

Ach, padło słowo "transmitancja" to się nie mogłem opanować 😋. Podrzucam link, który obrazuje całkiem nieźle problem elektryczno-mechaniczny samego silnika:

Modelowanie silnika.

Wiem, że to zionie teorią, ale sam jestem obecnie na etapie wdrażania tego typu teorii w praktyce i na pewnym poziomie sterowania/zaawansowania nie da się tego obejść.

Polecam przede wszystkim stronę 13 gdzie jest pokazane jak wygląda faktycznie prędkość obrotowa w funkcji napięcia. Przy tej częstotliwości i parametrach silnika to oczywiście żadna modulacja szerokością impulsu.

W praktyce załączam własny wykres z fizycznej konstrukcji, która powstaje 🙂.

Link do komentarza
Share on other sites

Testując micromouse sporym problemem okazała się jazda po prostej na podstawie enkoderów. Mimo dość dobrej dokładności, to algorytm, który co określony czas porównuje ilość odczytów z enkoderów w danym przedziale czasu i koryguje PWM o stałą wartość w dół lub w górę nie daje zbyt dobrych efektów - pewnie jest to kwestia regulacji.

Z ciekawości:

1. Ile impulsów dają Ci enkodery na jeden pełen obrót koła?

2. Jaki jest obwód koła?

Link do komentarza
Share on other sites

A jak to robiłeś?

Powinieneś zastosować PIDa opartego o różnicę prędkości. Ważne, żebyś jak najszybciej informował regulator o aktualnej prędkości. Idealnie byłoby mierzyć czas jednego/kilku impulsów i to podawać do regulatora.

Ważne tylko, żeby enkoder miał odpowiednio dużą ilość kroków, bo inaczej będzie to słabo działać.

Link do komentarza
Share on other sites

Testowałem różne enkodery od 30 do 120 impulsów na obrót. Jednak z powodu dość prowizorycznego charakteru konstrukcji ustaliłem ostatecznie, że dobrze działa wersja z 90 impulsami na obrót. Koło to standardowe Pololu 32mm.

Aktualnie w kodzie mam coś na zasadzie, jeśli koło prawe szybsze to przyspieszamy lewe a prawe zwalniamy i odwrotnie. Testowałem przy porównaniach co 50, 100, 150 impulsów z enkodera, jednak z tego co piszesz Mirku powinienem robić to częściej.

Wcześniejszy posty przeczytam później, bo nie miałem jeszcze czasu - ostatnio koduje coś nowego na Forbot'a 😉

Link do komentarza
Share on other sites

Damian, skoro masz 90imp/obrót, a mierzysz co 100 impulsów to znaczy, że przejedziesz ok. 10cm zanim dokonasz jednego kroku PIDa. To oczywiście nie może dobrze działać 🙂

Idealnie byłoby mierzyć czas kilku impulsów, tak, żeby przynajmniej kilkanaście razy na sekundę przeliczać PIDa - optymalnie powinieneś przeliczać go kilkadziesiąt razy na sekundę.

PS. Bezwzględnie należy mierzyć czas między impulsami, bo pomiar impulsów w czasie jest obarczony olbrzymim błędem. Jak średnio w czasie mieściłoby się nam 10 impulsów, to przypadek +/-1 impuls powoduje ~10% błędu.

Jak mierzysz czas między np. 5 impulsami to masz idealnie 10000us, 10001us itd - to dopiero pozwala zastosować rozsądną regulację, bo masz dużą rozdzielczość wyników.

Link do komentarza
Share on other sites

wg. mnie powinno to być na zasadzie:

tworzysz sobie strukture czas,

w niej zapodajesz us, ms, s, min, h. wszystko oparte o przerwania.

i co 10 ms zliczasz impulsy i zerujesz ich stan by zliczało na nowo i na podstawie tego, uzyskasz wykres taki jak wrzucił kolega powyżej. Na tym już można działać.

Link do komentarza
Share on other sites

Damian, skoro masz 90imp/obrót, a mierzysz co 100 impulsów to znaczy, że przejedziesz ok. 10cm zanim dokonasz jednego kroku PIDa. To oczywiście nie może dobrze działać 🙂

Testowałem różne ustawienia dwa dniu, by coś wariowało - a na końcu dopiero się okazało, że wina jednej tarczy enkodera była, że działy się cuda. Przez to właśnie próbowałem z rzadszym sprawdzaniem stanu enkoderów i mocniej reagować, ale nie dawało to specjalnych efektów. Filmik, który zamieściłem powyżej bazował właśnie na sprawdzaniu co 100 i porównywanie (tylko wtedy były też inne enkodery).

Ogólnie tak jak mówiłem, w tej chwili sprawdzam warunek prędkość co kilka impulsów z enkodera (obojętnie, z którego). Spróbuję w takim razie przepisać soft tak, aby sprawdzał wartości co stały odstęp czasu i wtedy zmieniał stan silników.

Link do komentarza
Share on other sites

Własnych testów dotyczących enkoderów i sterowania silnikami PWMem jeszcze nie robiłem, więc mogę się mylić albo to co tu napiszę może nie mieć żadnego znaczenia. Jednak mam wrażenie, że w dywagacjach na ten temat jeden element jest często zapominany.

Układ regulacji powinien podawać sygnał na silniki i w sprzężeniu zwrotnym od enkoderów modyfikować ten sygnał w następnym kroku zgodnie z ideą PIDa. Jednak w mikrokontrolerze PWM działa z wcześniej zdefiniowaną częstotliwością i zgodnie z datasheetem modyfikacje wypełnienia zachodzą dopiero po zakończeniu pełnego cyklu. Tak więc ustawienie okresu próbkowania tego układu na czas krótszy niż okres PWMa nie ma sensu bo zmiany i tak nie mogą zachodzić częściej.

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.