STM32 PWM üretimi ve Duty Cycle Hesabı

Merhaba, bugün STM32CubeMX ile oluşturduğum PWM üretme kodundaki PWM ayarlarının ne anlama geldiğini anlamak için teker teker PWM'in Prescaler ve Period değerlerini değiştirerek çıkışı osiloskopta gözlemledim ve Prescaler azaldıkça ve Period'u arttırdıkça da PWM sinyalinin frekansının azaldığını farkettim. Benim amacım bu PWM çıkışı ile ESC'ye 50 Hz Frekansında ve 1 ila 2 ms arasında bir PWM üretmek. Ama bu aralık sizin de farkettiğiniz gibi çok küçük. SMT32CubeMX kullandığımdan da anlaşılabileceği için HAL Kütüphanelerini kullanıyorum. STM32CubeMX ile oluşturduğumuz kod ile üreteceğimiz duty cycle aşağıdaki kodun içindeki "pwm" değişkeni ile belirlenir.

__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1, pwm);

Ama bu pwm değişkeninden duty cycle değeri sonradan farkettiğim ve aşağıda belirttiğim şekilde bulunur;

% duty cycle = (pwm*100) / Period 

Ayrıca 1ms %5 duty cycle ve 2ms de %10 duty cycle ifade ettiği için de PWM değerimizi bu aralıkta sınırlayarak ESC(Electronic Speed Controller) ile Motor Kontrolü yapabilirsiniz.

Mesela, Period'u 1000 gibi büyük bir değer seçersek koddaki pwm değişkenini 1000 yaptığımız zaman duty cycle %100 olacaktır. Ve bu PWM ile bir ESC'yi kontrol etmek istersek pwm değişkenini 50-100 aralığında değişrebilirsiniz.

Örneğin ben, Period'u 9500 ve Prescaler'ı 16 yaptığım zaman osiloskopta 50Hz'lik bir PWM üretebildiğimi gördüm ve ESC'ye PWM üretirken pwm değişkenini 475-950 aralığında değiştirerek motorumu kontrol edeceğim.
Yani sonuç olarak Period'u ne kadar büyük seçerseniz, %5 ile %10 aralığını o kadar genişletmiş olursunuz.

Yanlışlarım varsa yorum yaparsanız sevinirim.


Comments