用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