m8控制XY轴电机画圆(运行路径不对)求助
本帖最后由 f117_2r 于 2014-5-24 09:57 编辑下面是代码虽画出了圆但运行的轨迹多了,不知道问题出在那儿,找了三天了。求助
//===================================================
//define
//===================================================
int _x,_y;
//===================================================
//define io
//===================================================
#define kx1 PINC.1
#define kx2 PINC.2
#define ky1 PINC.3
#define ky2 PINC.4
#define are PINC.5
#define key PINC.0
#define x_plus PORTD.0//x plus
#define x_dir1 PORTD.1//x dir1
#define x_dir2 PORTD.2//x dir2
#define y_plus PORTD.3//y plus
#define y_dir1 PORTD.4//y dir1
#define y_dir2 PORTD.5//y dir2
#define z_pree PORTD.6//z_pree
//===================================================
//ioint
//===================================================
void ioint(void)
{
PORTB=0x00; DDRB=0x00;
PORTC=0x3F; DDRC=0x00;
PORTD=0x00; DDRD=0x7F;
}
//===================================================
//send x_plus
//===================================================
void x_send(int x)
{
if(x>0)
{
x_dir1=0; x_dir2=1;
while(x)
{
x--;
x_plus=1; delay_us(100); x_plus=0; delay_us(100);
}
}
else
{
x_dir1=1; x_dir2=0;
while(x)
{
x++;
x_plus=1; delay_us(100); x_plus=0; delay_us(100);
}
}
}
//===================================================
//send y_plus
//===================================================
void y_send(int y)
{
if(y>0)
{
y_dir1=0; y_dir2=1;
while(y)
{
y--;
y_plus=1; delay_us(100); y_plus=0; delay_us(100);
}
}
else
{
y_dir1=1; y_dir2=0;
while(y)
{
y++;
y_plus=1; delay_us(100); y_plus=0; delay_us(100);
}
}
}
//===================================================
void CirclePlot (int x, int y)
{
intx_1, y_1;
if(x!=_x) {x_1=_x-x;_x=x;x_send(x_1); }
if(y!=_y) {y_1=_y-y;_y=y;y_send(y_1); }
}
//===================================================
//CirclePlot
//===================================================
// 画圆数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
void Circle(int r)
{
int x, y , d;
//------------------------------1
x=0;
y=r;
d =3-2*r;
CirclePlot(x,y);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(x,y);
}
//------------------------------2
x=0;
y=r;
d =3-2*r;
CirclePlot(y,x);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(y,x);
}
//------------------------------3
x=0;
y=r;
d =3-2*r;
CirclePlot(y,-x);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(y,-x);
}
//------------------------------4
x=0;
y=r;
d =3-2*r;
CirclePlot(x,-y);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(x,-y);
}
//------------------------------5
x=0;
y=r;
d =3-2*r;
CirclePlot(-x,-y);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(-x,-y);
}
//------------------------------6
x=0;
y=r;
d =3-2*r;
CirclePlot(-y,-x);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(-y,-x);
}
//------------------------------7
x=0;
y=r;
d =3-2*r;
CirclePlot(-y,x);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(-y,x);
}
//------------------------------
x=0;
y=r;
d =3-2*r;
CirclePlot(-x,y);
while(x<y)
{
if(d<0)
{
d =d+4*x+6;
}
else
{
d =d+4*(x-y)+10;
y--;
}
x++;
CirclePlot(-x,y);
} 贴子沉到底了,自己顶一下 有偏差应该是正常的吧。加传感器获取轨迹位置然后校准呢?不知道可以不。
页:
[1]