zyh_126

stm32F103控制4路步进电机程序介绍

0
阅读(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为脉冲计数,通过调节下个脉冲的周期来实现加减速功能。如果脉冲数到则可停止脉冲的发送,这样来控制步长。加减速的机制自己可以设置。