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.

ATmega32 - Wykorzystanie Timerów do kilku zadań

05 Lis 2014 15:20 1206 4
  • Poziom 8  
    Cześć,
    mam pytanie odnośnie Timerów w uC ATmega.
    Potrzebuję następujących opcji:
    - zliczanie impulsów z dwóch enkoderów
    - generowanie dwóch przebiegów PWM
    - generowanie przerwania co kilka ms.

    W ATmedze 32 mam 2 timery 8-bitowe i 1 16-bitowy. Wymyśliłem tak, że za pomocą timerów 0 i 2, zliczam impulsy.
    I teraz pierwsze pytanie: czy da się zliczać impulsy z zewnątrz używając Timer2? Wtedy bym podpiął do nóżki TOSC.
    Natomiast Timer1 używałbym do generowania dwóch sygnałów PWM.
    Tylko jeszcze zostaje generowanie sygnału co kilka ms... Mógłbym do tego użyć przerwania od Watchdoga, ale minimalny czas to jest ok 17ms, co jest za dużo. Czy jest możliwość zaglądnięcia do Watchdoga i zobaczenie ile ma aktualnie zliczonych impulsów?

    Czy są jakieś AVR'y mające 4 timery?

    Wiem, że to wszystko mógłbym zrobić na jakimś STM'ie, ale mam około miesiąca czasu i nie wiem czy dałbym rade go ogarnąć, po za tym kwestia lutowania zostaje jeszcze. Chyba żebym dał płytke STM32-Discovey...

    Pozdrawiam, Bartek
  • Pomocny post
    Poziom 28  
    bartek1333 napisał:
    I teraz pierwsze pytanie: czy da się zliczać impulsy z zewnątrz używając Timer2? Wtedy bym podpiął do nóżki TOSC.
    ATmega32(L) datasheet napisał:
    The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation.

    Jak źle (lub dobrze) jest z tym w praktyce nie wiem.


    bartek1333 napisał:
    Tylko jeszcze zostaje generowanie sygnału co kilka ms...

    Wykorzystaj przerwanie timera generującego PWM.


    bartek1333 napisał:
    Czy są jakieś AVR'y mające 4 timery?

    Podobną wielkość (pamięć, obudowa) co ATmega32 ma np. ATxmega32D4 / A4U, ale wymaga niższego napięcia i ma inaczej rozłożone piny. Na 5 V, ale w większych obudowach są m.in. ATmega64/128 i podobne.
  • Pomocny post
    Poziom 1  
  • Pomocny post
    Poziom 36  
    bartek1333 napisał:
    Cześć,
    mam pytanie odnośnie Timerów w uC ATmega.
    Potrzebuję następujących opcji:
    - zliczanie impulsów z dwóch enkoderów
    - generowanie dwóch przebiegów PWM
    - generowanie przerwania co kilka ms.

    ..............?

    Czy są jakieś AVR'y mające 4 timery?

    ...........

    Pozdrawiam, Bartek

    Wystarczy ci Atmega48/88/168
    Dla 2-ch sygnałów PWM wystarczyłby 1 timer z dwoma kanałami (każdy ma 2 kanały).
    Jeden timer dla generowania przerwań/impulsów co ileśtam msec.

    Do obsugi encoderów nie trzeba timera..., obsłużysz je wykorzystując dwa z 3'ch dostepnych grup PCINT (PCINT2: PCINT0) konfigurując odpowiednio po dwa piny dla ChA i ChB.

    e marcus
  • Poziom 8  
    Marek_Skalski napisał:
    Zaletą Discovery jest gotowy układ razem z programatorem/debugerem. Do Xmegi musisz to wszystko dokupić za pieniądze większe niż cała płytka discovery.

    Dlatego wolałbym jak narazie unikać XMeg, bo STM32 są chyba bardziel popularne no i jak narazie mam programator do tego :)

    emarcus napisał:
    Wystarczy ci Atmega48/88/168

    faktycznie, nawet Timer0 ma dwa wyjścia PWM, czego w ATmedze8 brakło...

    Ostatecznie jednak chyba zrezygnuję z enkoderów, przynajmniej tych co miałem zamiar mieć. rozdzielczość 12 "tików" na obrót, co przy silniku 30:1 i 1000RPM na wyjściu daje 30 tików / 5ms (okres co jaki będę chciał wywoływać pętlę sterującą). To jest zdecydowanie za mało dla kontroli prędkości silników, a taki miałem zamiar (urządzenie to robot linefollower).
    Oczywiście zostaje jeszcze opcja enkoderów magnetycznych np AS5040 (rozdzielczość 10bit), ale po pierwsze cena wysoka, a po drugie może po prostu narazie zbuduje to, a kolejny już po dopracowaniu algorytmów jazdy, dam enkodery i dalej będę dopracowywał.

    emarcus napisał:
    Do obsugi encoderów nie trzeba timera..., obsłużysz je wykorzystując dwa z 3'ch dostepnych grup PCINT (PCINT2: PCINT0) konfigurując odpowiednio po dwa piny dla ChA i ChB.

    Przy ww prędkościach tików może by było OK, ale już przy tych magnetycznych to prawie niemożliwe, bo procek by co kilkanaście us dostawał przerwanie i jeszcze policzyć to wszystko by musiał.

    Nadal mnie kusi ten STM, tylko jak już wspomniałem, czasu niewiele i układ bym musiał wlutować, co przy LQFP nie jest prostą sprawą, w płytkę, żeby wagę odciążyć.
    No cóż, narazie zostanę w takim razie chyba przy ATmedze 16/32, bo ona obsłuży mi wszystsko bez enkoderów, a potem zobaczymy.
    Dzięki za odpowiedzi:)