f117_2r 发表于 2014-5-24 09:56:01

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);
   }         

f117_2r 发表于 2014-5-24 21:47:15

贴子沉到底了,自己顶一下

光蛋骑士 发表于 2014-5-28 23:19:04

有偏差应该是正常的吧。加传感器获取轨迹位置然后校准呢?不知道可以不。
页: [1]
查看完整版本: m8控制XY轴电机画圆(运行路径不对)求助