Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zliczanie impulsów z 3 wejść

adamusx 24 Maj 2005 08:29 2273 12
  • #1 24 Maj 2005 08:29
    adamusx
    Poziom 27  

    Witam

    Mam w planach budowę prostego manipulatora.
    Do jego obslugi chcialem użyc mikrokontroler AT908515 lub podobny.

    Na jego wejscia beda podane miedzy innymi impulsy z 3 enkoderów do pomiaru obrotów.Maksymalna czestotliwosc pojawiania sie impulsow byla by na granicy 400 impulsow/s
    I tutaj mam pytanie: czy można zliczać te impulsy nie wykorzystujac do tego celu przerwań i podlaczajac wyjscia z enkoderow do dowolnych pinow ktorych zmiana stanow zwiekszala lub zmniejszala by odpowiednio jakas zmienna w mikrokontrolerze???????[/b]

    0 12
  • #2 24 Maj 2005 08:43
    MirekCz
    Poziom 35  

    jasne, wystarczy ze program odpalony w mikroprocesorze bedzie wywolywal np 1000 razy/sekunde jakas petle glowna, w ktorej bedziesz mial sprawdzenie stanu pinow i zwiekszenie (lub nie, zaleznie czy nastapila zmiana stanu) wartosci licznikow.

    Czyli najprostszy program wyglada mniejwiecej tak

    main()
    {
    .....
    while (1)
    {
    ... (program, ktory wykonuje sie w mniej niz 1ms)
    //sprawdzenie stanu pinow
    ... (tutaj zliczasz zmiany stanu pinow odpowiedzialnych za enkoder)
    }
    }

    Bardziej skomplikowany program bedzie wykorzystywal timer, ktory bedzie odpalal podprogram co 1ms (w tym momencie program glowny moze miec dowolna petle, bo za obsluge enkoderow bedzie odpowiadal podprogram wywolywany co 1ms)

    0
  • #3 24 Maj 2005 10:23
    LordBlick
    VIP Zasłużony dla elektroda

    Program w pętli głównej odpada, ze względu na dość standardowe i jednocześnie bezużyteczne w tym przypadku konstrukcje typu waitms, które wydają się być niektórym programistom potrzebne do szczęścia... ;)

    0
  • #4 24 Maj 2005 10:41
    McRancor
    VIP Zasłużony dla elektroda

    W przerwaniu timera, powiedzmy 1000razy na sekundę, sprawdzany jest stan pinu i porównywany ze stanem odczytanym poprzednio, jeśli jest inny to zwiększany jest odpowiedni licznik, a stany aktualne są przepisywane jako poprzednie. Robiłem tak setki razy i zawsze działało dobrze, tylko miałem do czynienia z gotowymi układami impulsatorów ze sprzętową eliminacją drgania styków. Nie powinno być problemów, a w razie konieczności zmniejszasz częstotliwość.

    -1
  • #5 24 Maj 2005 10:46
    yego666
    Specjalista PLD

    Jesli petla glowna przy najdluzszym mozliwym przebiegu bedzie trwala krocej niz polowe odwrotnosci najwiekszej z mierzonych czestotliwosci wejsciowych (zakladajac przebieg o wypelnieniu 1:1) to czytajac port wejsciowy w kazdym obiegu petli, mozna poprzez porownanie biezacej wartosci z poprzednio sczytana, ustalic czy ktorys sygnal sie zmienil. Majac taka informacje, mozemy juz bez problemu manipulowac zawartoscia odpowiednich licznikow wykonanych krokow. Jesl zas nie jestes w stanie zagwarantowac odpowiednio krotkiego czasu wykonania pojedynczego przebiegu petli glownej, to raczej przerwania beda sluszniejszym rozwiazaniem.
    Pozdrawiam, yego

    0
  • #6 24 Maj 2005 10:58
    MirekCz
    Poziom 35  

    yego666 napisał:
    Jesli petla glowna przy najdluzszym mozliwym przebiegu bedzie trwala krocej niz polowe odwrotnosci najwiekszej z mierzonych czestotliwosci wejsciowych (zakladajac przebieg o wypelnieniu 1:1) to czytajac port wejsciowy w kazdym obiegu petli, mozna poprzez porownanie biezacej wartosci z poprzednio sczytana, ustalic czy ktorys sygnal się zmienil. Majac taka informacje, mozemy juz bez problemu manipulowac zawartoscia odpowiednich licznikow wykonanych krokow. Jesl zas nie jestes w stanie zagwarantowac odpowiednio krotkiego czasu wykonania pojedynczego przebiegu petli glownej, to raczej przerwania beda sluszniejszym rozwiazaniem.
    Pozdrawiam, yego


    Yego, moje gratulacje, z Ciebie jest dobry material na profesora - dawno juz nie czytalem tak skomplikowanego tlumaczenia takiego prostego zagadnienia ;-)

    A co do problemu typu drgania stykow, to najlepiej:
    a)zastosowac kondensator
    b)zczytywc wartosci czesciej (np trzy razy czesciej) i wybrac do obliczen impulsow wartosc, ktora sie powtarza (tzn jak z 3 zczytan masz 2x"0" i 1x"1" to wartosc rzeczywista zakladasz "0")

    Tylko w twoim wypadku ten problem chyba nie bedzie wystepowal, zalezy jakie masz enkodery.

    0
  • #7 24 Maj 2005 16:12
    adamusx
    Poziom 27  

    Z drganiami styków nie bedzie problemow poniewaz sygnaly beda pochodzily z enkoderów optycznych (podobnie jak to dziala w myszce) wiec nie ma tu zadnych mechanicznych styków.

    Zastanawiam sie tez czy podlaczac z kazdego enkodera :

    1)Bezposrednio 2 sygnaly pzezsuniete w fazie ,tylko wowczas trzeba by rozwiazac programowo kwestie rozrozniania kierunku i to jeszcze razy 3 .

    lub
    2)prostym ukladzikiem ( przerzutnik D) podlaczonym zaraz za enkoderem - i wowczas na procka podawal bym tez 2 sygnaly, z czego jeden odrazu wskazywal by mi kierunek obrotow.

    Jesl ktos wie jak rozwiazac ta pierwsza kwestie programowo to prosze o pomoc:)

    aha,program chce pisac w FastAVR, ew Bascomie ,chociaz polecenia sa prawie identyczne.

    0
  • #8 24 Maj 2005 16:29
    McRancor
    VIP Zasłużony dla elektroda

    Ja bym to zrobił na prostym układziku, wtedy przerwanie będzie można skrócić, a poza tym przerzutnik da ładny prostokąt, ale można też programowo, w końcu mniej elektroniki itd.

    Pomyśl co dla Ciebie będzie prostrze!

    0
  • #9 24 Maj 2005 17:55
    MirekCz
    Poziom 35  

    adamus.. szkoda marnowac przerzutniki :)
    Programowo na mikroprocesorze zalatwisz to kilkoma instrukcjami - a o ile tanszy, mniejszy, niezawodniejszy i latwiejszy do montazu bedzie uklad.

    0
  • #10 24 Maj 2005 18:43
    frohme
    Poziom 21  

    No to oszacujmy przypadek niemiły - masz trzy enkodery każdy 400 imp/sek, jak złośliwie trzy się ustawią to dadza impulsy w takim układzie, że musisz to sprawdzać z częstotliwością min 3 x 400 Hz plus zapaspowiedzmy około 1500Hz. Jeżeli w BASCOMie ci sie to uda aby pętla główna była krótsza niż 0,66 ms (no coś jeszcze z tymi zliczanymi impulsami bedziesz robił, jakiś wynik, reakcja na zjawisko itp.) i będziesz nad tym czasem miał pełną kontrolę to duże gratulacje - ja wypadam na wstępie, wejdę w przerwania bo tam moge to kontrolować.

    0
  • #11 24 Maj 2005 19:42
    adamusx
    Poziom 27  

    Oczywiscie , zrobie to na przerwaniach,tzn po wystąpieniu przerwania bedzie wykonywana instrukcja sprawdzajaca stany z 3 lini enkoderów.Czestotliwosc generowania przerwań powiedzmy powiedzmy 6x 400 /s powinna w zupełnosci zapewnić odpowiedni zapas poprawnosc odczytu sygnalow nawet w przypadku pojawienia sie impulsów z 3 enkoderów jednoczesnie.
    Tylko zastanawiam sie jak najprosciej ustalic kierunek obrotow programowo majac 2 sygnaly przesuniete w fazie i czy to bedzie poprawnie dzialalo dla 3 enkoderow jednoczesnie.

    0
  • #12 24 Maj 2005 20:23
    Dexter77
    Poziom 28  

    Zalezy jaka chcesz uzyskac dokladnosc. Dla typowych enkoderow z przebiegami przesunietymi w fazie o 90 stopni mozna zliczac 1 impuls na okres 2 lub nawet 4. Zliczanie 1 impulsu na okres jest banalne. Na jednej koncowce szukasz jakiegos zbocza zalozmy ze narastajacego i patrzysz jaki stan jest na drugiej koncowce, jesli wysoki dodajesz jesli niski odejmujesz impuls od jakiejs zmiennej (lub na odwrot zalezy jak podlaczysz ;) ) Gorzej jest zliczac 2 i 4 impulsy na okres.
    Pozdro
    Dexter

    0
  • #13 24 Maj 2005 20:52
    adamusx
    Poziom 27  

    Dzieki za podpowiedz, pomysle nad tym rozwiazaniem :) Nie bede sie bawil w dokladniejszy odczyt, w zupelnosci wystarczy odczyt zbocza jednego sygnalu.

    0
  Szukaj w 5mln produktów