您的位置首页生活快答

用arduino去控制两轴步进电机进行圆弧插补的程序。。

用arduino去控制两轴步进电机进行圆弧插补的程序。。

的有关信息介绍如下:

用arduino去控制两轴步进电机进行圆弧插补的程序。。

这个你要先学会G代码,这是原来写的激光雕刻里面的双轴怎么运动过程。

void yfor(uint i) //y轴前进函数

{

while(1)

{

switch(yfb)

{

case 4:{a=b=1; b_=a_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}

case 1:{b=a_=1; a=b_=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}

case 2:{a_=b_=1; b=a=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}

case 3:{b_=a=1; a_=b=0; yfb=4; i--; delayms(M); if(i==0){a=b_=0;break;}}

}

if(i==0) break;

}

}

void ybac(uint i) //yy后退函数

{

while(1)

{

switch(yfb)

{

case 1:{a=b_=1; b=a_=0; yfb=4; i--; delayms(M); if(i==0){a=b_=0;break;}}

case 4:{b_=a_=1; a=b=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}

case 3:{a_=b=1; b_=a=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}

case 2:{b=a=1; a_=b_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}

}

if(i==0) break;

}

}

void dazi(uint zik)//打印函数 ******打印函数已更改******

{

uint x;

jg=0;

for(x=0;x>8); //高电平重载值拆分为高低字节

HighRL = (unsigned char)high;

LowRH = (unsigned char)(low>>8); //低电平重载值拆分为高低字节

LowRL = (unsigned char)low;

TMOD &= 0xF0; //清零T0的控制位

TMOD |= 0x01; //配置T0为模式1

TH0 = HighRH; //加载T0重载值

TL0 = HighRL;

ET0 = 1; //使能T0中断

TR0 = 1; //启动T0

jg = 0; //输出低电平,关闭激光

}

/* 关闭PWM */

void ClosePWM()

{

TR0 = 0; //停止定时器0

ET0 = 0; //禁止定时器0中断

jg = 0; //输出低电平,关闭激光

}

/* T0中断服务函数,产生PWM输出 */

void InterruptTimer0() interrupt 1

{

if (jg == 0) //当前输出为低电平时,装载高电平值并输出高电平

{

TH0 = LowRH;

TL0 = LowRL;

jg = 1;

}

else //当前输出为高电平时,装载低电平值并输出低电平

{

TH0 = HighRH;

TL0 = HighRL;

jg = 0;

}

}

void xfor(uint i) //x轴前进函数,前进多少步

{

while(1)

{

if(xfb==4)

{

xa=xb=1;

xb_=xa_=0;

xfb=1;

i--;

delayms(N);

if(i==0){xa=xb=0; break;}

}

if(xfb==1)

{

xb=xa_=1;

xa=xb_=0;

xfb=2;

i--;

delayms(N);

if(i==0){xa_=xb=0; break;}

}

if(xfb==2)

{

xa_=xb_=1;

xb=xa=0;

xfb=3; //走步标志位

i--;

delayms(N);

if(i==0){xa_=xb_=0; break;}

}

if(xfb==3)

{

xa_=xb=0;

xb_=xa=1;

xfb=4;

i--;

delayms(N);

if(i==0){xa=xb_=0; break;}

}

}

}

void xbac(uint i) //xxx后退函数

{

while(1)

{

if(xfb==1)

{

xa_=xb=0;

xb_=xa=1;

xfb=4;

i--; //走步标志位

delayms(N);

if(i==0){xa=xb_=0; break;}

}

if(xfb==4)

{

xa_=xb_=1;

xb=xa=0;

xfb=3;

i--;

delayms(N);

if(i==0){xa_=xb_=0; break;}

}

if(xfb==3)

{

xb=xa_=1;

xa=xb_=0;

xfb=2; //走步标志位

i--;

delayms(N);

if(i==0){xa_=xb=0; break;}

}

if(xfb==2)

{

xa=xb=1;

xb_=xa_=0;

xfb=1;

i--;

delayms(N);

if(i==0){xa=xb=0; break;}

}

}

}

void yfor(uint i) //y轴前进函数

{

while(1)

{

switch(yfb)

{

case 4:{a=b=1; b_=a_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}

case 1:{b=a_=1; a=b_=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}

case 2:{a_=b_=1; b=a=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}

case 3:{b_=a=1; a_=b=0; yfb=4; i--; delayms(M); if(i==0){a=b_=0;break;}}

}

if(i==0) break;

}

}

void ybac(uint i) //yy后退函数

{

while(1)

{

switch(yfb)

{

case 1:{a=b_=1; b=a_=0; yfb=4; i--; delayms(M); if(i==0){a=b_=0;break;}}

case 4:{b_=a_=1; a=b=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}

case 3:{a_=b=1; b_=a=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}

case 2:{b=a=1; a_=b_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}

}

if(i==0) break;

}

}

void dazi(uint zik)//打印函数 ******打印函数已更改******

{

uint x;

jg=0;

for(x=0;x