1、目 录摘 要4第一章 概 述51插补的基本概念52对插补器的基本要求53. 插补器的的分类54. 基准脉冲插补5第二章 逐点比较法71逐点比较法直线插补72逐点比较法圆弧插补83象限处理10第三章 数字积分分析法(DDA)111DDA直线插补112DDA圆弧插补12第四章 Visual C+插补仿真141. MFC应用软件的建立142. 设置工具栏153. 利用GDI绘图仿真插补16第5章 利用Vision单片机编程23参考文献25附 件25 摘 要 本书是对“基于单片机数控系统插补控制设计”的课程设计进行说明,基准脉冲插补方法有:逐点比较法;最小偏差法;数字积分法;目标点跟踪法;单步追综法等
2、。本次设计主要设计逐点比较和DDA法的直线和圆弧编程。在设计的过程中首先要对数控机床的插补有所了解,然后写出流程图,接着在VC的MFC工程中,进行仿真插补运动,最后完成单片机编程。 本书深入浅出的介绍了设计的过程,简单的讲解了逐点比较和DDA法的直线和圆弧算法。还介绍了VC+软件的MFC工程的新建方法,和一些简单的使用方法。最后还介绍了Vision软件进行单片机编程。关键词:插补,逐点比较法,DDA,VC+,应用程序,Vision软件,单片机第一章 概 述 1插补的基本概念 “插补”(Interpolation):根据给定进给速度和给定轮廓线形的要求,在运动轨迹的起始点坐标和轮廓轨迹之间,由数
3、控系统计算出各个中间点的坐标,“插入”、“补上”运动轨迹中间点的坐标值。 无论是普通数控(NC)系统,还是计算机数控(CNC)系统,都必须有完成“插补”功能的部分,它是轮廓控制系统的本质特征。能完成插补工作的装置叫插补器。NC系统中插补器由数字电路组成,称为硬件插补,而在CNC系统中,插补器功能由软件来实现,称为软件插补。2对插补器的基本要求 插补是数控系统的主要功能,它直接影响数控机床加工的质量和效率。对插补器的基本要求是:插补所需的原始数据较少;有较高的插补精度,插补结果没有累计误差,局部偏差不能超过允许的误差(一般应保证小于规定的分辨率);沿进给路线的进给速度恒定且符合加工要求;硬件线路
4、简单可靠,软件插补算法简洁,计算速度快。3. 插补器的的分类l 插补工作可以由硬件电路或软件程序完成,从而分为硬件插补器和软件插补器。l 从产生的数学模型来分有一次(直线)插补器,二次(圆,抛物线等)插补器及高次曲线插补器等。l 目前应用的插补方法分为基准脉冲插补和数据采样插补两大类。4. 基准脉冲插补基准脉冲插补又称为行程标量插补或脉冲增量插补。此算法的特点是每次插补结束时数控装置向每个运动坐标输出基准脉冲序列,每个脉冲代表了最小位移,脉冲序列的频率代表了坐标运动速度,而脉冲的数量表示位移量。其特点有:l 每次插补的结果仅产生一个单位的行程增量。以一个一个脉冲的方式输出给步进电机。其基本思想
5、是:用折线来逼近曲线(包括直线)。l 插补速度与进给速度密切相关。因而进给速度指标难以提高,当脉冲当量为10m时,采用该插补算法所能获得的最高进给速度是34m/min。l 脉冲增量插补的实现方法比较简单。基准脉冲插补方法有:逐点比较法;最小偏差法;数字积分法;目标点跟踪法;单步追综法等。它们主要用早期的采用步进电机驱动的数控系统。由于此算法难以满足零件加工的要求,现在的数控系统已很少采用这类算法了。(1)逐点比较法控制工件与刀具之间每相对走一步完成四个工作节拍:l 第一,偏差判别。判别加工点对规定几何轨迹的偏离位置,然后决定运动的走向。l 第二,进给。控制某坐标轴进给一步,向规定的轨迹逼近,缩
6、小偏差。l 第三,偏差计算。计算新的加工点对规定轨迹的偏差,作为下一步判别走向的依据。l 第四,终点判断。判断是否到达程序规定的加工终点?若到达终点,则停止插补,否则再回到第一拍。如此不断地重复上述循环过程,直到终点,就能加工出所要求的轮廓形状。(2)数字积分插补法 数字积分插补法又称为数字积分分析法(DDA),是利用数字积分的方法,计算刀具沿各坐标轴的位移,使刀具沿着所加工的轨迹运动。第二章 逐点比较法1逐点比较法直线插补 直线插补时,以直线起点为原点,给出终点坐(xe,ye),直线方程为: ; 直线插补时插补偏差可能有三种情况 :以第一象限为例,插补点位于直线上方,下方和直线上。对位于直线
7、上方的点A,则有:;对位于直线上的点B,则有:;对位于直线下方的点C,则有:因此,可以取判别函数为: F0时,应向+x方向走一步,才能接近直线;F0的情况。整个插补工作,从原点开始,走一步算一步,判别一次F,再趋向直线,步步前进。设第一象限中的点(xi , yi)的F值为Fi,j。若沿+x方向走一步,即若沿+y方向走一步,即直线插补的终点判别方法:l 每走一步判断最大坐标的终点坐标值(绝对值)与该坐标累计步数坐标值之差是否为零,若等于零,插补结束。l 把每个程序段中的总步数求出来,即n=xe+ye ,每走一步,进行n-1,直到n=0时为止。当F0时,沿+x方向走一步,然后计算新的偏差和终点判别
8、计算当F0时,动点在圆弧外;F0和F=0的情况合并在一起考虑,就可以实现第一象限逆时针方向的圆弧插补。当F0时,向-x走一步;当F0时,向+y走一步。每走一步后,计算一次判别函数,作为下一步进给的判别标准,同时进行一次终点判断。F值可用递推计算方法由加、减运算逐点得到。设已知动点的F值为Fi,j ,则:动点在-x方向走一步后:动点在+ y方向走一步后:终点判断可采用与直线插补相同的方法。 归纳起来,F0时,向-x 方向走一步。其偏差计算,坐标值计算和终点判别计算用下面公式:F(Y-y)/判断直线倾斜角度是否小于45度 i=0; else i=1; do /以下是进行插补运算 CClientDC
9、 dc(this); CPen pen(PS_SOLID,1,RGB(0,0,255); dc.SelectObject(&pen);/定义画笔 if(i=0) if(F=0) x+;/进给 point.x=x; point.y=y; dc.LineTo(point); else x+; y+;/同时进给 point.x=x; point.y=y; dc.LineTo(point); if(i=1) if(F=0) x+; y+;/同时进给 point.x=x; point.y=y; dc.LineTo(point); else y+;/进给 point.x=x; point.y=y; dc.
10、LineTo(point); F=X*y-Y*x; dc.MoveTo(point); for(long int w=0;w0) X-;/进给 F=(X-c)*(X-c)+(Y-d)*(Y-d)-(a-c)*(a-c)+(b-d)*(b-d); else Y+;/进给 F=(X-c)*(X-c)+(Y-d)*(Y-d)-(a-c)*(a-c)+(b-d)*(b-d); for(long int w=0;w=99999;w+) ; /延时语句 dc.LineTo(X,Y); /圆弧逐点第1象限 if(idm=1)&(idn=2)/DDA直线 CClientDC dc(this); dc.Line
11、To(point); CPen pen(PS_SOLID,1,RGB(255,0,0); dc.SelectObject(&pen); double m,n; double x,y; double e,f; double X,Y; X=0;Y=0;/起点 m=pow(2,16);/运算总次数 n=0;x=0;y=0; e=point.x; f=point.y;/获取终点坐标 while(nm)/修正 x=x-m;X+;/x方向进给 else ; if(ym)/修正 y=y-m;Y+;/y方向进给 else ; dc.LineTo(X,Y); long int k; for(k=0;k0)|(n
12、y0) dc.MoveTo(X,Y);Jrx=Jrx+Jvx;/积分运算 Jry=Jry+Jvy;if(Jrxm)Jrx=Jrx-m;/修正Jvy-;nx-;X-;/进给else ;if(Jrym)Jry=Jry-m;/修正Jvx+;ny-; Y+;/进给else ;dc.LineTo(X,Y);/DDA圆弧第1象限 / TODO: Add your message handler code here and/or call defaultCView:OnLButtonDown(nFlags, point);void CCBFZView:Online() idm=1;/直线按钮值/ TODO:
13、 Add your command handler code herevoid CCBFZView:Oncircle() idm=2;/圆弧按钮值/ TODO: Add your command handler code herevoid CCBFZView:Onzhudian() idn=1;/逐点按钮值/ TODO: Add your command handler code herevoid CCBFZView:OnDDA() idn=2;/DDA按钮值/ TODO: Add your command handler code herevoid CCBFZView:OnCLR() idn
14、=0; idm=0;CClientDC dc(this);dc.Rectangle(-1,-1,1600,1000);/矩形框,用于清屏 / TODO: Add your command handler code here仿真如图,详细请看附件CBFZ文件夹的vc程序。第5章 利用Vision单片机编程1. 新建工程打开“Keli Version”软件,在菜单栏中,选择“工程”“新建工程”选择“AT89s51”单片机。新建一个文件夹,命名为“AT89x51”。然后在菜单中选择“文件”“新建”,命名为“Text1.c”。然后在目录框中选择“源代码组1”,右键点击,选择“添加文件到源代码组1”,如
15、图:由于,“Keli Version”软件可以用vc语言来编写,所以与vc程序很相似。所以以直线逐点比较为例,只需把画直线的部分改为p1.0和p2.0 I/O接口,程序如图:#include #include #include void delay001s(unsigned int t) t=100000000; while(t-)_nop_();void main()signed int F,X,Y,i;signed int x,y;x=0;y=0;X=100;Y=80;F=X*y-Y*x;/方向判定 if (X-x)(Y-y) /判断是否大于45度i=0;else i=1;do if(i=
16、0)if(F=0) x+; / x正方向走一步 delay001s(100); P1_0=1; delay001s(100); P1_0=0; else x+; y+; delay001s(100); / x正方向走一步 P1_0=1; P2_0=1; delay001s(100);/ y正方向走一步 P1_0=0; P2_0=0; if(i=1)if(F=0) x+; y+; delay001s(100); / x正方向走一步 P1_0=1; P2_0=1; delay001s(100);/ y正方向走一步 P1_0=0; P2_0=0; else y+;/y正方向走一步 delay001s
17、(100); P2_0=1; delay001s(100); P2_0=0; F=X*y-Y*x; while(X!=x)|(Y!=y);/终点判别详细请看“AT89X51”文件。编程后在编译没错的情况下,在菜单栏上选择“调试”“启动/停止调试”,进入调试界面,在菜单栏中选择“外围设备”,调出I/O接口p1,p2。如图所示,可以仿真I/O接口的输出。参考文献 1 李勇,李伟光机械设备数控技术北京:国防出版社,20101 2 张荣梅,梁晓林Visual C+实用教程北京:冶金工业出版社20042 3 周蔼如,林伟健C+程序设计基础北京:电子工业出版社20068 4 李全利,仲伟峰,徐军单片机原理及应用北京:清华大学出版社20062附 件“CBFZ”文件夹: Visual C+插补仿真“AT89S51”文件夹:Vision单片机编程23