Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Liczenie impulsów w 3 kanałach timera.

KubaKam 30 Sty 2017 17:18 810 20
  • #1 30 Sty 2017 17:18
    KubaKam
    Poziom 3  

    Muszę liczyć impulsy z trzech liczników Geigera Mullera. Czy mogę do tego celu wykorzystać np. trzy kanały jednego licznika, czy też muszę użyć trzech liczników? Procesor mam na płytce typu STM32F100RB.

  • #2 30 Sty 2017 17:27
    BlueDraco
    Specjalista - Mikrokontrolery

    Odpowiedź na to pytanie znajdziesz łatwo w Reference Manual. Zgaduję, że timer nazywasz "licznikiem". Wystarczy sprawdzić, ile liczników ma jeden timer.

  • #3 30 Sty 2017 17:34
    KubaKam
    Poziom 3  

    Od tego zaczałem - od czytania Manuala, ale nic nie rozumiem. Nie mam dużego doświadczenia. Coś tam kombinuję, ale nie działa jak trzeba. Żeby zrozumieć instrukcję, trzeba znać używane tam pojęcia. Czy timer ma pracować w trybie capture? Byłbym wdzięczny za podpowiedź które rejestry ustawić. Wybrałem TIM4 i wejścia GPIO dla kanałów B6, B7, B8, B9, które ustawiłem jako floating input.

  • Pomocny post
    #4 30 Sty 2017 17:51
    BlueDraco
    Specjalista - Mikrokontrolery

    Timer ma jeden licznik. żeby zliczać impulsy, musisz skonfigurować go na zliczanie z któregoś wejścia, a nie domyślne zliczanie impulsów zegara. Rejestry CCR nie są Ci potrzebne.

  • #5 30 Sty 2017 17:55
    KubaKam
    Poziom 3  

    A kanały CCR1 - CCR4 nie mogą zliczać zewnętrznych impulsów? Mają połączenia z pinami GPIO w jakim celu?

  • #6 30 Sty 2017 18:22
    toch88
    Poziom 9  

    Zobacz sobie :

    Timerów masz kilka w zależności od Twojego STM32 TIM1, TIM2-5 etc, ja korzystam z F4 więc nie chce ci za bardzo motać, ale generalnie zasada jest taka sama, na samy początku rozdziału o jakim koliwek Timerze masz napisane że Timery składają się z 16 bitowego licznika

    RM napisał:
    The TIM9/10/11 general-purpose timers consist of a 16-bit auto-reload counter driven by a
    programmable prescaler.


    CCR1-4 są to rejestry , które będą miały wartość TIMx->CNT gdy wystąpi event(IC1), z tym że CC1 musi być skonfigurowany jako INPUT.
    U mnie jest to w rejestrze TIMx->CCMR1 pierwsze 2 bity

  • #7 30 Sty 2017 18:27
    KubaKam
    Poziom 3  

    Czyli CCR do zliczania impulsów się nie nadają, ale np. do mierzenia okresu zewnętrzych impulsów tak? Mam tak ja napisałeś skonfigurowane i chyba zlicza impulsy wewnętrznego zegara po zmianie stanu pinu.

  • Pomocny post
    #8 30 Sty 2017 18:34
    toch88
    Poziom 9  

    Hmm na początek może spróbuj coś prostego, spróbuj tak ustawić Timer żeby działał ci na jedno zbocze i np narastające w trybie InputCapture i generował w tym momencie przerwanie, a ty każdorazowo będziesz sobie zliczał (dodawał +1). Podpowiem tobie że Ciebie Timer15 posiada 2 kanały i może wygenerować dwa przerwania, spójrz sobie na stronę 377 w RM0041.

  • #9 30 Sty 2017 18:36
    KubaKam
    Poziom 3  

    No to tak będę próbował. Dziękuję.

  • Pomocny post
    #10 31 Sty 2017 01:25
    rb401
    Poziom 30  

    KubaKam napisał:
    czy też muszę użyć trzech liczników? Procesor mam na płytce typu STM32F100RB.


    Nasuwa mi się pytanie czy w ogóle potrzebujesz to zrobić na timerach.
    A nie po prostu użyć przerwań od zboczy na pinach (EXTI). Typowo czas martwy G-M podawany jest rzędu 100µs, czyli nawet jak na wolny F100 jest to mnóstwo czasu i nie ma ryzyka zgubienia impulsów. Co do szerokości impulsu też nie powinno być problemu, bo EXTI łapie impulsy od 10ns.
    W obsłudze przerwania od EXTI inkrementujesz po prostu jakieś zmienne w pamięci (osobne dla każdego licznika), będące dla całej reszty programu w istocie tym samym co rejestry liczników w Twojej metodzie.
    Nie widzę akurat w użyciu timerów żadnej zalety, tym bardziej jeśli tu tylko chodzi o zwykłe zliczanie liczby impulsów.
    A choćby korzystając z EXTI masz możliwość użycia zmiennych 32bitowych (lub dłuższych wedle życzenia) a liczniki w timerach masz akurat w F100 tylko 16bitowe to znowu masz problem bo musisz uważać jak się "przekręcą". Masz też większa elastyczność doboru pinów i łatwość rozbudowy do większej liczby kanałów.

  • #11 31 Sty 2017 10:12
    KubaKam
    Poziom 3  

    EXTI to bardzo dobry pomysł. O ile wiem, na każdym porcie GPIO można uruchomić tylko jeden EXTI. Na płytce którą mam, mam porty A,B,C i chyba dwa piny D, więc mogę zliczać z czterech źródeł.

  • #12 31 Sty 2017 10:33
    BlueDraco
    Specjalista - Mikrokontrolery

    To nie jest dobry pomysł.
    Jak coś się da zrobić sprzętowo - to należy to tak zrobić.

  • #13 31 Sty 2017 10:44
    rb401
    Poziom 30  

    KubaKam napisał:
    O ile wiem, na każdym porcie GPIO można uruchomić tylko jeden EXTI


    To nie tak. Chodzi o to że można użyć tylko po jednym pinie z danym numerem bitu w porcie. A wybór portów z których wybieramy jest całkowicie dowolny. Czyli tylko nie mogą być obydwa na raz użyte np. PA_5 i PB_5.


    BlueDraco napisał:
    To nie jest dobry pomysł.
    Jak coś się da zrobić sprzętowo - to należy to tak zrobić.


    Nie rozumiem tej myśli. EXTI to rozwiązanie sprzętowe.

  • #15 31 Sty 2017 11:15
    rb401
    Poziom 30  

    Piotrus_999 napisał:
    Nie jest bo zliczanie jest programowe.


    Na ścisłość masz rację.
    Ale w obsłudze przerwania, dodanie jedynki do zmiennej to nie chyba jest jakiś wielki program, którego powinno się wystrzegać.
    Tu jest mowa o rozwiązaniu w którym konstrukcja urządzenia zapewnia zachowanie między przerwaniami minimalnego odstępu 24000 (!) taktów na najwolniejszym ze wszystkich STM32.
    Gdzie tu sens trzymać się timerów?
    Dalej nie rozumiem myśli kolegi BlueDraco wyrażonej wyżej.

  • #16 31 Sty 2017 11:28
    Piotrus_999
    Poziom 40  

    Nie ma po co dawać przerwań, które zakłócają naturalny tok programu jeżeli mamy wygodne, przeznaczone do tego liczniki. Mogą one liczyć nawet wtedy kiedy rdzen śpi. Użycie exti to takie brutforce.

  • #17 31 Sty 2017 12:03
    rb401
    Poziom 30  

    Piotrus_999 napisał:
    Mogą one liczyć nawet wtedy kiedy rdzen śpi.


    Wreszcie jakiś jeden rzeczowy argument za wersją na sprzętowych licznikach. Pozostaje tylko kwestia czy ma to jakieś znaczenie w tym konkretnym projekcie.

    Piotrus_999 napisał:
    Użycie exti to takie brutforce.

    Hmmm....

  • #19 31 Sty 2017 12:17
    Freddie Chopin
    Specjalista - Mikrokontrolery

    rb401 napisał:
    Nie rozumiem tej myśli. EXTI to rozwiązanie sprzętowe.

    Idąc tym tropem użycie mikrokontrolera to już rozwiązanie sprzętowe (;

  • #20 31 Sty 2017 12:25
    rb401
    Poziom 30  

    Piotrus_999 napisał:
    inaczej mówiąc "na palę", i często wskazuje na to że się nie umie skonfigurować sprzetu


    Ooooo..........
    Ogromnie mi tu wstyd w tym momencie, ale przyznaję się, używałem w przeszłości EXTI. I to zdarzyło się więcej niż raz. ;)

  • #21 15 Lut 2017 10:50
    KubaKam
    Poziom 3  

    Ponieważ procesor w czasie zliczania praktycznie nic innego nie robi, impulsy są zliczane w zwyczajnej pętli przez 1 sek. jako zmiany stanów pinów wejściowych. Ponieważ częstotliwości nie przekraczają 4 kHz a impulsy mają wypełnienie 50%, więc nie ma obawy zgubienia itp.

 
Black Friday do -15%
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
Ferguson