Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 sty 2025, o 23:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
 Tytuł: [STM32F4] PWM
PostNapisane: 2 gru 2013, o 23:36 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

Witam, mam nadzieję że piszę w dobrym dziale (chyba jedyny o ARM?)

Mam problem z PWM. Przeglądałem już nie jeden przykład, ale jakoś nie mogę poprawnie obliczyć częstotliwości (przynajmniej tak mi się wydaje).


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i teraz pytanie czy dobrze liczę?

Prescaler = ( (SystemCoreClock / 2) / 40000) - 1 = ( (168MHz/2) / 40kHz ) - 1 = 2100-1

Czyli prescaler ustawiony na 2099 daje mi częstotliwość timera 40kHz? Czyli już teraz otrzymuje okres PWM 40kHz?

Czy okres PWM ustawiam dopiero w Period i np. Period = (10 - 1) da mi okres 4kHz?

Na prawdę już zgłupiałem i prosze o pomoc.

Pozdrawiam
Karol



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 08:30 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 22:12 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

Dzięki za przykład, tylko mi chodzi o samo obliczenie częstotliwości. Czy to co napisałem jest dobrze, czy źle to rozumiem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 22:15 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

popatrz w przykładzie w na wiersz 35 .....

teraz już chyba widzisz , a łatwiej było na żywym przykładzie

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 22:29 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

No dobra, Preskaler jest ustawiony na 168MHz / 2 / 21kHz czyli = 4000

Tylko tak jak wcześniej pisałem. Żebyśmy się dobrze zrozumieli.

Obrazek

W Twoim przykładzie T1 to jest 21kHz, czy 21kHz/665? Mi tylko o to chodzi.
Przeglądałem sporo przykładów i próbowałem przeliczać ręcznie, ale nie do końca to "czuję".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 22:38 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

dokładnie tak

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 22:49 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

Ok
Rozumiem, że dokładnie tak, oznacza 21kHz. No i właśnie o to mi chodziło.

Czyli
( (SystemCoreClock /2) / 40000000) - 1 dostanę 40kHz

No a Period określa mi do jakiej wartości zliczy. Więc dla Twojego przykładu:
Częstotliwość 21kHz
Czas trwania jednego okresu ok 476us (T1)
Więc gdybym ustawił wypełnienie na 10 to stan wysoki będzie trwał 10 * (476us/665) = 7us

Dobrze kombinuje?

// edit

Rozpędziłem się z zerami. Miało być
( (SystemCoreClock /2) / 40000) - 1

więc u Ciebie w MHz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 23:31 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

nio ale załapałeś jak to liczyć .....
i o to chodziło


Autor postu otrzymał pochwałę

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2013, o 20:10 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

Kontynuując wątek timerów...

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam ustawiony TIM2 na zliczanie w dół. Potrzebuję odliczyć czas, gdzie przerwaniem będzie odpowiednia wartość na przetworniku ADC, więc pewnie będę musiał to jeszcze jakoś zmodyfikować. No, ale jak odczytać wartość na której timer przestał zliczać? Chyba, że źle to kombinuje?

// edit

Próbowałem odczytać wartość licznika funkcją
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i chyba otrzymuję to czego potrzebuję (sprawdziłem w trybie krokowym), tylko jest mały problem. Przy tych ustawieniach timer liczy bez przerwy, więc nie wiem ile razy doszedł do maksymalnej wartości. W jaki sposób go zatrzymać, aby odliczał jeden raz? Co prawda przy odpowiednim ustawieniu częstotliwości nie będzie mnie interesowało ile razy będzie liczył od nowa bo zmieszczę się w 1 cyklu, ale w fazie testowej chciał bym widzieć że jest max i coś trzeba poprawić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO