#include
#include "math.h"
unsigned char z,z1;//取步序
unsigned int lj1=0;//a电机累加次数
unsigned int lj2=0; //b电机累加次数
unsigned char pda,pdb;//判断正反转
unsigned char x1=0,x2=0; //x坐标
unsigned char y1=0,y2=0; //y坐标
unsigned char a=0; //计算得到的A电机步数
unsigned char b=0; //计算得到的B步进电机的步数
unsigned char na,nb,n2;
unsigned char L1,L2,L3,L4; //定义线的长度
unsigned char code arunza[4]={0xef,0xdf,0xbf,0x7f}; //A电机正转
unsigned char code arunzb[4]={0xfe,0xfd,0xfb,0xf7}; //A电机正转
void fuzhizouxian() //**********赋值走线**********//
{ //x1,x2,y1,y2自己赋值//
x1=1;x2=2;y1=10;y2=10;
L1=sqrt((x1+3)*(x1+3)+(43-y1)*(43-y1)); //求L1长度
L2=sqrt((43-x1)*(43-x1)+(43-y1)*(43-y1)); //求L2长度
L3=sqrt((x2+3)*(x2+3)+(43-y2)*(43-y2)); //求L3长度
L4=sqrt((43-x2)*(43-x2)+(43-y2)*(43-y2)); //求L4长度
if(L3>L1) {pda=1;a=48*(L3-L1);} //
if(L3
if(L4>L2) {pdb=1;b=48*(L4-L2);} //
if(L4
n2=25你;//事先设定的定时累加次数,一般可以根据情况设定为最佳值
if(a>b){na=n2;nb=a*n2/b;} //对a,b进行比较大小,步数多的走的快,步数少的走的慢
else if(a
}
void zruna()// 正转运行
{
P1=arunza[z];
}
void zrunb()// 正转运行
{
P1=P1&arunzb[z1];
}
void dingshi() interrupt 1
{ //pda=2;pdb=1;//供试验方便
P1=0xff;//停止两个电机转动
lj1++; //a电机定时次数加1
lj2++; //b电机定时次数加1
if(lj1==na) //到累加定时时间
{ lj1=0; //累加次数到,累加次数清零
zruna();
if(pda==1) //a电机正转
{ z++; //步序加1
if(z==4)z=0;
}
if(pda==2) //a电机反转
{ z--; //步序减1
if(z==-1)z=3;
}
}
if(lj2==nb)//到累加定时时间
{ lj2=0; //累加次数到,累加次数清零
zrunb();
if(pdb==1) //b电机正转
{ z1++; //步序加1
if(z1==4)z1=0;
}
if(pdb==2) //b电机反转
{ z1--; //步序减1
if(z1==-1)z1=3;
}
}
}
void main()
{ TMOD=0X02;//方式2定时
TH0=156;
TL0=156; //12MHz晶振,定时0.1ms
TR0=1;
ET0=1;
EA=1;
z=0;z1=0; //数步序的变量进行初始化
while(1)
{
fuzhizouxian(); //**********赋值走线**********//
}
}
老师以上是我们这一组编写的与步进有关的程序,其中让两个步进电机同步的程序有问题。问题是:b电机正常转动,a电机只发出声音,但不转动。
老师,我是按你的方法写的,你帮我分析一下问题的所在。