|
本帖最后由 マイナス37度 于 2016-10-9 18:03 编辑
自己找了好久,还是没找到问题
这是段步进电机加减速代码,目前加速不均匀。。。
串口打印也有点奇怪,为什么是1111。。。2222。。。1111。。。1
正确的是1111。。。2222。。。2
总算搞定了,明天加上x轴
int a=0;
int zf=1;//控制正反转方向,1- 2+
int kg=1;//控制电机转停,1转
int xc1=1;//丝杆行程1,单位=400一圈
int xcq=8;//丝杆行程圈,1=一圈
int jsdp=15;//电机加速度频率
int jsd=0;//电机加速度
int jsq=1;//电机加速
int zd=5000;//电机最低转速
int zg=500;//电机最高转速
int jsdd;//电机加速度度
int zpul=12;//z轴电机速度引脚,
int zdir=13;//z轴电机方向引脚,高电平-,低电平+
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(13, HIGH);
Serial.begin(9600);
}
void loop() {
jsdd=zd-zg;//最低速-最高速=
xcq=3;//行程8圈
if(xc1<jsdd/jsdp && jsd>=jsdp)//加速行程>时时行程时启动加速
{
jsq=1;//(js+)=1加速
}
if(xc1<xcq*400 && xc1>xcq*400-jsdd/jsdp && jsd>=jsdp)
{
jsq=2;//(js+)=2减速
}
if(jsq==1 && jsd>=jsdp && zg<zd-jsd)//(js+)=1时加速且
{
//Serial.println(jsd);
jsd=jsd+jsdp;//加速度=加速度+频率
}
if(jsq==2 && jsd>=jsdp)//加速度>=频率时减速且
{
jsd=jsd-jsdp;//加速度=加速度-频率
//Serial.println(jsd);
}
if(zf==2)//+正转
{
digitalWrite(zdir, LOW);
}
if(zf==1)//-反转
{
digitalWrite(zdir, HIGH);
}
if(xc1>=xcq*400+1)
{
zf=zf+1;
xc1=1;
jsd=jsdp;
}
if(zf>=3)
{
kg=2;
zf=1;
jsd=0;
}
if(kg==1)//kg=1转
{
digitalWrite(zpul, HIGH);
delayMicroseconds(zd-jsd);
digitalWrite(zpul, LOW);
delayMicroseconds(zd-jsd);
xc1=xc1+1;
//a=a+1;
//Serial.println(jsd);
}
} |
|