搜索
bottom↓
回复: 2

m8控制XY轴电机画圆(运行路径不对)求助

[复制链接]

出0入0汤圆

发表于 2014-5-24 09:56:01 | 显示全部楼层 |阅读模式
本帖最后由 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)
{
int  x_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);
     }         

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-5-24 21:47:15 | 显示全部楼层
贴子沉到底了,自己顶一下

出0入0汤圆

发表于 2014-5-28 23:19:04 | 显示全部楼层
有偏差应该是正常的吧。加传感器获取轨迹位置然后校准呢?不知道可以不。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表