【STM32步进电机】PWM调节脉冲输出个数,从而精准控制角度,完成伺服控制。

本功能是基于STM32F4库函数版本开发的,是工作时要求使用步进电机伺服控制,功能已经确保实现,希望可以帮助到大家。

  • 首先要用触发PWM的定时器进行跟随计数,这样就能同频率去计数,从而控制脉冲个数。
HAL_NVIC_SetPriority(GENERAL_TIM2_IRQ, 0, 0);
HAL_NVIC_EnableIRQ(GENERAL_TIM2_IRQ);
//开启相应的定时器中断
  • 在STM32F4xx_it.c即中断函数库中添加下面函数
void GENERAL_TIM2_INT_FUN(void)
{
  /* USER CODE BEGIN TIM6_IRQn 0 */

  /* USER CODE END TIM6_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM6_IRQn 1 */

  /* USER CODE END TIM6_IRQn 1 */
}
//在中断的调用函数中利用
  • 中断回调函数中输入我们想要发送的脉冲个数,当发送3个脉冲后,步进电机占空比为0,等待下一次中断。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)
{
	  if(test5<=3)
		{
			  test5++;
			  motor_flag=0;
		}
		else
		{	if(motor_flag==0)  
			{
				Step_Mot_Ctrl(0,1,0);
			}		
			if(motor_flag==1)
		   {
				test5=0;
			  Step_Mot_Ctrl(1,1,0);
		   }
		}
}

	if(htim->Instance == TIM5)
	{
		Sw_Timer();
		Sys_Clock();
		Do_500us_Hook();
	}
}	
//在中断回调函数中修改我们需要的功能
  • 最后不要忘记主函数中断函数的启动
HAL_TIM_Base_Start_IT(&htim2); 

这样就完成了我们相应的步进电机伺服控制,有不懂的可以在评论区留言。

你可能感兴趣的:(stm32,mcu,嵌入式硬件)