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.

Stm32f4 Discovery, obliczanie czasu timerów

mk94 03 Lis 2014 19:54 897 9
  • #1 03 Lis 2014 19:54
    mk94
    Poziom 12  

    Witam.
    Od dłuższego czasu mam problem z precyzyjnym obliczaniem czasu generowanego z timerów. Przejrzałem sporo forów i innych poradników, ale co temat to inne obliczenia.
    Na początku trafiłem na taki schemat. Że częstotliwość z zegara w przypadku tim2 jest to 86Mhz jest dzielona przez TIM_ClockDivision, następnie przez Prescaler, a potem dobiera się okres sygnału czyli TIM_Period.
    Ale z tego nic mi nie wychodzi mądrego.
    Druga podpowiedź to że częstotliwość generowanego sygnału, to wynik częstotliwości zegara podzielonej przez iloczyn Prescalera i Period.
    Ta opcja wydaje się bardziej prawdopodobna, ponieważ w przeciwieństwie do pierwszego przypadku uzyskuję coś zbliżonego do mojego wyniku. Sprawdzam to na programie zapalającym diodę i staram się uzyskać 1 Hz. W przypadku drugiej metody dobierając Prescaler = 40000 i Period 500 uzyskuję z obliczeń uzyskuję 2,15 Hz a z obserwacji coś około 0,8 Hz.
    Pierwszą metodę sprawdzałem też na oscyloskopie i wyniki w ogóle się nie pokrywały.
    Kod do sprawdzania.

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Będę wdzięczny jeżeli ktoś wskaże mi miejsce w którym robię błąd.
    Pozdrawiam

  • #2 03 Lis 2014 19:59
    tadzik85
    Poziom 38  

    A częstotliwość taktowania i magistral mamy sobie wywróżyć?

  • Pomocny post
    #3 03 Lis 2014 20:20
    eru12
    Poziom 9  

    Cytat:
    Że częstotliwość z zegara w przypadku tim2 jest to 86Mhz jest dzielona przez TIM_ClockDivision, następnie przez Prescaler, a potem dobiera się okres sygnału czyli TIM_Period


    Nie, nie i nie. Na podstawie datasheeta:

    Cytat:
    Several prescalers allow the configuration of the three AHB buses, the high-speed APB (APB2) and the low-speed APB (APB1) domains. The maximum frequency of the three AHB buses is 168 MHz while the maximum frequency of the high-speed APB domains is 84 MHz. The maximum allowed frequency of the low-speed APB domain is 42 MHz.


    Czyli dla TIM2 częstotliwość będzie nie 86, a 42 MHz.

    Po drugie - sprawdź konfigurację systemu (czy zegar systemowy to aby na pewno 168MHz). Z resztą mam nadzieję dasz rade ;)

    Pozdrawiam

  • #4 03 Lis 2014 21:05
    Marek_Skalski
    Poziom 33  

    eru12 napisał:
    Czyli dla TIM2 częstotliwość będzie nie 86, a 42 MHz.

    To również nie jest prawdą.

    1. Nie podałeś źródła taktowania i częstotliwości. Zakładam, że to może być HSE+PLL na 168MHz.
    2. Nie podałeś ustawienia preskalera AHB. Zakładam, że jest 1:1.
    3. TIM2 jest przypięty do APB1, dla której max. to 42MHz, więc preskaler może być ustawiony na 1:4.
    4. Jeżeli preskaler APB1 ma wartość inną niż 1:1, to wszystkie timery na tej magistrali są taktowane zegarem 2x wyższym. Przy wszystkich powyższych założeniach daje to 84MHz.
    5. To samo dotyczy APB2. Timery mogą być taktowane na 168MHz. Pozostałe układy są taktowane max. 84MHz.
    6. Co do preskalera samego timera i okresu, to należy uwzględnić wartość 0x0000. W praktyce wartości wyliczone jako ilorazy należy pomniejszyć o 1.

  • #5 03 Lis 2014 21:23
    eru12
    Poziom 9  

    @Marek_Skalski

    Oczywiście masz rację ;) Nie chciałem zbytnio mieszać (choć może powinienem), więc założyłem, że:

    1) HSE + PLL, 168 MHz (co z resztą poleciłem sprawdzić)
    2) "W przypadku drugiej metody dobierając Prescaler = 40000 (...) a z obserwacji coś około 0,8 Hz. " - tym się kierowałem, tzn. domyślam się, że częstotliwość taktowania magistrali to właśnie 42MHz ;)


    Cytat:
    Co do preskalera samego timera i okresu, to należy uwzględnić wartość 0x0000. W praktyce wartości wyliczone jako ilorazy należy pomniejszyć o 1.


    Zgoda, o tym nie można o tym zapomnieć ;)

  • #6 03 Lis 2014 22:18
    piotrva
    Moderator Mikrokontrolery

    Ogólnie na stronie ST w dokumentacjach jest narzędzie do automatycznej konfiguracji zegarów (plik excela generujący odpowiedni plik konfiguracyjny) - korzystając z tego kalkulatora powinieneś od razu zobaczyć jak szybko będą pracowały poszczególne magistrale.

    Także, o ile korzystasz z gotowca tej konfiguracji, powinieneś mieć w takim pliku zawarte komentarze z częstotliwościami tychże magistral.

  • #7 04 Lis 2014 00:33
    mk94
    Poziom 12  

    Dziękuję za odp, jak widzicie dopiero zaczynam zabawę z programowaniem takich zabawek. Czy da się jakoś wytłumaczyć jak to działa i co się ze sobą łączy, jeśli tak to proszę bardzo o takie wtajemniczenie.

  • #8 04 Lis 2014 08:30
    tadzik85
    Poziom 38  

    Cała tajemnica nie jest tajna i zawarta jest tu: ]Link.

    Przejrzyj pozostałe zasoby na stronie. wg powyższych wskazówek.

  • #9 04 Lis 2014 08:32
    BlueDraco
    Specjalista - Mikrokontrolery

    Do konfiguracji i "oglądania" taktowania bardzo dobrze nadaje się program CubeMX od ST.

  • #10 04 Lis 2014 08:42
    tadzik85
    Poziom 38  

    BlueDraco napisał:
    Do konfiguracji i "oglądania" taktowania bardzo dobrze nadaje się program CubeMX od ST.

    Jeśli korzystasz z Cube, jeśli nadal z SPL, do jest odpowiedni exel, który pokazuje to samo.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME