Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 mar 2026, o 13:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 10 kwi 2014, o 20:16 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 5
Pomógł: 0

Na wstępie witam wszystkich użytkowników gdyż to mój pierwszy post na forum.

Pracuje nad projektem małego sterownika. Atmega 16, wyświetlacz 6xLED, klawiatura 16 klawiszy, enkoder inkrementalny 360 imp. 5V.
Układ będzie pracował w środowisku silnych zakłóceń, warunki przemysłowe. Wszystko zostało zmontowane i na stole pracowało ładnie ale pojawiły się następujące problemy po zamontowaniu w maszynie:

1) Styczniki w szafie oraz hamulec elektromagnetyczny silnika powodują naliczanie impulsów z enkodera, niestety enkoder nie posiada ekranowanego kabla. Czy dołożenie samego ekranu wystarczy, bo enkoder ma plastykową obudowę? Sterownik bez enkodera nie jest podatny na zakłócenia, dopiero podłączenie kanałów enkodera powoduje wystąpienie anomalii. Zasilanie sterownika 12V z zasilacza, potem stabilizator 7805. Zasilanie procka i enkodera 5 V, zasilanie przekaźników w sterowniku 12V, zasilanie cewek styczników sterowanych przekaźnikami 230V.

2) Połączenie enkodera z wałem reduktora posiada lekki luz między zębami przekładni. Jaki sposób obsługi enkodera był by lepszy, obsługa przerwań zewnętrznych czy przerwań czasowych. Prędkość wału to 2 obroty na sekundę, enkoder z wałem jest sprzęgnięty w stosunku 1:1
W tej chwili obsługuje enkoder przerwaniem zewnętrznym INT0 na zbocza opadające i narastające ale drgania zębatki powodują naliczania impulsów. Jak obsłużyć enkoder by zachować powtarzalność, i nie zgubić żadnego impulsu oraz być odpornym na zakłócenia.

Myślałem by wychwytywać stany nielogiczne np. pod rzad kilka stanów kanał A i kanał B ale nie jestem pewny czy to załatwi sprawę.
Maszyna będzie pozycjonowana tylko raz i sytuacja z błędnie naliczonym lub zgubionym impulsem dyskwalifikuje układ.


Proszę o pomoc lub rady. W przypadku pytań podam więcej szczegółów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2014, o 23:15 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

1) A może masz za słabe podciąganie enkodera.
2) Próbkowanie w takim przypadku będzie lepsze.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 08:49 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 5
Pomógł: 0

1) Podciągnięcie najpierw miałem w procku, potem użyłem dodatkowo zew. 10k. Enkoder ma wydajność 40mA na kanał a nie chce go upalić bo trochu drogie są jak na domowe zastosowanie. Jak znajdę chwilę założe jakiś ekran na kabel ale martwi mnie ze spawarka z innego gniazdka również powoduje naliczanie impulsów :(

2) Możesz wyjaśnić dlaczego próbkowanie jest w tym przypadku lepsze i jaki algorytm sprawdzania był by najbardziej niezawodny?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 16:50 
Offline
Użytkownik

Dołączył(a): 22 mar 2014
Posty: 38
Lokalizacja: Bydgoszcz
Pomógł: 4

Próbowałeś może bramek Schmitta? http://home.agh.edu.pl/~maziarz/LabPE/przerzutnik.html.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 17:00 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

1) Długie przewody to dobra antena. Jak masz ochotę to podłącz się z oscyloskopem i sprawdź jakiego rzędu są te zakłócenia. Myślę, że spokojnie możesz dać podciąganie 1k i kondensator 100nF do masy co daje filtr 1,5kHz, a ty masz 2 * 360 impulsów = 720Hz.

2) Przerwanie reaguje na każdy impuls spowodowany luzem pomiędzy zębatkami jak wyżej opisujesz. Algorytm polegałby na tym, że zbierasz próbki co 100us. Na początku czekasz na zebranie 5 jednakowych stanów i zapisujesz jego wartość. Po otrzymaniu każdej kolejnej próbki sprawdzasz stan ostatnich 5 i jak 3 z nich są takie same i zarazem inne niż ostatnia wartość to masz zmianę stanu. Rozrysuj sobie te sygnały.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 17:11 
Offline
Użytkownik

Dołączył(a): 22 mar 2014
Posty: 38
Lokalizacja: Bydgoszcz
Pomógł: 4

Od strony programu na uK możesz spróbować eliminować szpilki zakłóceń, poprzez ponowne próbkowanie stanu linii portu mikrokontrolera po wystąpieniu zbocza od enkodera.
Napisałeś, że masz 2obr/s co daje 720imp/s, czyli okres przebiegu wynosi ok. 1.389ms.
Na poniższym rysunku czerwonymi strzałkami zaznaczyłem czas próbkowania. Pierwsza czerwona to np. wystąpienie przerwania od portu uK, druga to czas po jakim próbkujesz ponownie stan portu.
Obrazek
Ot taka moja sugestia.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 21:15 
Offline
Użytkownik

Dołączył(a): 26 lis 2012
Posty: 54
Pomógł: 2

Myśle ze schemat podłączenia encodera do uc by pomógł w dalszej analizie problemu.

Wysłane z mojego GT-I9300 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 20:14 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 5
Pomógł: 0

Obrazek

Przepraszam za jakośĆ ale na szybko w paincie. Co do bramek schmitta to enkoder je chyba ma na wyjsciu ? Spróbuje dzisiaj i jutro przepisac program na obsługę enkodera z użyciem przerwania czasowego, tylko zastanawia mnie jedna rzecz. Do obsługi wyświetlacza i klawiatury wykorzystałem 2 przerwania czasowe, trzecie wykorzystał bym do enkodera. W przypadku przerwań zew. mają one pierwszeństwo a jak będzie czasówka czy nie zgubie jakiegoś impulsu z enkodera bo nastąpi wtedy obsługa innego przerwania?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2014, o 19:05 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Typowy endkoder działa na takiej zasadzie:
Obrazek
Jak boisz się o wewnętrzne tranzystory to możesz skorzystać z takiego układu:
Obrazek
Jeśli odległość jest rzeczywiście bardzo duża możesz sygnał puścić światłowodem. Nadajniki zamontowałbyś przy enkoderze, a odbiorniki przy mikrokontrolerze. Byłbyś zabezpieczony przed przepięciami i problemami z masą.

A wszystko możesz oprzeć o jeden timer sprzętowy. Na przykład przerwaniu co 100us próbkujesz wejścia enkoderów. Co 50 przerwań czyli 5ms przemiatasz wyświetlacze, a co 400 skanujesz klawisze.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2014, o 19:40 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 5
Pomógł: 0

Krauser masz racje ale chyba dla enkoderów z wyjściem OC? . Ja posiadam enkoder PUSH PULL który na wyjściu daje mi sygnały 0V i 5V, wyjście nie wisi w powietrzu w stanie nieaktywnym jak przy OC.

Wczoraj siedziałem trochu i dzisiaj cały dzionek, zmieniłem program 2 krotnie.

Najpierw przerobiłem go na próbkowanie czasowe i albo gubił impulsy przy drganiu albo łapał wszystkie impulsy łącznie z zakłóceniami w zależności od częstotliwości próbkowania.

Obecnie pracuje na programie z przerwaniami zewnętrznymi INT0 i INT1 oba wyzwalane zboczami narastającymi i opadającymi. Obsługa obu przerwań jednakowa czyli rodzielczośc enkodera mam x4 i potem dziele licznik przez 4 zeby uzyskac 360 na obrót. Dodatkowo w przerwaniach mam identyfikacje stanów nielogicznych ale dalej podczas zabaywy enkoderem w rękach po pewnym czasie położenie 0 nie równa się z naliczaniem impulsów =0 :( W maszynie sprawdzę układ dopiero jutro ale przypuszczam że dalej to będzie do poprawy.

Odnośnie tej odległości to nie jest duża około 1m, z tym że mam enkoder bez fabrycznego ekranu. I problem luzu na zębatce między wałem maszyny i wałkiem enkodera. Luz sięga 1 stopnia ale taka dokładnośc wystarczy, gorzej że powoduje to drgania podczas zatrzymania. Poniżej podaje mój kod obsługi przerwania.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kody wklejamy przy pomocy syntax=c - Różowo-zielony J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2014, o 20:29 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Db1234 napisał(a):
Ja posiadam enkoder PUSH PULL

Powinieneś mieć podciąganie do + i do -, a raczej nazwałbym to obciążeniem. Sygnały napięciowe łatwo zakłócić, a jak płynie prąd to transmisja jest dużo bardziej odporna. Na pewno znasz standard 4-20mA.

Kody wstawia się w znacznikach syntax=C. Popraw to edytując post. Dobrze jakby były wcięcia. Jak masz Eclipse to zaznacz tekst i klepnij Ctrl+Shift+F i dopiero wklej na forum.

Proponuje inny sposób sprawdzania. Przerwanie na INT1 jest zablokowane. Po przerwaniu na INT0 odblokowujesz i konfigurujesz INT1 i dopiero jak dostaniesz to przerwanie na INT1 zliczasz impulsy.

Masz obroty w jednym czy obu kierunkach?

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2014, o 15:36 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 5
Pomógł: 0

Masz rację z tym sygnałem prądowym i dołoże podciągnięcie kanałów do masy jeszcze.

Co do wstawki to przepraszam, nie wiedziałem jak zachować formatowanie, na przyszłość będe pamiętał.

A wracając do tematu. Mam obroty w obu kierunkach. Wczoraj włożyłem sterownik do maszyny i jest lepiej, nie zlicza krzaków jak styczniki pracują ale nie miałem czasu sprawdzić dokładnie. Wiem że jak się bawiłem enkodere w ręce to gubił bądź naliczał źle ale kręciłem szybko więc może procek już nie wyrabiał.

Możesz umotywować twoją metodę czy jest lepsza i dlaczego od mojej. Wydaje mi się że, natrafiając najpier na kanał INT0 czyli stan wysoki na A potem INT 1 czyli stan wysoki na B i wracając do stanu 00 i tak w kółko, licznik będzie zliczał impulsy a enkoder będzie się poruszał w zakresie 91-179 tam i z powrotem. No chyba że dołożyć algorytm sprawdzania stanów niemożliwych, błędnych? Napewno w tej metodzie rozdielczość będzie x2 a nie tak jak mam teraz x4 czyli dla mnie lepiej i prockowi lżej, no chyba że coś źle zinterpretowałem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2014, o 21:05 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Możliwe, że dlatego, że dzielisz przez 4 rozjeżdżają ci się wyniki, bo tracisz pewne informacje. Ustaw aby przerwania reagowały na każde zbocze. I postępowanie zgodnie z takim algorytmem:
Obrazek
Po każdym dowolnym zboczu odczytywane są stany wejść A i B. Wiadomo, że enkoder produkuje sygnały w kodzie Gray'a, czyli 00, 01, 11, 10, (00, 01...) lub 00, 10, 11, 01, (00, 10...). Bardzo przydatna jest informacja, że kolejny kod różni się od poprzedniego na jednym bicie. Graficznie układa się to w szlaczki jak na rysunku. Wystarczy z tego obliczyć XOR i jeśli jest poprawnie to zawsze jest ta sama wartość zależna od kierunku.
W programie sprawdzane są 4 ostatnie stany wejść. Dzięki temu żaden impuls nie jest tracony i na podstawie całej sekwencji zmieniany jest licznik.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Może komuś się uda to prościej zakodować :roll:

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO