专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

用STM32定时器控制步进电机实现频率任意调节

作者:尧   来源:尧的随笔博客   点击数:  更新时间:2014年05月18日   【字体:

 ///////////////////////////////////////////

//定时器1初始化 可调节频率/////////
//输入参数PWM1_Val掌控频率参数//
//////////////////////////////////////////
void TIM1_PWM(unsigned int PWM1_Val)
{
vu16 tim1_Val = PWM1_Val;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_TIM1 , ENABLE); //RCC_APB2Periph_AFIO
 
TIM_TimeBaseStructure.TIM_Period = tim1_Val;//TIM_Period=65535,计数器向上计数到65535后产生更新事件,计数值归零
TIM_TimeBaseStructure.TIM_Prescaler = 2; //设置预分频器分频系数0
TIM_TimeBaseStructure.TIM_ClockDivision = 0;//设置了时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//选择向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
 
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx
 
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2 ;//定时模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
//TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//TIM输出比较极性
//TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;//TIM输出比较极性
//TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
//TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 
TIM_OCInitStructure.TIM_Pulse = tim1_Val*0.5;//比较数
TIM_OC1Init(TIM1, &TIM_OCInitStructure);//初始化定时1
//TIM_OC1PreloadConfig(TIM1, ENABLE);//使能或者失能TIMx在ARR上的自动装载寄存器
 
TIM_OCInitStructure.TIM_Pulse = tim1_Val*0.5;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);//初始化定时1
//TIM_OC2PreloadConfig(TIM1, ENABLE);//使能或者失能TIMx在ARR上的自动装载寄存器
 
TIM_OCInitStructure.TIM_Pulse = tim1_Val*0.5;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);//初始化定时1
//TIM_OC3PreloadConfig(TIM1, ENABLE);//使能或者失能TIMx在ARR上的自动装载寄存器
 
TIM_OCInitStructure.TIM_Pulse = tim1_Val*0.5;
TIM_OC4Init(TIM1, &TIM_OCInitStructure);//初始化定时1
//TIM_OC4PreloadConfig(TIM1, ENABLE);//使能或者失能TIMx在ARR上的自动装载寄存器
 
 
TIM_Cmd(TIM1, ENABLE);//使能定时器
 
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
 
这个已经在项目中使用而且效果很好,虽然比较简单但是很实用,对于做一般项目基本上都能达到控制的要求。
 
控制的实质是用高级定时器TIM1输出50%的可调PWM,实现通断电的转换实现步进电机的控制,最近时间好紧,没有时间去把这个好好的整理,等这段时间过去了 ,一定要好好的把这里整理下。
关闭窗口

相关文章