Wpis z mikrobloga

Mam taki kod dla stm32f103, konfiguruje timer3, z zegarami nic nie zmieniam, więc standardowo częstotliwość maksymalna dla tego timera to 72MHz, jaka jest częstotliwość PWM? 72MHz / 4 = 18MHz? #stm32 #elektronika

TIM_TimeBaseInitStructure.TIM_Prescaler = 3;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 1000;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV4;
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@karololo: no jak na razie to nie masz żadnego PWM, chyba że gdzieś "wyżej" ustawiłeś go w tym trybie.
Po co ustawiasz ClockDivision?
Jeżeli wejście timera to 72MHz, a preskaler ustawiony na 3 to timer jest zasilany 24MHz
Teraz trzeba wyznaczyć mu wartość do jakiej ma doliczyć. W Twoim przypadku jest to Period - 1000.
24 000 000 / 1000 = 24 000[Hz]
  • Odpowiedz
@karololo: nie pamiętam dokładnie do czego,ale na pewno nie do preskalowania częstotliwości timera, opisane jest w reference manual procesora, sekcja timer registers.

zaraz opiszę resztę tylko coś zjem
  • Odpowiedz
@karololo: Jeśli to tak nie działa że możesz sobie dopasować preskaler do wartości rejestru ARR (Period)...
Trochę podstaw chłopie.

Jak masz na wejściu 72MHz a chcesz na wyjściu 20MHz to musisz timerem doliczyć aż do 3,2. (jeśli tego nie rozumiesz to powiedz mi, wyjaśnię)
Tylko w tym wypadku PWM nie ma racji bytu, bo masz raptem 3 ustawienia wypełnienia sygnału: 0%, 50%, 100%.

Poza tym na cholerę Ci 20MHz PWM???
  • Odpowiedz
@KryKry: jeśli procesor jest taktowany z częstotliwością 36MHz, to (w większości przypadków) timer też jest tak taktowany. Czyli dochodzi do 36 000 000 inkrementacji licznika timera. Timer ma swój rejestr TIMx_CNT który jest 32 bitowy. To znaczy że zmieści w sobie liczbę od 0 .. 4,294,967,295. Przy 36MHz timer przepełni się (doliczy do max i zresetuje się) po około 119 sekundach.

Możesz go ustawić w tryb output compare, czyli porównanie
  • Odpowiedz