//电机的驱动程序
#define MOTOR_PIN 7
#define DIR1_PIN 8
float i;
const double dl1 = 360.0/200.0/32.0/5.18;//每个脉冲转过的角度值,5.18为当前步进电机的减速比
void setup()
{
Serial.begin(9600);
pinMode(MOTOR_PIN, OUTPUT);
pinMode(DIR1_PIN, OUTPUT);
}
void loop()
{
if(Serial.available()>0){
i = Serial.parseFloat();//获取串口输入的值,通过串口获取步进电机的转动角度值
delay(2000);
// Motor #1
//参数根据自身情况调
digitalWrite(DIR1_PIN, LOW);//LOW时为步进电机的正方向
int delValue = 4000;
int incValue = 7;
int accRate = 530; //加速的值
int totSteps = i/0.01085907;//总步数,根据串口数据设定
//利用每个脉冲之间的间隔实现运动的快慢
for (int i=0; i < totSteps; i++)
{
if (totSteps > (2*accRate + 1))//#1
{
if (i < accRate)
{
//加速
delValue = delValue - incValue;//4000-7 = 3993
}
else if (i > (totSteps - accRate))
{
//减速
delValue = delValue + incValue;
}
}
else//#1
{
//无适当的加速度/减速空间
if (i < ((totSteps - (totSteps % 2))/2))
{
//加速
delValue = delValue - incValue;
}
else if (i > ((totSteps + (totSteps % 2))/2))
{
//减速
delValue = delValue + incValue;
}
}
digitalWrite(MOTOR_PIN, HIGH);
delayMicroseconds(delValue);//延迟delValue = 3997(单位:微秒)。一秒等于1000 000微秒。
digitalWrite(MOTOR_PIN, LOW);
delayMicroseconds(delValue);
}
}
}
今天的文章Arduino的控制(二):Arduino控制步进电机(梯形速度算法)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/32081.html