Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: hakan6nay - 30 Haziran 2021, 09:28:25

Başlık: Delay yazmadan SET_COMPARE fonksiyonu çalışmıyor
Gönderen: hakan6nay - 30 Haziran 2021, 09:28:25
__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.
Başlık: Ynt: Delay yazmadan SET_COMPARE fonksiyonu çalışmıyor
Gönderen: esdevhk - 30 Haziran 2021, 09:47:34
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.
Başlık: Ynt: Delay yazmadan SET_COMPARE fonksiyonu çalışmıyor
Gönderen: z - 30 Haziran 2021, 15:27:48
Shadow register disable edin. Fakat bu durumda da flicker olusur.

En iyisi update int'i aktif edin ve pwm degerlerini int icinde yukleyin.