Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

cyfrowy odczyt do frezarki i zle działajacy enkoder

Prezeslukasz 17 Kwi 2017 12:43 816 13
  • #1 17 Kwi 2017 12:43
    Prezeslukasz
    Poziom 14  

    Witam
    Zbudowałem na podstawie arduino UNO i wyświetlacza 4-bit LED panel cyfrowego odczytu do stołu frezarskiego.

    Jako czujnik wykorzystuje pasek z naniesionymi " kreskami" i transoptor całość wymontowałem z drukarki.

    Do przerwań zewnętrznych w arduino podpinam czytnik poprzez komparator lm393 ale podczas testów okazuje się ze szybkie ruch powodują gubienie kroków.

    Po podpięciu pod analizator stanów logicznych okazuje się że problem leży prawdopodobnie w tym że zbocza impulsów z wejścia A i B niebezpiecznie zbliżają się do siebie. Ja czepiał by się] tu komparatorów (zastosowałem gotowe moduły z chin -zdjęcie poniżej )

    cyfrowy odczyt do frezarki i zle działajacy enkoder

    Może ktoś ma pomysł aby usprawnić ten układ

  • #3 17 Kwi 2017 16:49
    Prezeslukasz
    Poziom 14  

    to tez chciał bym wiedzieć do jakiego stopnia mogę "zawalić" arduino impulsami.

    Ale jak podpinam dobrej firmy enkoder(Fanuc) bezpośrednio do arduino to jest lepiej (tez potrafi zgubić impulsy ale w mniejszym stopniu) a gdy ten lepszy enkoder podepnę do arduino poprzez komparator to wtedy jest tragedia.

  • #5 17 Kwi 2017 16:53
    tmf
    Moderator Mikrokontrolery Projektowanie

    Z jaką częstotliwością nadchodzą impulsy? Jak wygląda funkcja obsługi przerwań? Może tu leży problem, bo jest zbyt długo obsługiwana.

  • #6 17 Kwi 2017 16:59
    Prezeslukasz
    Poziom 14  

    Częstotliwość impulsów mogę podać ogólnie ponieważ enkoder podaje 7imp/ mm.

    "głowice" czyli transoptor podwójny przesuwam nad nim z prędkością około 5cm/1sek

    Trzeba pamiętać że same arduino dostaje 2 razy więcej impulsów ponieważ enkoder ma kanał A i B


    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #7 17 Kwi 2017 17:30
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przy takim przesuwie wychodzi 50mm*7=350 impulsów/s, nawet jeśli masz osobno dla kanałóż A i B to 700 imp/s nie powinno być problemem, chyba, że Arduino jest bardziej skopane niż mi się wydaje :) Natomiast twój kod jest jakiś dziwny - enkoder koduje w kodzie Greya, twój kod w żadnym przypadku nie wygląda mi na dekoder tego kodu i tu raczej jest problem. On nie gubi imuplsów, lecz je niepoprawnie dekoduje.

  • #8 17 Kwi 2017 17:35
    Prezeslukasz
    Poziom 14  

    Ogólne ten kod dodaje impulsy oraz odejmuje jeśli kręcę w druga stronę.

    Tak wiec kod działa lecz należy założyć że można go poprawić lub całkowicie zmienić.

  • #9 17 Kwi 2017 18:04
    tmf
    Moderator Mikrokontrolery Projektowanie

    Niestety nie działa - to co stworzyłeś to nie jest dekoder impuslów z enkodera - tak się nie dekoduje kodu Graya.
    Kolejna sprawa - w przerwaniu powinieneś liczyć impulsy, a nie ustawiać flagi goingUp i goingDown, bo to nie ma sensu. Jeśli pomiędzy przerwaniami nie dojdzie do pełnego obiegu pętli loop to efektem będzie zgubienie impulsu. Kolejna sprawa to atomowość modyfikacji zmiennych używanych w przerwaniach. Zastanów się co będzie jeśli pomiędzy if w loop a resztą kodu wystąpi przerwanie? Zgubisz info o jego wystąpieniu, w efekcie impuls.

  • #10 17 Kwi 2017 18:12
    Prezeslukasz
    Poziom 14  

    Rozumiem że po pierwsze zliczanie impulsów mam przenieść do funkcji przewiania.
    Co do dekodowania kodu graya to poszukam jeszcze informacji na ten temat- lecz nie za bardzo wiem w czym dokładnie leży problem gdyż mój sposób zlicza impulsy.
    Nie upieram się ze program jest Ok tylko na przyszłość chciał bym wiedzieć czemu nie robić tego w ten sposób.

  • #11 17 Kwi 2017 20:09
    tmf
    Moderator Mikrokontrolery Projektowanie

    Rozrysuj sobie przebiegi A i B i zobacz, czy twoja funkcja poprawnie identyfikuje kierunek w każdej sytuacji :)
    W mojej stopce masz przykłady kodów zawierających dekoder impulsów z enkodera.

  • #12 20 Kwi 2017 12:59
    Prezeslukasz
    Poziom 14  

    Mam jeszcze jedno pytanie.

    Mój projekt będzie odczytał położenie stołu krzyżowego frezarki w 3 osiach X Y Z. W pierwszej wersji planowałem zastosować arduino UNO. Po jednym na os gdyż mam do dyspozycji tylko 2 przerwania w jednym module. Ale myślę nad zastosowaniem arduino mega gdyż wtedy mam 6 przerwań w jednym urządzeniu. Ale czy Mega sobie poradzi jeśli będę dawał impulsy z 3 osi naraz.
    Co będzie jeśli na 2 wejściach przerwania pojawi się w tym samym momencie impuls i będą one trwały tak samo długo.

  • #13 20 Kwi 2017 13:54
    tmf
    Moderator Mikrokontrolery Projektowanie

    @Prezeslukasz Przy liczbie impulsów na sekudę jaką podałeś to ślimak sobie poradzi. Więc tu nie ma problemu. Kwestia, aby przynajmniej poprawnie zaimplementować obsługę enkodera. Co do równoczesnych przerwań to też nie ma problemu, gdyż zostaną one obsłużone w kolejności priorytetów. Ważne tylko, aby w trakcie obsługi przerwania nie były zgłoszone kolejno dwa przerwania tego samego typu. W twoim przypadku taka sytuacja nie będzie miała miejsca (o ile naprawdę nie popsujesz funkcji obsługi przerwań).

  • #14 27 Kwi 2017 22:30
    Prezeslukasz
    Poziom 14  

    A jak rozwiazac problem z tym ze w arduino mega piny przerwania i komunikacji I2C są na tych samych wejściach.


    W projekcie moim przerwania są nie zbędne ale i komunikacja I2C też by się przydała.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME