本帖最后由 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)*细分数
#include "Stepper_Motor.h"
uint16_t pwm_val =0;
float Mot_Angle=0; //
void TimCH_Config(void)
{
// MOT_EN_ENABLE();
HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_2);
}
//PWM 中断回调函数
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
pwm_val++;
Mot_Angle = pwm_val;
// if(pwm_val%800 == 0){ //每45度输出
// Mot_Angle = pwm_val;
// if(MOT_DIR_IN() == FWD){
// printf ("\r\n步进的正转角度=%.3f\r\n", Mot_Angle*0.05625);
// }
// else{
// printf ("\r\n步进的反转角度=%.3f\r\n", Mot_Angle*0.05625);
// }
// }
if(pwm_val == MOT_PULSE){ //32细分为6400个脉冲 6400个脉冲为1圈 脉冲数 = 360/步进角(1.8)*细分数
pwm_val=0;
HAL_TIM_PWM_Stop_IT(&htim3,TIM_CHANNEL_2);
}
}
}
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
MOT_DIR_FWD();
HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_2);
printf ("\r\n步进的正转角度=%.3f\r\n", Mot_Angle*0.05625);
HAL_Delay(1000);
MOT_DIR_REV();
HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_2);
printf ("\r\n步进的反转角度=%.3f\r\n", Mot_Angle*0.05625);
HAL_Delay(1000);
}
/* USER CODE END 3 */
|