一、应用场景
步进电机带动齿轮旋转,齿轮过孔和托盘孔重合之后,停止旋转,保证每次齿轮和托盘的过孔重合之后再停止工作。适用于齿轮下药装置。
二、分析
1.步进电机有3个控制脚:PUL脉冲、电机正反转、电源开关
2.电机旋转起始和停止位置,考虑失步情况
3.加一个霍尔开关传感器(DH627)用于校准起始位置和控制停止位置,解决失步问题
三、实现思路
齿轮上盖加开槽一个霍尔开关,齿轮开孔加一个磁铁,当霍尔开关和磁铁距离1cm以内时,输入脚(DH627_OnOff)为高电平,反之,则低电平。
1.上电校准
每次上电检测霍尔开关输入脚是否为高电平,如果为低电平则开启电机旋转(正转、反转根据需求),直到检测到DH627_OnOff为高电平,则校准完成,即为起始位置。
2.开始工作
启动电机:开启电源(高电平)--输入方向(0或1)--PUL脉冲(低电平),开启定时器,加一个电机开始标志位(MONTOR_START_FLAG),这时候先让电机脱离霍尔感应区域再判断DH627_OnOff是否为高电平,高则停止旋转,这里是一个小逻辑,用来解决电机工作之后判断停止位置。代码如下:(这一段代码放在定时器中)
if(Start_Motor_Calibration) //开机回归原点检测
{
if(DH627_OnOff)
{
GPIO_ResetBits(GPIO_MOTOR_PUL,GPIO_Pin_MOTOR_PUL);//PUL脉冲
GPIO_ResetBits(GPIO_MOTOR_DIR,GPIO_Pin_MOTOR_DIR);//方向
MOTOR_POWER_OFF; //关闭步进电机电源
TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE); //关闭定时器3中断
Start_Motor_Calibration=0;
}
}
if(MONTOR_START_FLAG) //电机开启
{
if(!DH627_OnOff)
{
MONTOR_START_FLAG=0;
MONTOR_LEAVE_FLAG=1;
}
}
if(MONTOR_LEAVE_FLAG)
{
if(DH627_OnOff)
{
MONTOR_LEAVE_FLAG=0;
GPIO_ResetBits(GPIO_MOTOR_PUL,GPIO_Pin_MOTOR_PUL);
GPIO_ResetBits(GPIO_MOTOR_DIR,GPIO_Pin_MOTOR_DIR);
MOTOR_POWER_OFF; //关闭步进电机电源
}
}