Herkese kolaylıklar; tek kanaldan aldığım PWM sinyalinin frekans değerini programın çalışması sırasında değiştirmek istiyorum. Yaptığım birkaç denemede olumsuz oldu. Programın koşarken, PWM sinyalini resetlemeden frekans değerini değiştirmek mümkün olabilir mi?
Duty değeri TIMx->CCRx ile ayarlanır. Bunun içerisindeki değeri değiştirerek dutydeki değişimi gözlemleyebilirsin
Frekans değerini nasıl değişitirebilirim. TIM_TimeBaseStructure.TIM_Prescaler = Prescaler ile kurulum sırasında prescaler değerini set ediyoruz. Bu değeri program koşarken nasıl değişitirebiliriz. Aynı komutu program koşarken uyguladığımda değişiklik olmuyor.
Timer rutinin de prescaler değerini bir değişkene işaret et. Sonra o değildi sonsuz doğu de yeni bir değere set et. Sonra rutin i çağır. Bu şekilde yapabilirsin
uint16_t StepPeriod[]={5,10,15,.......}
frekans değerine göre yukarıdaki tarzda bir dizi oluşturabilirsin.
TIM4->ARR = StepPeriod[sayac];
TIM4->CCMR1 =StepPulse[sayac];
sayac++;
bu şekilde oluşturursan frekans değerin değişir. yada dışarıdan değer girebilirsin.
(https://s16.postimg.cc/t97i6dbtt/image.png) (https://postimg.cc/image/t97i6dbtt/)
(https://s16.postimg.cc/k2p7j36ld/image.png) (https://postimg.cc/image/k2p7j36ld/)
(https://s16.postimg.cc/5xjeh9xk1/image.png) (https://postimg.cc/image/5xjeh9xk1/)
Bu resimlerden yararlanarak yapabilirsin. Duty ve frekans ayarlarının tamamını yapman mümkün
Tum arkadaslara tesekkurler. Çok faydalı oldu.
Arkadasların verdiği ilhamla ve saygıyla andığım bunalmıs (z) hocamızın tavsiyeleri üzerine REHBER'de (RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced AdRM®-based 32-bit MCUs) yaptıgım incelemede su ifadeyi gördüm:
17.4.11 TIM1&TIM8 prescaler (TIMx_PSC)
Bits 15:0 PSC[15:0]: Prescaler value
The counter clock frequency (CK_CNT) is equal to fCK_PSC / (PSC[15:0] + 1).
PSC contains the value to be loaded in the active prescaler register at each update event
(including when the counter is cleared through UG bit of TIMx_EGR register or through
trigger controller when configured in "reset mode").