STM32F103 TIM2 PWM

Başlatan cerdemir, 10 Temmuz 2015, 13:16:38

cerdemir

Merhabalar,

STM32F103 kartımda timer2 ile motor sürmek için pwm yapmaya çalışıyorum fakat başaramadım. Örnekleri inceledim, okudum ama olduramadım. Beceremediğimi ise PA0 portuna bağladığım ledden anlıyorum. Ayrıca sorunun portlardan mı, timerdan mı yoksa pwm ayarlarından birinden mi yoksa birkaçından mı kaynaklandığı konusunda hiçbir fikrim yok. Nerede hata yaptığımı ve çözüm önerilerinizi bekliyorum.

Ortam bilgileri en altta.

Portu(PA0) output olarak ayarladığımda dijital olarak çalışıyor(on/off). Ledimi de test ettim çalışıyor :)

GPIO Tanımlamaları:
void InitGPIO(){
//.......
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;

//.......
//.......

//MOTOR PWM 1 SOL
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

//MOTOR PWM 2 Sag
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);
}


Timer Tanımlamaları:
void InitTimer(){
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

TIM_TimeBaseInitTypeDef timerInitStructure;
timerInitStructure.TIM_Prescaler =0;
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
timerInitStructure.TIM_Period = 3599;
timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
timerInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &timerInitStructure);
}

PWM Tanımlamaları:
void InitPWM(int duty){

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_Pulse = duty;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

TIM_OCInitStructure.TIM_Pulse = duty;
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}


Ortam:
IDE: Em:blocks
Derleyici: bare-metal denen kurulumla gelen derleyici
Programın tamamı: http://pastebin.com/a3Q9xmB9
Kullandığım mikrokontrolcü: STM32F103C8T6
Kullandığım kart:
-- cemal

justice_for_all

remap yapmanıza gerek yok default AF sizin pinlerinizde.Remap yaparsanız PA15 ve PB3 ten alırsınız pwmi
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

cerdemir

Başka bir problem gözüküyor mu?
Çok teşekkür ederim deneyeceğim.

Alıntı yapılan: justice_for_all - 10 Temmuz 2015, 14:31:01
remap yapmanıza gerek yok default AF sizin pinlerinizde.Remap yaparsanız PA15 ve PB3 ten alırsınız pwmi
-- cemal

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

cerdemir

Denedim aynen beklediğim gibi çalıştı.
-- cemal