Skocz do zawartości

Transoptor szczelinowy - problem z fałszywymi impulsami


rayvburn

Pomocna odpowiedź

Cześć!

Mam problem z pomiarem drogi w moim robocie z napędem różnicowym.

Zastosowałem 2 transoptory szczelinowe z dyskami (20 impulsów / obrót) na wałach silników. Rozdzielczość enkodera 1,02 cm. Wyjścia transoptorów podpięte do Arduino Leonardo z dołączoną obsługą przerwań.

Problem jest taki, że robot często stojąc zlicza kolejne impulsy, nawet jeśli się nie poruszył nawet o 1 cm. Dzieje się to tylko, kiedy jest zatrzymany (a przynajmniej w czasie ruchu tego nie zauważyłem). Ręcznie też można czasem tak nakierować wał, że impulsy do uC lecą jak z armaty. Domyślam się, że chodzi tutaj o graniczną pozycję transoptora względem otworu na dysku.

Jest sposób ograniczenia tego w sposób software'owy ? Sprawdzałem bibliotekę debounce. Działa poprawnie dopóki nie trafi do trochę bardziej rozbudowanego programu.

Pomysły na załatwienie tego hardware'owo także mile widziane. Próbowałem już kondensator między GND a OUT transoptora, 300nF nie zmieniało niczego, 750nF omijało impulsy.

Używam transoptorów TCST1103.

Z góry dzięki za odpowiedzi 🙂

Link do komentarza
Share on other sites

Nic na to nie poradzisz. Drobne drgania tarczy w czasie postoju są dla fototranzystora nieodróżnialne od przejazdu normalnych szczelin w czasie obrotów tarczy. Żadne filtry nie pomogą, bo sygnał "zły" od "dobrego" niczym się nie różni oprócz kierunku "napływania" przesłony. A tego jeden czujnik nie wykryje. Musisz użyć tzw. detektora kwadraturowego czyli dwóch transoptorów na wspólnej tarczy przesuniętych o pół szerokości szczeliny. Wtedy możesz wykrywać kierunek (narysuj to sobie) i odróżniać drgania w zatrzymaniu od jazdy w którąś stronę. Albo wywalić w ogóle optykę i użyć detektora magnetycznego czyli scalaka z wbudowanym czujnikiem pola i wygodnym wyjściem cyfrowym.

Link do komentarza
Share on other sites

Dzięki za te wszystkie sugestie 🙂

Myślałem o wrzuceniu kondensatora z tego powodu, że te "fałszywe" impulsy nadchodzą znacznie szybciej niż "rzeczywiste" (tego zapomniałem dopisać). Może wprowadzenie odpowiednio małej inercji załatwiłoby sprawę w takim przypadku?

Link do komentarza
Share on other sites

No ale pomyśl, przecież te zakłócenia nie biorą się z niczego. Gdy szczelina stanie na granicy detekcji poziomu wejścia cyfrowego, to każde mechaniczne drgnięcie, każdy szum od drugiego silnika itp powoduje zmianę stanu detektora. A takie zakłócenia są szerokopasmowe. Teraz zliczasz je szybko, bo możesz i myślisz, że tylko takie składowe tam są - a to nieprawda. Jeśli odfiltrujesz te szybkie, zostaną wolne i wtedy je będziesz widział i zliczał. Nie ma wyraźnego powodu, dla którego miałby być takie lub inne. Jedyną pewność daje podwójny fotodetektor i algorytm detekcji kierunku. Wtedy żadne pojedyncze wejście się nie liczy (może sobie szumieć), bo musi następować pewna skorelowana sekwencja zdarzeń (zboczy) w czasie na obu wejściach i to jest dopiero uznawane za impuls w danym kierunku. A dzięki przesunięciu o pół szerokości okienka nawet gdy jeden czujnik głupieje, drugi z definicji jest stabilny.

  • Lubię! 1
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

Faktycznie tak jak pisał marek1707 - problemem były drgania osi silników (u mnie porobiły się już spore luzy). Ale jednak udało się to wszystko rozwiązać software'owo, chociaż spędziłem nad tym 3 dni. Jeśli ktoś w przyszłości miałby ten sam problem, a niekoniecznie chciał zmieniać cokolwiek w hardware, to polecam podłączyć transoptor do wejścia analogowego i popatrzeć sobie jak zachowuje się napięcie przy obracaniu tarczy między emiterem i detektorem. Potem wystarczy włączyć Free Running Mode ADC, a w procedurze obsługi przerwania ustawić sobie 2 progi. U mnie teraz działa wszystko idealnie, bez zmieniania czegokolwiek w hardware.

Strony 290-320 w datasheet http://www.atmel.com/Images/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf

  • Lubię! 1
Link do komentarza
Share on other sites

Ok, czyli okazało się, że jednak znalazłeś cechę odróżniającą zakłócenia od sygnału użytecznego: tym razem była to amplituda. Drgania silników okazały się na tyle małe, że generowały niewielki sygnał na wyjściu czujnika. Sprzętowo wystarczyłaby bramka/wzmacniacz z histerezą (np. 74HC132 lub inwerter + oporniki). Ty nie mając tego w torze poradziłeś sobie mierząc po prostu poziom sygnału w ADC a histerezę robiąc programowo. Sposób zużywa trochę mocy obliczeniowej CPU + wejście + czas ADC i to pokazuje, że nie wolno robić projektów "na styk", ze 100% obłożeniem pinów CPU. Brawo.

Link do komentarza
Share on other sites

Chyba trochę za szybko napisałem, że działa idealnie. Na płytce prototypowej tak, ale w robocie, gdy mam połączone masy 2 mikrokontrolerów i sterownika silników to napięcie odniesienia trochę pływa. Do tego stopnia, że teraz enkoder potrafi gubić impulsy, a nawet całkiem sporo. Próbowałem zmieniać odniesienia z AREF (5V+kondensator) na wbudowane 2,56V, ale też pływa (stabilizator liniowy?). Nie bardzo wiem teraz jak to rozwiązać.

Na podstawie odczytów z ADC: czasem min wartość to ~50, podczas gdy max ~500, a po 5 minutach min ~150, max ~350. Pobawię się jeszcze "zwężeniem" histerezy, ale wątpię czy do zadziała.

Robiłem też zbieranie danych z odczytów ADC i znajdowanie wartości min i max z kolejnych 5000 próbek, ale nie działa to do końca tak, jak bym chciał.

Mile widziane jakieś wskazówki.

Link do komentarza
Share on other sites

Niemożliwe, by wewnętrzne źródło odniesienia tak pływało. Coś skopałeś, pokaż schemat w okolicach AREF, AVCC oraz czujniki - może to im napięcie przysiada? Mierzyłeś rzeczywiste VCC multimetrem? Takie wahania musiałbyś zauważyć. No i wrzuć kawałek kodu obsługi ADC i napisz więcej o tym uśrednianiu czy jak to tam robisz.

Link do komentarza
Share on other sites

Nie ciągnąłem już dalej tematu, jedyne co zmieniłem to wyregulowałem w miarę progi w tym regulatorze histerezowym - dałem szerszy zakres w razie gdyby to napięcie zaczęło pływać jednak. Nie wiem dlaczego była taka różnica względem odniesienia jak 2 posty wyżej, pojawiała się dopiero po kilku minutach. Ostatecznie błąd w zliczaniu to średnio 1 impuls ominięty na odcinku 2 m. Myślę, że z tym hardwarem ciężko byłoby z tego coś więcej wycisnąć.

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.