[STM32F1] VSCODE STM32 裸机之步进电机控制(42BYGH32-401A)

[复制链接]
 楼主| zero949079783 发表于 2021-11-14 11:28 | 显示全部楼层 |阅读模式
本帖最后由 zero949079783 于 2021-11-14 11:32 编辑

开发环境:VSCODE(gcc编译链)+STM32CubeMX(也可以使用HUAWEI-LiteOS-Studio) 。
代码:链接:https://pan.baidu.com/s/1uXfIR0GFQOBZPl1NfQP08w  
提取码:6b0c



步进电机是一种将电
脉冲信号转换成相应角位移线位移的电动机。每输入一个脉冲信号转子就转动一个角度或前进一步,其输出的角位移线位移与输入的脉冲数成正比,转速脉冲频率成正比。因此,步进电动机又称脉冲电动机


步进电机细分:

1、步进电机的细分技术实质上是一种电子阻尼技术,其主要目的是减弱或消除步进电机的低频振动,提高电机的运转精度只是细分技术的一个附带功能。细分后电机运行时的实际步距角是基本步距角的几分之一。

2、两相步进电机的基本步距角是1.8°,即一个脉冲走1.8°,如果没有细分,则是200个脉冲走一圈360°,细分是通过驱动器靠精确控制电机的相电流所产生的,与电机无关。

3、如果是10细分,则发一个脉冲电机走0.18°,即2000个脉冲走一圈360°,电机的精度能否达到或接近0.18°,还取决于细分驱动器的细分电流控制精度等其它因素。

32细分为6400个脉冲  ,6400个脉冲为1圈 , 脉冲数 = 360/步进角(1.8)*细分数


A-1.jpg
A-4.jpg
A-3.png

A.jpg

A-2.jpg




  1. #include "Stepper_Motor.h"


  2. uint16_t pwm_val =0;
  3. float Mot_Angle=0;  //

  4. void TimCH_Config(void)
  5. {
  6.    // MOT_EN_ENABLE();
  7.     HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_2);
  8. }


  9. //PWM 中断回调函数
  10. void  HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  11. {
  12.     if(htim->Instance == TIM3)
  13.     {
  14.         pwm_val++;
  15.         Mot_Angle = pwm_val;
  16.         // if(pwm_val%800 == 0){ //每45度输出
  17.         //     Mot_Angle = pwm_val;
  18.         //     if(MOT_DIR_IN() == FWD){
  19.         //         printf ("\r\n步进的正转角度=%.3f\r\n", Mot_Angle*0.05625);
  20.         //     }
  21.         //     else{
  22.         //         printf ("\r\n步进的反转角度=%.3f\r\n", Mot_Angle*0.05625);
  23.         //     }
  24.             
  25.         // }
  26.         
  27.         if(pwm_val == MOT_PULSE){  //32细分为6400个脉冲  6400个脉冲为1圈  脉冲数 = 360/步进角(1.8)*细分数
  28.             pwm_val=0;
  29.             HAL_TIM_PWM_Stop_IT(&htim3,TIM_CHANNEL_2);
  30.         }
  31.     }
  32.    
  33. }
  1. while (1)
  2.   {
  3.     /* USER CODE END WHILE */

  4.     /* USER CODE BEGIN 3 */
  5.       MOT_DIR_FWD();
  6.       HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_2);
  7.       printf ("\r\n步进的正转角度=%.3f\r\n", Mot_Angle*0.05625);
  8.       HAL_Delay(1000);

  9.       MOT_DIR_REV();
  10.       HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_2);
  11.       printf ("\r\n步进的反转角度=%.3f\r\n", Mot_Angle*0.05625);
  12.       HAL_Delay(1000);

  13.   }
  14.   /* USER CODE END 3 */


您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

91

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部