PWM (Darbe Genişlik Modülasyonu) – ARM Programlama

  • PWM, bir kare dalga sinyalinin, yüksek seviyede kalma süresine müdahale edilerek, bu sinyal geriliminin ortalama değerinin değiştirilmesi olarak tanımlanabilir.
  • PWM endüstride iletişim, motor kontrol, ısıtma, aydınlatma gibi önemli birçok alanda kullanılmaktadır.

PWM Fonksiyonları

  • STM32F407 mikrodenetleyicisi, her biri 4 kanala kadar PWM sinyali üretebilen 14 adet timer birimine sahiptir.
  • Bu PWM birimlerinin her biri birbirlerinden bağımsız olarak kontrol edilebilmektedir

PWM_TIMn_Init

  • İlgili timer birimini PWM sinyali üretebilecek şekilde ayarlar. Bu fonksiyonu kullanabilmek için, ilgili timer biriminin PWM modunu desteklemesi gerekmektedir.
  • Ayrıca PWM_TIMn_Init fonksiyonundaki «n» harfi yerine mikrodenetleyicinin sahip olduğu timer birimlerinin numaraları gelmelidir.
  • int ratio;
  • ratio=PWM_TIM0_Init(25000); //Timer0 birimi 25 KHz frekansında PWM üretmek için ayarlandı.

PWM_TIMn_Set_Duty

  • PWM biriminin ürettiği sinyalin görev döngüsünü (cycle) değiştirmek için kullanılır.
  • Bu fonksiyon kullanılmadan önce PWM_TIMn_Init fonksiyonu işletilmiş olmalıdır.
  • unsigned int period;
  • period=PWM_TIM4_Init(50000); // Timer4, PWM moduna ayarlanıyor. Frekans 50 KHz
  • PWM_TIM4_Set_Duty((period/1000)*25, _PWM_NON_INVERTED, _PWM_CHANNEL2);
  • //Görev döngüsünün periyodun tamamına oranı 25/1000 olarak ayarlanıyor.

_PWM_NON_INVERTED

  • «_PWM_NON_INVERTED» ifadesinin anlamı, PWM sinyalinin terslenmeden çıkışa aktarılacağıdır.
AçıklamaÖn Tanımlı Kütüphane Sabiti
Terslenmiş PWM Sinyali_PWM_INVERTED
Terslenmemiş PWM Sinyali_PWM_NON_INVERTED

_PWM_CHANNEL2

  • «_PWM_CHANNEL2» ifadesi ise Timer4’ün hangi PWM kanalının kullanılacağını belirler.
AçıklamaÖn Tanımlı Kütüphane Sabiti
Kanal 1_PWM_CHANNEL1
Kanal 2_PWM_CHANNEL2
Kanal 3_PWM_CHANNEL3
Kanal 4_PWM_CHANNEL4

PWM_TIMn_Start

  • İlgili timer birimine ait istenilen kanalın, PWM sinyali üretmesini başlatmak amacıyla kullanılan bir fonksiyondur.
  • Bu fonksiyon kullanılmadan önce PWM_TIMn_Init fonksiyonu işletilmiş olmalıdır.
  • PWM_TIMn_Start(Kanal, PWM_Modülü);
  • PWM_TIM4_Start(_PWM_CHANNEL1, &GPIO_MODULE_TIM4_CH1_PA8);
  • Timer4 biriminin 1. PWM kanalı, PA8 pininden çıkış verecek şekilde başlatılıyor.

PWM_TIMn_Stop

  • İlgili timer birimine ait istenilen kanalın, PWM sinyali üretmesini durdurmak amacıyla kullanılan bir fonksiyondur.
  • Bu fonksiyon kullanılmadan önce PWM_TIMn_Init fonksiyonu işletilmiş olmalıdır.
  • PWM_TIMn_Stop(Kanal);
  • PWM_TIM4_Stop(_PWM_CHANNEL1);
unsigned int period;
void main(){
	period=PWM_TIM4_Init(50000);
	PWM_TIM4_Start(_PWM_CHANNEL2,
	&_GPIO_MODULE_TIM4_CH2_PD13);
	while(1){
		PWM_TIM4_Set_Duty((period/100)*0, _PWM_NON_INVERTED, _PWM_CHANNEL2);
		delay_ms(100);
	}
}
//PWM_INVERTED denenecek
//0 değeri değiştirilecek