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.

stm32 - Obsluga enkodera - nie resetujący się licznik

mateuszaaa 09 Paź 2013 09:55 1671 6
  • #1 09 Paź 2013 09:55
    mateuszaaa
    Poziom 9  

    Witam staram sie uruchomić sprzętową obsługe encodera w stm32F4. Generalnie całość już działa problemem okazuje się sam timer. Działa inkrementacja i dekrementacja timera jednakże licznik nie chce się przepełnić zarówno przy zliczaniu w górę i w dół timer dolicza do maksymalnej wartości zapisanej w rejestrze CNT. przy zliczaniu w góre (obrocie koła) wygląda to mniej więcej tak
    0....100...997 998 999 1000 999 1000 999 1000 ...
    dla wartości rejestru ARR = 1000

    jak widać dane wysylam za pomocą usart`u jednakże debugowałem też gdb wyniki są takie same;/

    Z góry dzięki za wszelkie sugestie

    Poniżej zamieszczam kod inicjalizujący enkoder oraz main`a

    inicjalizacja:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    kod
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Z gory dzieki za pomoc :)

    0 6
  • #2 09 Paź 2013 12:46
    atom1477
    Poziom 43  

    Niestety wygląda na to że tak po prostu ma być:

    Cytat:
    Encoder interface mode acts simply as an external clock with direction selection. This means that the counter just counts continuously between 0 and the auto-reload value in the TIMx_ARR register (0 to ARR or ARR down to 0 depending on the direction).

    0
  • #3 09 Paź 2013 14:54
    mateuszaaa
    Poziom 9  

    "continuously" sugeruje że jednak nie powinno zatrzymywać sie na wartośći ARR (auto RELOAD value)

    w dokumentacji F1 jest ten sam tekst, a jednak timer sie przekręca

    0
  • #4 10 Paź 2013 18:11
    adamusx
    Poziom 27  

    Nie powinno zatrzymywać się na wartości AAR tylko liczyć dalej (przekręcić się). Timer musi być zle skonfigurowany.

    Poniższy kod na pewno działa :)

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 11 Paź 2013 11:38
    atom1477
    Poziom 43  

    rajszym napisał:
    mateuszaaa napisał:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Czy nie powinno być:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Nie ma to znaczenia. Najwyżej by działało z inną prędkością.
    A jeżeli Ci chodzi o to że preskaler nie może mieć wartości 0, no to on nie ma takiej wartości :D
    TIM1->PSC = 0 daje preskaler równy 1.
    TIM1->PSC = 2 dale preskaler równy 2.
    itp.
    Czyli zawsze większy o 1 od wartości wpisanej do rejestru. Więc i 0 jest poprawną wartością.

    0
  Szukaj w 5mln produktów