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



Teraz jest 24 kwi 2024, o 10:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 27 cze 2017, o 10:45 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

Witam,
Mam problem z układem który ma zliczać ilość obrotów silnika i przełączać kierunek obrotów przeciwną stronę po odliczeniu odpowiedniej ilości. Silnik napędza pręt gwintowany na którym jest nakrętka (uproszczony prototyp siłownika z którym układ będzie pracował w rzeczywistości).
Program działa tak, że po odliczeniu 50 obrotów w jedną stronę, przełącza silnik w drugą stronę i to działa w pętli. Zliczanie obrotów odbywa się przez pseudo enkoder zrobiony z tekturki wraz z transoptorem szczelinowym (ITR9606-F) później sygnał trafia na bramke Schmitta (złożoną z LM324) w celu określenia jednoznacznie sygnału (0 lub 1, bez stanów przejściowych) a następnie na INT0 Atmegi8 jako sygnał przerwania zewnętrznego (zbocze narastające).
Zaznaczyłem sobie na tekturce zakres ruchu nakrętki na pręcie gwintowanym, po około 20 minutach ciągłej pracy zakres jest przesunięty o ok 1cm (zakładając że cały zakres ruchu nakrętki to 5cm)
Schemat:
Obrazek

Program:

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


ObrazekObrazekObrazek


Może ktoś posiada jakiś pomysł dlaczego przemieszczenie się nakrętki na śrubie nie jest zawsze identyczne? Myślałem też że może bezwładność silnika powoduje jakieś przeunięcia, ale nagrywając kamerą z telefonu w trybie slow motion w przypadkowo wybranym momencie czasu, dwa cykle wynoszą dokładnie 100 obrotów.
Myślałem o zakłóceniach fototranzystora, ale osłoniłem go, tekturą, w pokoju zrobiłem ciemnie i to również nie pomogło.

I jeszcze film jak wygląda to zatrzymywanie się, od 12 sekundy filmu dwa cykle po 50 obrotów. Film jest w slow motion, normalnie kręci się to trochę szybciej.



Ostatnio edytowano 28 cze 2017, o 05:47 przez m_wojcik74, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2017, o 11:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1021
Lokalizacja: Trójmiasto
Pomógł: 189

Zakres jest przesunięty, zwężony czy rozciągnięty?
Dobrze widzę że kółka przekładni mają sprzęgła cierne? Bo jeśli mają to może być to właśnie powodem efektu rozjechania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2017, o 11:53 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

xentis napisał(a):
Zakres jest przesunięty, zwężony czy rozciągnięty?
Dobrze widzę że kółka przekładni mają sprzęgła cierne? Bo jeśli mają to może być to właśnie powodem efektu rozjechania.


Zakres jest przesunięty, gdy z jednej strony wychodzi poza skalę to z drugiej nie dochodzi do punktu początkowego.
Przekładnia jest z drukarki atramentowej, silnik napędza koło zębate przy pomocy paska (również zębaty) następnie są dwa koła zębate sprzęgnięte ze sobą, nie ma możliwości żeby z powodu przekładni wystąpiły takie błędy, zważywszy na to, też że silnik wkręca nakrętkę 3mm więc pracuje prawie na biegu jałowym.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2017, o 20:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1021
Lokalizacja: Trójmiasto
Pomógł: 189

Koła zębate wyglądają jakby miały sprzęgło cierne (te sprężyny które są pod kołami - zazwyczaj takie sprężyny stosowano właśnie by docisnąć sprzęgło, sama zębatka była wykonana jakby z dwóch kółek pomiędzy którymi było coś ala filc, a oba kółka były dociskane od spodu sprężyną, tak to sprytnie było zrobione że samego filca nie było widać bo kółko połączone na stałe z osią zagłębiało się we wgłębienie koła na które był przekazywany napęd - patent szeroko stosowany jeszcze za czasów magnetofonów i magnetowidów gdzie koła nawijające taśmę musiały się kręcić szybciej gdy są puste, i dużo wolniej gdy pełne - napęd cały czas był przekazywany ze stałą prędkością a różnica w prędkości samego koła nawijającego była niwelowana właśnie przez poślizg tego sprzęgła co nastręczało problemu w najpóźniej produkowanych tańszych magnetofonach w połączeniu z kasetami dłuższymi niż 60minut - stare kasety 90 były dłuższe i cięższe co skutkowało zatrzymywaniem się napędu właśnie na tym sprzęgle i "wciągnięciem taśmy" ).
Jeśli te koła mają takie sprzęgło to w momencie gdy następuje zwrot kierunku obrotu silnika może następować niewielki poślizg na sprzęgle przez co układ się rozjeżdża.
Spróbuj dać większe opóźnienie pomiędzy zmianą kierunku silnika - może pomoże... Najlepiej było by jeszcze dać softstart dla silnika by nie szarpał przy ruszaniu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 05:46 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

xentis napisał(a):
Koła zębate wyglądają jakby miały sprzęgło cierne (te sprężyny które są pod kołami - zazwyczaj takie sprężyny stosowano właśnie by docisnąć sprzęgło, sama zębatka była wykonana jakby z dwóch kółek pomiędzy którymi było coś ala filc, a oba kółka były dociskane od spodu sprężyną, tak to sprytnie było zrobione że samego filca nie było widać bo kółko połączone na stałe z osią zagłębiało się we wgłębienie koła na które był przekazywany napęd - patent szeroko stosowany jeszcze za czasów magnetofonów i magnetowidów gdzie koła nawijające taśmę musiały się kręcić szybciej gdy są puste, i dużo wolniej gdy pełne - napęd cały czas był przekazywany ze stałą prędkością a różnica w prędkości samego koła nawijającego była niwelowana właśnie przez poślizg tego sprzęgła co nastręczało problemu w najpóźniej produkowanych tańszych magnetofonach w połączeniu z kasetami dłuższymi niż 60minut - stare kasety 90 były dłuższe i cięższe co skutkowało zatrzymywaniem się napędu właśnie na tym sprzęgle i "wciągnięciem taśmy" ).
Jeśli te koła mają takie sprzęgło to w momencie gdy następuje zwrot kierunku obrotu silnika może następować niewielki poślizg na sprzęgle przez co układ się rozjeżdża.
Spróbuj dać większe opóźnienie pomiędzy zmianą kierunku silnika - może pomoże... Najlepiej było by jeszcze dać softstart dla silnika by nie szarpał przy ruszaniu.


Tutaj też było coś typu sprzęgła (chyba, lub jakiś przesuwnik fazy obrotu), wiem że zakleiłem to klejem ale ten napęd wyciągałem z drukarki kilka ładnych lat temu i już nie pamiętam. Dołączam kolejne zdjęcia przekładni żeby pokazać że tam już nie ma możliwości przeskakiwania zębów. Btw. w drukarce to też pracowało z enkoderem, widać jeszcze na zdjęciu pozostałości po transoptorze szczelinowym, tyle że z o wiele więęęęększą rozdzielczością, szczeliny na oryginalnej tarczy enkodera były takie że trzeba było się dobrze przypatrzeć żeby je zobaczyć, myślę że kilka szczelin na każdy milimetr.
ObrazekObrazek

Start wydaje się na tyle płynny że też to chyba powinno się zachowywać należycie (film to przedstawia w ok. 12 sekundzie). Z softstartem (PWM'owym) w tym konkretnym układzie może nie być takiego problemu bo silnik malutki, ale w rzeczywistym układzie gdzie będą silniki większej mocy problematyczne będzie sterowanie. Silnik sterowany implusowo w czasie stanu niskiego będzie generował wysokie napięcie które trzeba będzie gdzieś zdławić bo szybko wypalą się styki przekaźników. Najlepiej sterować byłoby tranzystorami przy okazji je kluczować PWMem, ale to jest trochę skomplikowane bo mostek H, musiałby też dławić te niepożądane szpilki napięciowe co znacznie komplikuje sprawę - jeden tranzystor zamknięty a dwa otwierają i zamykają się naprzemiennie - tak się robi w dużych układach elektromechanicznych. A mi zależy na zastosowaniu przekaźników, są o wiele mniej delikatne na warunki w jakich to ma pracować niż tranzystory.


Btw. Odchyłka za każdym razem jest tylko w jedną stronę, tak jakby dla flag==0 zliczał coraz więcej implusów (a nie równo 50)

------------------------ [ Dodano po: 42 minutach ]

Nagrałem 10 minut film z pracy układu, potem przeanalizowałem na komputerze, okazuje się, że czasem układ doliczy 46/47 obrotów i przełącza kierunek... Hmm.. czyżby jakieś zakłócenia? Może ktoś ma jakiś pomysł?

------------------------ [ Dodano po: 49 minutach ]

I jeszcze sygnał który wchodzi na INT0 mikrokontrolera, a wychodzi z bramki Schmitta:

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 09:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Proponuje podłączyć lcd i wyświetlać stan na bieżąco, tylko zmniejsz trochę prędkość aby widzieć ten stan. Ogólnie mnie się nie podoba twój sposób zliczania. Błędny już z założenia... Ja to robię w swoich projektach bez zerowania licznika głównego (u Ciebie to ten w przerwaniu int). Flagę rozpoznawał bym już w przerwaniu i w zależności od jej stanu następuje zwiększanie lub zmniejszanie licznika. Chodzi o bezwładność, która będzie się nawarstwiać. U siebie przeważnie zliczam impulsy z prędkością około 60tys/min i nic nie gubi, a robię to w opisany właśnie sposób. Aha, i nie wykorzystuje do tego przerwań int tylko zliczam w zwykłych od przepełnienia traktowanych co 100us i to z kilku silników. Zrób to tak jak ci napisałem i zobaczysz różnice.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 09:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1021
Lokalizacja: Trójmiasto
Pomógł: 189

m_wojcik74 napisał(a):
Hmm.. czyżby jakieś zakłócenia? Może ktoś ma jakiś pomysł?
być może ale to będzie ciężko sprawdzić chyba że podłączysz oscyla na kilka minut i będziesz nagrywał układ wraz z widokiem ekranu oscyla i trzeba by wyczekać na fazę przesuwu w której wystąpiło zgubienie kroków i wtedy całą fazę wstecz trzeba by przeanalizować co się dzieje na oscyloskopie. Dobrze by też wyrzucić z atmegi na jakiś wyświetlacz stan zliczania tak by też było widać na filmie co się dzieje z licznikami...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 10:10 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

SylwekK napisał(a):
Proponuje podłączyć lcd i wyświetlać stan na bieżąco, tylko zmniejsz trochę prędkość aby widzieć ten stan. Ogólnie mnie się nie podoba twój sposób zliczania. Błędny już z założenia... Ja to robię w swoich projektach bez zerowania licznika głównego (u Ciebie to ten w przerwaniu int). Flagę rozpoznawał bym już w przerwaniu i w zależności od jej stanu następuje zwiększanie lub zmniejszanie licznika. Chodzi o bezwładność, która będzie się nawarstwiać.


Poprawiłem zgodnie z tym co zrozumiałem. Teraz jest to zgodne z Twoimi założeniami? Puściłem układ w ruch, zobaczę za jakiś czas czy będą błędy.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


SylwekK napisał(a):
Aha, i nie wykorzystuje do tego przerwań int tylko zliczam w zwykłych od przepełnienia traktowanych co 100us i to z kilku silników. Zrób to tak jak ci napisałem i zobaczysz różnice.


Czy dobrze rozumiem, że skoro nie podajesz sygnału na INT to w takim razie używasz zwykłej linii portu i sprawdzasz jej stan przy pomocy PINx? A impulsy zliczasz w przerwaniu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 10:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

No ciekaw jestem czy coś Ci się poprawi :)

A przy okazji... czy nie bardziej podobał by Ci się poniższy zapis twoich przerwań (robi dokładnie to samo):

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



m_wojcik74 napisał(a):
Czy dobrze rozumiem, że skoro nie podajesz sygnału na INT to w takim razie używasz zwykłej linii portu i sprawdzasz jej stan przy pomocy PINx? A impulsy zliczasz w przerwaniu?


Dokładnie tak. Za dużo mam różnych sygnałów do zliczania i rygory czasowe żeby jeszcze inne przerwania przerywały mi to co i tak bez problemu mogę policzyć w zwykły sposób :) Dodatkowo dla zwiększenia rozdzielczości zliczam zawszę zmianę stanu przy liczeniu obrotów dzięki temu mam dwa razy więcej impulsów.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 11:32 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

Niestety to nie pomogło :/ w dalszym ciągu są błędy. co prawda układ uruchomiłem z 15 min po moim ostatnim poście, aż do teraz błąd wyniósł ok 0,5cm, ale to dość sporo zważywszy że w normalnej pracy układ miał działać ze śrubą o większym skoku więc to będzie znacząca róźnica.

Zrobiłem jeszcze film tak żeby układ robił jeden obrót w lewo i jeden w prawo, tutaj widać najlepiej że są błędy :/ na filmie gubi się 3 razy i 3 razy robi po dwa obroty w jedną stronę, zamiast naprzemiennie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 11:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Największy problem jest z tym pojedynczym okienkiem. Wyrwal całą ćwiartkę tego koła i zobacz czy się nadal będzie mylił. Poza tym liczenie zmian stanu jest bezpieczniejsze i bardziej odporne na zakłócenia, bo jeśli coś da stan wysoki to musi nastąpić też stan niski i łatwiej to skompensować. A najlepiej jak byś normalnie śmigło zrobił np. 4 łopatki i liczył zmiany stanu wtedy nie m mocnych żeby jakaś pomyłka była. Tylko wynik x8 bo 8 zmian będzie.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 12:50 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

SylwekK napisał(a):
bo jeśli coś da stan wysoki to musi nastąpić też stan niski


no tak ale przerwanie działa na zbocze, więc to też zmiana stanu :)

Zrobiłem nowy enkoder, + przebiegi, nadal jest to samo, widać po przebiegach że czasem zliczy dwa impulsy i nastąpi zmiana kierunku a czasem 4. Jeden przebieg jest z fototranzystora a drugi z bramki Schmitta. Wychodzi na to że mikrokontroler dostaje jakieś "lewe" sygnały i je traktuje jak te z enkodera. :/
ObrazekObrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 13:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

m_wojcik74 napisał(a):
no tak ale przerwanie działa na zbocze, więc to też zmiana stanu


No nie wiem, może i tak, nawet mi się nie chce teraz nad tym zastanawiać prawdę mówiąc :)
Do takich celów jak enkodery nigdy nie używam wejść INT, bo mam wrażenie (w mojej ocenie) że nie mam nad nimi pełnej kontroli, natomiast kiedy robię własną obsługę to wiem, że nie ma mowy o pomyłce w zliczeniach. U ciebie najprawdopodobniej występuje błąd nadmiarowy połączony z badaniem pojedynczego zbocza. Ja kiedy liczę impulsy i zaliczy na minus (bezwładność silnika) to przy ruchu w drugą stronę są one najpierw odliczane i dopiero doliczane to co ma być faktycznie policzone. Być może błędem u Ciebie jest twardy warunek że ma policzyć 50 przez co gdy zrobi się nadmiar bezwładnościowy np. 3-4 impulsy to nie są one już uwzględniane tylko po wyzerowaniu licznika zlicza 50 przez co masz docelowo od tej wartości (czyli nieuwzględnionego, np. "-4" impulsów) tak naprawdę doliczone do 46 mimo, że licznik wskazuje 50. Myślę, że wiesz o co mi chodzi.


Autor postu otrzymał pochwałę

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 14:01 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

SylwekK napisał(a):
m_wojcik74 napisał(a):
no tak ale przerwanie działa na zbocze, więc to też zmiana stanu


No nie wiem, może i tak, nawet mi się nie chce teraz nad tym zastanawiać prawdę mówiąc :)
Do takich celów jak enkodery nigdy nie używam wejść INT, bo mam wrażenie (w mojej ocenie) że nie mam nad nimi pełnej kontroli, natomiast kiedy robię własną obsługę to wiem, że nie ma mowy o pomyłce w zliczeniach. U ciebie najprawdopodobniej występuje błąd nadmiarowy połączony z badaniem pojedynczego zbocza. Ja kiedy liczę impulsy i zaliczy na minus (bezwładność silnika) to przy ruchu w drugą stronę są one najpierw odliczane i dopiero doliczane to co ma być faktycznie policzone. Być może błędem u Ciebie jest twardy warunek że ma policzyć 50 przez co gdy zrobi się nadmiar bezwładnościowy np. 3-4 impulsy to nie są one już uwzględniane tylko po wyzerowaniu licznika zlicza 50 przez co masz docelowo od tej wartości (czyli nieuwzględnionego, np. "-4" impulsów) tak naprawdę doliczone do 46 mimo, że licznik wskazuje 50. Myślę, że wiesz o co mi chodzi.



U mnie nie ma mowy o bezwładności silnika, na filmie z pierwszego postu to widać.
Zrobiłem tak jak mówisz, zamiast przerwania zewnętrznego naskrobałem na szybko program który ma obsługiwać to tak jak przycisk. I co ciekawe, działa :D Ja rozumiem że to przerwanie zewnętrzne może nie działać z przyciskami bo drgania styków itd, ale tutaj jest sytuacja jednoznaczna więc byłem pewien że to będzie skuteczna metoda...

Dziękuję za pomoc, oczywiście leci "pomógł" :)

Dla potomnych zostawiam kod, musicie wybaczyć styl pisania, chciałem tylko sprawdzić czy to dobra droga dlatego pisałem żeby jak najszybciej to uruchomić.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 20:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Hehe, no to już znasz jeden z powodów dlaczego nie używam do enkoderów przerwań INT :)
Ogólnie fragment zliczający powinien znaleźć się w przerwaniach żeby nic nie przeszkodziło w dostawie impulsów ustawionych stosownie do prędkości nadchodzącego sygnału (co najmniej dwa razy większe taktowanie niż max częstotliwość przychodzących impulsów) . Normalnie takie liczenie załatwia się dosłownie kilkoma linijkami kodu, a u ciebie jeszcze spory chaos w programie, ale ćwicz, kombinuj i testuj różne algorytmy :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 21:26 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

SylwekK napisał(a):
Hehe, no to już znasz jeden z powodów dlaczego nie używam do enkoderów przerwań INT :)
Ogólnie fragment zliczający powinien znaleźć się w przerwaniach żeby nic nie przeszkodziło w dostawie impulsów ustawionych stosownie do prędkości nadchodzącego sygnału (co najmniej dwa razy większe taktowanie niż max częstotliwość przychodzących impulsów) . Normalnie takie liczenie załatwia się dosłownie kilkoma linijkami kodu, a u ciebie jeszcze spory chaos w programie, ale ćwicz, kombinuj i testuj różne algorytmy :)


Rozumiem że to co u mnie jest w pętli głównej u Ciebie lata w przerwaniu od timera. A wspominałeś też że robisz to dla kilku silników. Jak się uchroniłeś przed tym, że gdy dla jednego enkodera uC czeka na zbocze narastające, w tym momencie przychodzi zbocze opadające od innego enkodera i żeby impuls poprawnie zliczyć? W przerwaniach INT to jest oczywiste, bo każde przerwanie ma swój priorytet a i tak prędzej czy później zostanie wykonane, a za pomocą sprawdzania stanu linii?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2017, o 22:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Jak już wspomniałem ja badam KAŻDĄ zmianę zbocza a nie tylko narastające lub opadające. Prawdę mówiąc takie rozwiązanie nie dość, że jest dla mnie lepsze, bo mam większą rozdzielczość enkodera to na dodatek paradoksalnie sama obsługa jest duuużo prostsza i zajmuje mniej bajtów przez co w przerwaniach śmiga aż miło nie zajmując dużo czasu :) Nie podam Ci gotowego rozwiązania, bo to moje autorskie choć pewnie jak to z algorytmami bywa nie tylko ja na takie wpadłem, ale póki co jeszcze nie zauważyłem go w innych programach więc niech tak na razie zostanie :).

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2017, o 05:37 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

SylwekK napisał(a):
Jak już wspomniałem ja badam KAŻDĄ zmianę zbocza a nie tylko narastające lub opadające. Prawdę mówiąc takie rozwiązanie nie dość, że jest dla mnie lepsze, bo mam większą rozdzielczość enkodera to na dodatek paradoksalnie sama obsługa jest duuużo prostsza i zajmuje mniej bajtów przez co w przerwaniach śmiga aż miło nie zajmując dużo czasu :) Nie podam Ci gotowego rozwiązania, bo to moje autorskie choć pewnie jak to z algorytmami bywa nie tylko ja na takie wpadłem, ale póki co jeszcze nie zauważyłem go w innych programach więc niech tak na razie zostanie :).


Jeśli chodzi o gotowe rozwiązanie to jak widzisz, sam próbuje coś rzeźbić, dlatego o nie nie proszę. :) Pytałem tylko o pewne szczegóły w jaki sposób się zabezpieczyłeś przed nieoczekiwanymi sytuacjami jak właśnie tą którą opisałem wyżej czyli, gdy zmienią się zbocza z obydwu enkoderów w jednym czasie. Czy mam rozumieć że po prostu wykorzystujesz:
Cytuj:
[...]i zajmuje mniej bajtów przez co w przerwaniach śmiga aż miło nie zajmując dużo czasu :)

I liczysz na to że te sygnały nigdy siebie wzajemnie nie wpłyną bo częstotliwość próbkowania (czyli sprawdzani stanów enkoderów w przerwaniu) jest na bardzo duża?
Żeby wykrywać zbocze trzeba przeanalizować fakt czy najpierw był stan niski później wysoki, lub na odwrót. Przy pomocy PINx inaczej się nie da. Czy w Twoim wypadku, pojedyncze przerwanie pozwala na wykrycie CAŁEGO zbocza, czy powiedzmy musi nastąpić kilka przerwań żeby to zbocze wykryć, jeśli silnik kręci się bardzo powoli, a przerwanie od timera ma dużą częstotliwość. To pytanie zadaje też, żeby się upewnić czy w Twoim rozwiązaniu wziąłeś pod uwagę zmienne obroty silnika. Bo nie sztuką jest dobrać częstotliwość timera do silnika który obraca się ciągle z tą samą prędkością.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2017, o 10:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

m_wojcik74 napisał(a):
...w jaki sposób się zabezpieczyłeś przed nieoczekiwanymi sytuacjami jak właśnie tą którą opisałem wyżej czyli, gdy zmienią się zbocza z obydwu enkoderów w jednym czasie...

W ostatnich projektach impulsy lecą z maksymalną częstotliwością 1kHz, przerwania taktuję 10kHz tak więc przynajmniej 10x gęściej niż sygnał...
m_wojcik74 napisał(a):
...liczysz na to że te sygnały nigdy siebie wzajemnie nie wpłyną bo częstotliwość próbkowania (czyli sprawdzani stanów enkoderów w przerwaniu) jest na bardzo duża?

Ja na to nie liczę... ja to wiem :) Sygnały z wejść badane są cyklicznie bez zatrzymywania się nawet na chwilkę. Mogę w ten sposób nawet kilka enkoderów sprawdzić/zliczyć/itd. co zajmie najwyżej kilkadziesiąt us w przerwaniach po czym wykonają się tam jeszcze inne ważne rzeczy i zostanie jeszcze czas na funkcję w pętli głównej programu poza przerwaniami. Podstawowa zasada to NIE CZEKAĆ tylko sprawdzać ewentualnie coś szybko wykonać/odhaczyć i lecieć dalej :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2017, o 11:32 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 sty 2013
Posty: 24
Lokalizacja: Lublin\Gliwice
Pomógł: 0

Okej :) teraz rozumiem. Dziękuje :)



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: 20 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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