Delay yazmadan SET_COMPARE fonksiyonu çalışmıyor

Başlatan hakan6nay, 30 Haziran 2021, 09:28:25

hakan6nay

__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,pwm1);
HAL_Delay(1);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm2);
HAL_Delay(1);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,pwm3);
HAL_Delay(1);

STM32F103C8 blue pill'de timer2 den 3 farklı PWM çıkışı almaya çalışıyorum. Aldığım çıktılarla RGB Led sürmek istiyorum. Ama delay atmadan bir değişiklik yapamıyorum ledlerde. delay atmadan bunu yapmanın bir yolu var mı?

pwm1,pwm2,pwm3 globalde tanımladığım integerlar.

esdevhk

#1
Düzeltme: Farklı kanallar oldugunu görmemiştim özür dilerim. Ben aynı kanalda bu işlemi yapmaya çalıştığınızı düşündüm.

PWM sinyalinizin frekansı nedir?
Eğer bu örnekte 1kHz'den yüksek bir sinyaliniz var ise TIM birimi TIM_CNT değeri belirlediğiniz overflow değerine gelmeden yeni bir değer girme işlemi yaparsanız bu değer preload register'a yazılır. Daha sonrasında TIM_CNT değerinin overflow olması ile birlikte timer update event meydana gelir ve preload register içeriği shadow register içeriğine aktarılır. Bu sayede pwm duty cycle değeriniz güncellenmiş olur.

Özetle pwm periyodunuzun tam 1 periyot bitirmeden içeriğini güncellemeye çalışırsanız bu değer bir sonraki periyot başına kadar güncellenmez.

1ms'lik bir delay koyduktan sonra olmasının sebebi ise pwm frekansınız >1kHz ise TIM gibi çevrebirimleri beklemelerden etkilenmediği için o aradaki 1mslik bekleme esnasında preload değerinin shadow register'a aktarılabilmesidir.

İyi çalışmalar.

z

Shadow register disable edin. Fakat bu durumda da flicker olusur.

En iyisi update int'i aktif edin ve pwm degerlerini int icinde yukleyin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com