logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Stm32f4 Discovery - precyzyjne obliczanie czasu timerów, różne metody

mk94 03 Lis 2014 19:54 1410 9
REKLAMA
  • #1 14099195
    mk94
    Poziom 12  
    Posty: 108
    Ocena: 9
    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 / C++
    Zaloguj się, aby zobaczyć kod



    Będę wdzięczny jeżeli ktoś wskaże mi miejsce w którym robię błąd.
    Pozdrawiam
  • REKLAMA
  • #2 14099218
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    A częstotliwość taktowania i magistral mamy sobie wywróżyć?
  • REKLAMA
  • Pomocny post
    #3 14099329
    eru12
    Poziom 10  
    Posty: 14
    Pomógł: 1
    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 14099534
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 14099637
    eru12
    Poziom 10  
    Posty: 14
    Pomógł: 1
    @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 14099890
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    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 14100240
    mk94
    Poziom 12  
    Posty: 108
    Ocena: 9
    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.
  • REKLAMA
  • #8 14100468
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Cała tajemnica nie jest tajna i zawarta jest tu: ]Link.

    Przejrzyj pozostałe zasoby na stronie. wg powyższych wskazówek.
  • #9 14100469
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Do konfiguracji i "oglądania" taktowania bardzo dobrze nadaje się program CubeMX od ST.
  • #10 14100489
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    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.

Podsumowanie tematu

✨ Użytkownik zmaga się z precyzyjnym obliczaniem czasu generowanego przez timery w STM32F4 Discovery. Wskazano, że częstotliwość zegara dla TIM2 wynosi 42 MHz, a nie 86 MHz, co jest kluczowe dla poprawnych obliczeń. Użytkownik testował różne wartości preskalera i okresu, jednak wyniki nie były zgodne z oczekiwaniami. Wskazówki dotyczące konfiguracji zegarów oraz narzędzi, takich jak CubeMX i kalkulatory dostępne na stronie ST, zostały podane jako pomocne w rozwiązaniu problemu. Użytkownik prosi o dodatkowe wyjaśnienia dotyczące działania systemu.
Wygenerowane przez model językowy.
REKLAMA