当前位置:文档之家› 数控原理课程设计任务书

数控原理课程设计任务书

1 设计方案
在本学期的《数控原理与系统》学习中,我们学到了数控系统直线(或圆弧)插补的三种较常用的方法,即逐点比较法、数字积分法和数据采样法插补。

现对以上三种插补方法作如下对比,并选择最佳方案。

1.1 逐点比较法插补
逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。

逐点比较法既可以作圆弧插补又可以作直线插补。

这种算法的特点是,运算直观,插补误差小于一个脉冲当量,输出脉冲均匀,而且输出脉冲速度变化小,调节方便,因此在两坐标数控机床中应用较为普遍。

1.2 数字积分法插补
数字积分法插补又称为微分分析法。

这种方法可实现一次、二次、甚至高次曲线的插补,也可以实现多坐标联动控制。

只要输入不多的几个数据,就能加工出圆弧等形状较为复杂的轮廓曲线。

作直线插补时,脉冲分配也较均匀。

1.3 数据采样插补
数据采样插补实际上是一种粗插补过程,它所产生的微小线段仍然比较大,必须进一步对其密化(即精插补)。

粗插补算法比较复杂,大多用高级语言编制;精插补算法比较简单,多用汇编语言或硬件插补器实现。

1.4 综述
根据课程设计要求,结合自身学习情况,我选择数字积分法来实现第二象限的逆圆弧插补,并采用C语言进行程序设计。

数字积分法又称数字微分分析法DDA(Digital Differential Analyzer)。

数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。

其缺点是速度调节不便,插补精度需要采
取一定措施才能满足要求。

由于计算机有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。

2 分析第二象项圆弧插补算法
数字积分法是建立在数字积分器基础上的一种插补算法,在介绍数字积分法的第二象限圆弧插补算法之前,先介绍数字积分器的工作原理。

2.1 数字积分器的工作原理
从几何角度来看,积分运算就是求出函数Y f t =曲线与横轴所围成的面
积,如图课设图1-1所示,从0t t =到n t 时刻,
函数()Y f
t =的积分值可表述为
()0
n
n t t t t S Ydt f t dt ==⎰⎰ (式1-1)
如果进一步将0[]n t t t ∈,的时间区划分为若干个等间隔t ∆的小区间,则当t ∆足够小时,函数Y 的积分可用以下近似市式表示
01
n
n t i t i S
Ydt Y t -==≈∆∑⎰ (式1-2)
在几何上就是用一系列小矩形面积之和近似表示函数
()f t 以下的积分面
积。

进一步如果在(式1-2)中,取t ∆为基本单位“1”,则上式可演化成数字积分器算式
1
n i i S Y -==∑ ( 式
1-3)
可见,通过假设t=∆“1”,就可将积分运算转化为( 式1-3)所示的求纵坐标值的累加运算。

若再假设累加器容量为一个单位面积值,则在累加过程中超过一个单位面积时立即产生一个溢出脉冲。

这样,累加过程所产生的溢出脉冲总
课设图1-1
数就等于所求的总面积,即所求的积分值。

2.2 数字积分法的第二象限圆弧插补算法
如图课设图1-2所示,设刀具沿圆弧SE 进行切削,圆弧半径为R ,刀具切削速度为v ,在两坐标轴上的速度分量为X v
则根据图中的相似三角形关系,可得
X
Y
i i
v v v
K R Y X ===(常数) (式1-4) 则有,,X Y i i v KR v KY v KX === (式1-5)
由于半径R 为常数,若切向速度v 为匀速,则K 为常数,那么,动点在两坐标轴上的速度分量将随其坐标值的变化而变化。

当给定一个时间增量t ∆,动点在,X Y 坐标轴上位移增量分别为
t=t X
i i X v KY ∆=-∆-∆ (式1-6a )
t=-t Y
i i Y v KX ∆=-∆∆ (式1-6b )
由于第二象限逆圆对应X 轴坐标值逐渐增大,所以(式1-6a )中X ∆表达式取正值,也就是说X v 、Y v 均带绝对值,不带符号运算。

从而获得第二象限逆圆DDA 法插补公式如下:
00X=t n n
i i i i X KY ==∆=-∆∑∑ (式1-7a )
Y=t n
n
i i i i Y KX ==∆=-∆∑∑ (式1-7b )
3 编制流程图
课设图1-2
4 编写代码
该流程图的C语言程序源代码如下:
#include <stdio.h>
#include <math.h>
void main()
{
int Xs,Ys,Xe,Ye,Jrx,Jvx,Jry,Jvy,nx,ny,DX,DY; AGAIN:
printf("请输入圆弧的起点:");
scanf("%d %d",&Xs,&Ys);
printf("请输入圆弧的终点:");
scanf("%d %d",&Xe,&Ye);
if(Xe-Xs<0&&Ye-Ys<0&&Xe<0&&Ys>0)
{
Jrx=0,Jry=0,nx=0,ny=0,Jvx=abs(Ye),Jvy=abs(Xe);
for(;nx!=abs(Xe-Xs)||ny!=abs(Ye-Ys);)
{
Jrx=Jrx+Jvx,Jry=Jry+Jvy;
}
if((Jrx>=8)&(Xs!=Xe))
{
Jrx=Jrx-8,Xs=Xs-1;
DX=1,Jvy+=1,nx+=1;
}
if((Jry>=8)&(Ys!=Ye))
{
Jry=Jry-8,Ys=Ys-1;
DY=1,Jvx+=1, ny+=1;
}
if(DX==1 || DY==1)
{ printf("(%d,%d)\n",Xs,Ys); DX=0,DY=0; }
}
else
printf("此圆弧不是第二象限逆圆,请输入符合第二象限逆圆的点\n"); goto AGAIN;
}
5 调试
利用VC++6.0软件对以上C程序进行调试,调试结果如下:。

相关主题