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

Zliczanie impulsów w atmelu

07 Wrz 2004 13:49 2079 7
  • Poziom 11  
    Witam
    Musze zbudować urządzenie na atmelu 90S2313 i oprogramować je w bascomie, które będzie 8 kanałowym obrotomierzem o zakresie 0-15000/min. Czy ktoś z Was spotkał się z takim problemem lub wie jak najefekrtywniej go zrealizować ?

    Pozdrawiam
    tenjaro
  • Poziom 13  
    Od ilu obrotów na minutę ma liczyć czy np. od 1/min?
  • Poziom 13  
    Najprościej inkrementować jakieś rejestry w kontrolerze i cyklicznie zerować je timerem
  • Poziom 11  
    Od 100 obrotów/ min
  • Poziom 25  
    Moim zdaniem bardzo istotnym parametrem jest dokładność zliczania obrotów na 1 min. Jesli zrobimy to tak że w ciągu 1 sek zliczamy obroty z kazdego kanału a potem wynik zliczania pomnozymy przez 60 co da nam obroty na minutę, to algorytm i matoda jest prosta, ale dokładność jest rzędu 60 obrotów na minutę.
    Możemy zliczać nie przez 1 sek a przez 2 sek wtedy wynik bedzie dwa razy dokładniejszy czyli 30 obr/sek. Ale jesli wynik ma byc jeszcze dokładniejszy i pomiar na przykład co sek to algorytm znacznie sie skomplikuje. Należy mierzyc czas jednego obrotu i z niego wyliczyć obroty na minutę. Sam pomiar czasu jednego obrotu dla osmiu wejść może mniej zaawansowanym w programowaniu sprawić pewien kłopot.
  • Poziom 11  
    Cały problem w tym, iż przy ośmiu kanałach i zakresie obrotów (impulsów) od 100 do 15000 /min konieczny jest pomiar dwóch parametrów :
    1) ilości obrotów /min z dokładnością do 25 obrotów / min
    2) różnica prędkości obrotowej dla poszczególnych kanałów z dokładnością do 1 impulsu/min

    nie mam pojęcia jak to zorganizować na jednym atmelu. :cry:
  • Poziom 32  
    A może zastosować multiplekser i przełączać te kanały wtedy łatwiej będzie to zrobić programowo bo elementów pomiarowych ten atmelek ma dosyć ograniczoną ilość.
  • Poziom 29  
    biezacy= port(we)
    zmiana= bie & poprzedni //bit w zmiana =1 kiedy na wej było 0 a teraz jest 1
    poprzedni=not biezacy

    for i=1 to 8
    ....if zmiana>127
    ........okres[i]= timer - timers[i]
    ........timers[i]= timer
    ....end
    ....zmiana= zmiana*2
    end

    timer to odpowiednio długi i szybki metronom
    timers pomocnicza tablica
    a w okres[] mamy, no okres ;-)