stm32F103控制4路步进电机程序介绍
0赞
发表于 4/28/2013 4:01:47 PM
阅读(12425)
上面已经介绍了stm32f103驱动步进电机的电路,这里我主要介绍驱动程序的编写,由于步进电机采用了专门的驱动芯片thb6064ah,所以现在主要控制thb6064ah的脉冲即可。主要通过四路定时器的配置,设置他们为PWM输出模式,具体的配置见下:
NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseStructure.TIM_Period = 20000; TIM_TimeBaseStructure.TIM_Prescaler = 17; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 10000; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC4Init(TIM4, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ITConfig(TIM4, TIM_IT_CC4 , ENABLE); TIM_ARRPreloadConfig(TIM4, ENABLE);
四路OCX分别分配到四路通用定时器1,2,3,4;设置四路定时器为PWM中断,主要是通过其控制PWM脉冲个数。定时器周期可以在中断中修改。下面是中断服务历程。主要是实现加减速和脉冲技术功能:
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_CC4) != RESET)
{
// TIM4_configure(PWM1_coff[mm++]);
TIM_ClearITPendingBit(TIM4, TIM_IT_CC4);
current_d_num++;
if(current_d_num<motor_d_num)
{
if(current_d_num>30)
motor_d_timer= motor_d_timer-motor_d_set_num;
else
motor_d_timer=motor_d_timer-600;
TIM4->ARR= motor_d_timer;
TIM4->CCR4 = (motor_d_timer)/2;
}
else if(current_d_num>(motor_d_step-motor_d_num))
{
motor_d_timer = motor_d_timer+500;
TIM4->ARR= motor_d_timer;
TIM4->CCR4 = (motor_d_timer)/2;
if(current_d_num==motor_d_step)
{ TIM_Cmd(TIM4, DISABLE);motor_d_step_end=1;}
}
}
}
变量current_d_num为脉冲计数,通过调节下个脉冲的周期来实现加减速功能。如果脉冲数到则可停止脉冲的发送,这样来控制步长。加减速的机制自己可以设置。
