一种利用限位开关实现步进电机的转动和停转的方法
这种方法还是存在一些误差,只是将程序中的循环的步进数目修改成0,即可实现步进电机的上电停转。
//本次实验电机驱动采用共阴极接线方式
//将步进电机的参数写到一个子函数中,并加入限位开关,触动限位开关可实现步进电机停转
//20180519 by xcx
const int ENAPin = 5; //define Enable Pin
const int DIRPin = 6; //define Direction pin
const int PULPin = 7; //define Pulse pin
const int BUTTON = 8; //define Button pin
void setup()
{
pinMode (ENAPin, OUTPUT);
pinMode (PULPin, OUTPUT);
pinMode (DIRPin, OUTPUT);
pinMode (BUTTON, INPUT);
}
void loop()
{
if (digitalRead(BUTTON))//如果检测按钮为高电平,步进电机则转,否则不转
{
StepperMotor(false, true, 3200);//此时3200由于在这个循环中,只要不修改成0,则修改他的值没什么影响,转速不会改变
}
else
StepperMotor(false, true, 0);//电机停转
}
//步进电机子函数
//函数:StepperMotor 功能:控制步进电机是否脱机、方向、步数
//参数:ENA---脱机状态,true为脱机
// DIR---方向控制
// steps---步进的步数,若steps为0,则电机上电电磁锁死,不转
//无返回值
void StepperMotor(boolean ENA, boolean DIR, int steps)
{
digitalWrite(ENAPin, ENA);
digitalWrite(DIRPin, DIR);
for (int i = 0; i < steps; i++) //Forward XXXX steps
{
digitalWrite(PULPin, HIGH);
delayMicroseconds(50);
digitalWrite(PULPin, LOW);
delayMicroseconds(50);
}
}
程序还是没能做到,一触动限位开关电机就停转,而是要把转动循环里面的步数跑完才停转,可以把循环中的步进数目调小一点,也能实现大概的功能。各位大神若有更好更精准的方式,请不吝赐教!