数控系统插补控制系统设计

来源:本站
导读:目前正在解读《数控系统插补控制系统设计》的相关信息,《数控系统插补控制系统设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《数控系统插补控制系统设计》的详细说明。
简介:本文主要是讨论数控机床加工过程中整个数控系统控制软件的核心——插补。而在现代数控系统中,一般都采用软件插补器。在大多数数控机床的数控装置都具有直线插补器和圆弧插补器。根据插补所采用的原理和计算方法的不同,可有许多插补方法。目前应用的插补方法分为基准脉冲插补和数据采样插补两大类。

基于单片机数控系统插补控制系统设计

课题要求:

1. 设计题目: 基于单片机数控系统插补控制设计

2. 应完成的项目:

(1)调研、搜集整理课题的相关资料,确定设计整体方案。

(2)理解并熟悉数控系统插补原理。

(3)根据插补原理,用Visual C++实现其模拟仿真。

(4)单片机开发环境(μVision )下,编程实现插补。

(5)完成设计说明书,准备答辩。

3. 参考资料以及说明:

(1)机械设备数控技术。

(2)单片机原理及应用。

(3)C++程序设计基础。

摘 要 :目前应用的插补方法分为基准脉冲插补和数据采样插补两大类,而在本文,主要探讨的是基准脉冲插补,它包括两个分点,一是逐点比较法,二是数字积分插补法(DDA);

在本文中,主要介绍基准脉冲插补中的逐点比较法和数值积分插补法(DDA)。在熟悉插补原理的基础上,利用VC++软件工具来实现数控插补编程及仿真。在分析了逐点比较法和数字积分插补法(DDA)的算法,画出插补流程图,利用VC++软件编程源代码再实现仿真。

此外,单片机作为微机计算机的一个重要分支,在现代社会的生产和生活中发挥着越来越重要的作用。单片机技术已经成为了实现各种工业测控系统和智能仪器的重要手段。所以,我们在利用在单片开发环境(μVision)下,来编程去实现插补的整一个过程,这样,更加明了插补的一个过程及其原理是怎样的!

关键词:插补、单片机、逐点比较法、数据积分插补法

第一章 绪论 1.1 引言

随着单片机技术的迅速发展,其在工业控制领域得到了广泛应用。在工业领域的中的数控技术也是在不断的发展着,自从美国1952年研制成功世界上第一台数控机床以后,我国几乎与各工业发达国家同时起步研究数控技术。经过几十年努力和随着对外合作的增多,数控技术有了新的发展机会,国内数控技术在系统主控、机械和功能部件的开发方面都有了突破性的进展。另外在数控机床的加工过程中整个数控系统控制软件的核心——插补,故:插补对于数控系统来说是非常重要的。

数控机床上进行加工的工件,其轮廓大部分由直线和圆弧这两种简单、基本的曲线构成,若加工的轮廓由其他非圆曲线构成,可采用一小段直线或者圆弧来拟合。数控系统的主要任务之一是控制执行机构按工件的轮廓轨迹运动。所谓插补就是根据给定进给速度和给定轮廓线形的要求,在运动轨迹的起始点坐标和轮廓轨迹之间,有数控系统计算出各个中间点的坐标,“插入”、“补上”运动轨迹中间点的坐标值,这个过程称为“插补”。

1.2 课题设计内容 1.2.1课题设计名称和要求

课题设计名称:基于单片机数控系统插补控制设计

要求:1、理解并熟悉数控系统插补原理。

2、根据插补原理,用VisualC++实现其模拟仿真。

3、在单片机开发环境(μVision)下,编程实现插补。

1.2.2 课题分析

单片机作为微机计算机的一个重要分支,在现代社会的生产和生活中正发挥着越来越重要的作用。单片机技术已经成为实现各种工业测控系统和智能仪器仪表的重要手段。近年来单片机产品市场百花齐放,功能各异的单片机系列产品不断推出,但是,单片机新品仍以8051为内核,采用CMOS工艺,形成了所谓的80C51主流系列。[1]

目前,数控技术已经成为现代制造技术的基础支撑,在数控技术中,插补起着相当重要的作用。插补,就是根据给定进给速度和给定轮廓线形的要求,在运动轨迹的起始点坐标和轮廓轨迹之间,有数控系统计算出各个中间点的坐标,“插入”、“补上”运动轨迹中间点的坐标值。插补是指数控系统通过运算,给出机床运动的指令,实现用简单的微线段逼近零件某一段理想轮廓的过程。它的实际意义是:在已知零件轮廓表面曲线段的起点和终点之间,进行“数据点的密化工作”。插补所采用的原理和计算方法的不同,可有许多插补方法。目前应用的插补方法非为基准脉冲插补和数据采样插补两大类。在这次课题设计中,我们主要研究的是基准脉冲插补。它主要分为两点,逐点比较法和数字积分插补法(DDA)。逐点比较法以折线来逼近直线或者圆弧曲线,它既可以做直线插补,又可以做圆弧插补。它运算直观,差不误差小于一个脉冲当量,输出脉冲均匀,而且输出脉冲的速度变化小,调节方便。而数字积分插补法(DDA),是利用数字积分的方法,计算刀具沿各坐标轴的位移,使刀具沿着所加工的轨迹运动。它具有运算速度快、脉冲分配均匀、易实现多轴联动等优点。不仅能方便地实现一次、两次曲线的插补,还可以用各种函数运算,因此得到广泛的运用。[2]

本次课题设计主要目的是让我们了解并熟悉数控系统插补是怎样实现的,熟悉插补的一个原理,然后是以VisualC++为工具,在VisualC++环境下进行编程来进行插补的仿真。然后再在单片机开发环境(μVision)下,编程实现插补。

第二章 数控插补的控制设计 2.1 逐点比较法

逐点比较法又称代数运算法、醉步,它是一种边判别边前进的方法。

2.2.1 插补原理

逐点比较法的原理是:计算机在控制加工过程中,每进给一步都要将加工点的瞬时坐标与规定的轨迹相比较,判断加工偏差,然后决定下一步的进给方向。逐点比较法以折线来逼近直线或者圆弧曲线,它既可以做直线插补,又可以做圆弧插补。它运算直观,差不误差小于一个脉冲当量,输出脉冲均匀,而且输出脉冲的速度变化小,调节方便。[2]

2.2.2 直线插补

直线插补就是零件程序提供直线段的起点、终点坐标,数控装置将这两点之间的空间进行数据密化,用一个个输出脉冲把空间填补起来,从而形成要求的直线轨迹。[2]

数控系统插补控制系统设计(一).偏差计算公式

数控系统插补控制系统设计

数控系统插补控制系统设计如图所示X-Y平面第一象限内有直线段 ,以原

点为起点,以A( Xe、Ye)为终点。对X-Y第一象限

内的任一点P(Xi、Yi)有如下三种情况:

数控系统插补控制系统设计当点P(Xi、Yi)在直线上,则下式成立:

即 Xeyi - xiYe=0

数控系统插补控制系统设计取偏差函数:

进给方向的选取:使误差减小的方向

当P点在直线上方时;

则:Xeyi - xiYe>0

当P点在直线下方时;

则:Xeyi - xiYe<0

因此:

由F可判别动点P与理想轨迹的相对位置,从而决定下一步移动方向。

F>0,点P在直线上方,应向+X 移动。

F<0,点P在直线下方,应向+Y 移动。

F=0,点P在直线上,为方便,将 F=0 归F>0。

为便于计算机编程计算,将F的计算予以简化。

设第I象限中动点P(xi, yi)的F值为Fi, Fi=Xeyi-xiYe

数控系统插补控制系统设计

1.若沿+x向走一步,即

于是有 Fi+1 = Fi -Ye

数控系统插补控制系统设计

2.若沿+y向走一步,即

于是有:Fi+1 = Fi +Xe

(二)终点判别的方法有两种:

1.每走一步,判断动点P(xi, yi)的坐标值是否与终点坐标相同,即

Xi-Xe =0且 Yi-Ye=0

若两式同时满足,插补结束。

2. 求程序段总步数n=Xe+Ye,每走一步,n-1®n,直到 n=0,插补结束。

(三)节拍控制的插补计算过程:(用流程图表示 )[5]

数控系统插补控制系统设计

(四)第 I 象限直线插补软件流程图

数控系统插补控制系统设计

具体程序如下:[3]

#include "iostream.h" //头文件

void main()

{ int xe,ye,f,j;

xe=4; ye=3; //把常数4写入变量xe;把常数3写入变量ye;

f=0; //把常数0写入f;

j=xe+ye; //读出xe和ye的值,相加后结果写入j;

do {if (f>=0)

{if(ye>=xe) //判断直线是否大于45度;

{cout<<"同时走+x,+y"<<endl; //输出结果;

f=f+xe-ye; //读出f、xe和ye的值,计算后结果写入f;

j=j-2;} //读出j的值,减2后结果写入j;

else{cout<<"向+x走一步"<<endl;

f=f-ye; j=j-1;}}

else {if (ye>xe)

{cout<<"向+y走一步"<<endl;

f=f+xe; j=j-1;}

else {cout<<"同时走+x,+y"<<endl;

f=f+xe-ye; j=j-2;}}}

while (j!=0);}

(五)其他象限的插补情况

SHAPE * MERGEFORMAT数控系统插补控制系统设计

对于第二象限,只要去| x |代替x即可,至于输出驱动,应使x轴步进电机方向旋转,而y轴步进电机仍为正向旋转。

同理,第三、四象限的直线也可以变换到第一象限。插补运算时,取| x |和| y |代替x、y。输出驱动原则是:在第三象限,点在直线上方,向-y方向步进;点在直线下方,想-x方向步进。在第四象限,点在直线上方,想-y方向步进;点在直线下方,想+x方向步进。4个象限各轴插补运动方向如上图所示。由图中看出,F>=0时,都是在x方向步进,不管+x向还是-x向,| x |增大。走+x或-x可由象限标志控制,第一、第四象限走+x,第二、三象限走-x。同样,F<0时,总是走y方向,不论-y向还是+y向,| y |增大。走+y或-y由象限标志控制,第一、二象限走+y,第三、四象限走-y。[2]

2.2.3 圆弧插补

(一)偏差的计算公式

圆心为原点,圆弧起点坐标(x0、y0),终点坐标(xe、ye),

设动点P(xi、yi)。

若点P在圆弧上 SHAPE * MERGEFORMAT数控系统插补控制系统设计

则:(xi²+ yi²)-(x0²+ y0²)=0

取判别函数F为 F=(xi²+ yi²)-(x0²+ y0

F=(xi²+ yi²)-(x0²+ y0²)

1.动点在圆弧外,F > 0,向-x 走一步;

2.动点在圆弧内,F < 0, 向+y 走一步;

3.动点在圆弧上,F = 0,向-x 走一步。

如下图所示:

SHAPE * MERGEFORMAT数控系统插补控制系统设计

(二)终点判别的方法有两种:

1、动点与终点坐标值比较

若 xi=xe,x 向已到终点

若 yi=ye,y 向已到终点

只有当x、y都到达终点,插补才算完成。

2、计算总步数 n=|Xe-X0|+ |Ye-Y0|

每走一步,n-1→n,直到n=0,插补结束

(四)不同象限的直线插补计算

1、第一象限逆圆插补

动点在-X方向走一步后

xi+1=xi-1 yi+1=yi

Fi+1=(xi-1)²+yi²-(x0²+y0²)

=Fi-2xi+1

动点在+Y方向走一步后

Fi+1=xi²+(yi+1)²-(x0²+y0²)

= Fi+2yi+1

如下图所示:

SHAPE * MERGEFORMAT数控系统插补控制系统设计

第一象限逆圆插补的流程图如图所示

数控系统插补控制系统设计

具体程序如下:

#include "iostream.h" //头文件

void main(){

int x0, y0, j,f, x1, y1;

x0=4; y0=0; //把常数0写入变量x0;把常数0写入变量y0;

x1=0; y1=4; //把常数0写入变量x1;把常数4写入变量y1;

j=x0+y1; //读出x0和y1的值,相加后结果写入j;

f=0; //把常数0写入变量f;

do {if (f>=0)

{cout<<"向-x走一步"<<endl; //输出结果;

f=f-2*x0+1; //读出f、2*x0和1,计算后结果写入f;

x0=x0-1;} //读出x0的值,减1后结果写入x0;

else {cout<<"向+y走一步"<<endl;

f=f+2*y0+1; y0=y0+1;}

j=j-1;}

while (j!=0);}

2、第一象限顺圆插补

F≥0动点在-Y方向走一步后,Fi+1=Fi-2Yi+1; F<0动点在+X方向走一步后Fi+1=Fi+2Xi+1

SHAPE * MERGEFORMAT数控系统插补控制系统设计

3、圆弧插补有八种情况表示如下图

SHAPE * MERGEFORMAT数控系统插补控制系统设计

由上图可以看出:第一象限、顺圆、F<0;第二象限、顺圆、F>=0;第三象限、逆圆、F>=0和第四象限、逆圆、F<0的情况适用于动点在+X方向走一步后xi+1=xi+1 ;yi+1=yi Fi+1= =Fi+2xi+1。第一象限、逆圆、F>=0;第二象限、逆圆、F<0;第三象限、顺圆、F<0和第四象限、逆圆、F>=0的情况适用于动点在-X方向走一步后xi+1=xi-1 ;yi+1=yi Fi+1= =Fi-2xi+1。第一象限、逆圆、F<0;第二象限、顺圆、F<0;第三象限、顺圆、F>=0和第四象限、逆圆、F>=0的情况适用于动点在+Y方向走一步后yi+1=yi+1 ;xi+1=xi Fi+1= =Fi+2yi+1。

第一象限、顺圆、F>=0;第二象限、逆圆、F>=0;第三象限、逆圆、F<0和第四象限、顺圆、F<0的情况适用于动点在-Y方向走一步后yi+1=yi-1 ;xi+1=xi Fi+1= =Fi-2yi+1。[2]

2.2 数字积分插补法(DDA)

数字积分插补法又称为数字积分分析法(DDA),是利用数字积分的方法,计算刀具沿各坐标轴的位移,是刀具沿着所加工的轨迹运动。它具有运算速度快、脉冲分配均匀、易实现多轴联动等优点。不仅能方便地实现一次、两次曲线的插补,还可以用各种函数运算,因此得到广泛的运用。[2]

2.2.1 插补原理

数控系统插补控制系统设计它的基本原理可以用图2.2所示的函数积分表示,从微分几何概念来看,从时刻0到时刻t求函数y=f(t)曲线所包围的面积时,可用积分公式:

数控系统插补控制系统设计如果将0~t的时间划分成时间间隔为Δt的有限区间,当Δt足够小时,可得近似公式:

式中yi-1为t=ti-1时f(t)的值,此公式说明:积分可以用数的累加来近似代替,其几何意义就是用一系列小矩形面积之和来近似表示函数f(t)下面的面积,

SHAPE * MERGEFORMAT数控系统插补控制系统设计

如果在数字运算时,用取Δt为基本单位“1”,则2.2式可以简化为:数控系统插补控制系统设计[4]

2.2.2 DDA直线插补

(1)数控系统插补控制系统设计原理:积分的过程可以用微小量的累加近似:

数控系统插补控制系统设计如下图所示设X-Y平面内直线 ,起点(0,0),终点( Xe, Ye )。若以匀速V沿OA位移,则V可分为Vx、Vy两个速度,见下图。它们的关系式为

式中 K——比例系数

在△t时间内,X和Y位移增量△X和△Y应为

数控系统插补控制系统设计

动点从起点走向终点的过程,可看作是各坐标轴每一单位时间间隔△t分别以增量及同时累加的结果。经过m次累加后,X和Y分别都达终点(Xe ,Ye)

数控系统插补控制系统设计SHAPE * MERGEFORMAT数控系统插补控制系统设计

则:

式中K、Xe、Ye为常数,若取一单位时间间隔,即△t=1,则

数控系统插补控制系统设计

若这两式成立,那么 mK=1; m=1/K

上式表明比例常数K和累加次数m的关系,其中已知一个,另一个也就确定了。但m必须是整数,所以K一定是小数。选择K时主要考虑每次增量△X和△Y不大于1,以保证坐标轴每次分配进给脉冲不超过一个,就是说每次位移增量只产生一个单位步距,即

数控系统插补控制系统设计

数控系统插补控制系统设计故:

数控系统插补控制系统设计

数控系统插补控制系统设计数控系统插补控制系统设计数控系统插补控制系统设计一般取:

如 ,满足 的条件,故累加次数为

数控系统插补控制系统设计数控系统插补控制系统设计

因为 ,则 这一运算对二进制来说是比较容易实现的,即数字本身不变,只要把小数点左移n位即可。所以一个n位寄存器存放Xe 和存放KXe 的数字是相同的。后者只认为小数点出现在最高位数的前面,其它没有区别。

(二)DDA直线插补器

数控系统插补控制系统设计

设经过m次累加,X、Y同时或分别到达终点X=mKXe=Xe (m*K=1)

Kxe≤数控系统插补控制系统设计-1 Kye≤数控系统插补控制系统设计-1 (寄存器)

Kxe≤1 Kye≤1 (累加器)

取K=1/数控系统插补控制系统设计 则m=数控系统插补控制系统设计

(三)终点判别

直线插补时不论被积函数有多大,对于n位寄存器。必须累加2n次才能到达终点。因此可以用一容量为2n,的寄存器当计数器,来统计累加的次数。可以用加1计数器,也可以用减1计数器。用加1计数器时,首先将计数器清零,运算过程中每来一个累加脉冲△t就加1。当计数器满2n时表明运算完成。采用减1计数器时,运算前把总运算次数2n送入计数器,每运算一次,就减去1。当计数器减为0时,表明运算完成。故:终点判别:J=数控系统插补控制系统设计

(四)第 I 象限DDA直线插补软件流程图[5]

数控系统插补控制系统设计

具体程序如下:[3]

#include <iostream.h> //头文件

void main()

{int x,y,m,xe,ye,k;

x=0; y=0; k=0; //把常数0写入变量x;把常数0写入变量y;把常数0写入变量k;

m=16; xe=10; ye=5; //把常数16写入变量m;把常数10写入变量xe;把常数5写入变量ye;

do {x=x+xe; //读出x和xe的值,相加后结果写入x;

y=y+ye; //读出y和ye的值,相加后结果写入y;

if (x>=m)

{if (y>=m)

{cout<<"向+x,+y同时进给"<<endl; //输出结果;

x=x-m; //读出x和m的值,相减后结果写入x;

y=y-m; //读出y和m的值,相减后结果写入y;

k=k+1;} //读出k的值,加1后结果写入k;

else{cout<<"向+x走一步"<<endl;

x=x-m; k=k+1;} }

else{if (y>=m)

{cout<<"向+y走一步"<<endl;

y=y-m; k=k+1;}

else {k=k+1;}}}

while (k!=m);}

2.2.3 DDA圆弧插补

(一)基本原理

如下图所示:假定加工工件轮廓的一部分是X-Y坐标系中一段圆弧AB,位于第一象限,逆时针走向。圆弧起点A( X0 , Y0 ),终点为B(Xe , Ye ),半径为R,圆心在原点(0,0)。加工时沿弧切线方向的进给速度V 恒定

设圆弧AB上任一动点P( xi , yi ),其切线方向的进给速度V可分解为水平方向速度 和垂直方向速度 Vy ,即

数控系统插补控制系统设计

数控系统插补控制系统设计由相似三角形可得:

SHAPE * MERGEFORMAT数控系统插补控制系统设计

数控系统插补控制系统设计数控系统插补控制系统设计

数控系统插补控制系统设计数控系统插补控制系统设计

(二)DDA直线插补器

数控系统插补控制系统设计

(三)终点判别

圆弧插补的终点判断不能象直线插补那样由累加次数m来决定,一般采用两个终点判别计数器分别累计两坐标的进给脉冲数。在插补运算中,每产生一个△X或△Y,就使对应计数器减1。若某一个计数器先减到零,就停止该轴的溢出脉冲,而插补运算仍继续进行,直到另一计数器也减至零时才到达终点,插补运算结束。

(四)第 I 象限DDA圆弧插补软件流程图[4]

数控系统插补控制系统设计

具体程序如下

#include <iostream.h> //头文件

void main(){

int m,JRx,JVx,JRy,JVy,Nx,Ny;

JVx=0; JVy=5;m=8; // 把常数0写入变量JVx;把常数5写入变量JVy;把常数8写入变量m;

Nx=5; Ny=5; JRx=0; JRy=0; //分别把常数5、5、0、0、写入Nx、Ny、JRx、JRy;

do {if (Nx!=0)

JRx=JRx+JVx; //读出JRx和JVx的值,相加后结果写入JRx;

if(Ny!=0)

JRy=JRy+JVy;

if (JRx>=m)

{if (JRy>=m)

{cout<<"向-x,+y同时进给"<<endl;

JRx=JRx-m; //读出JRx和m的值,相减后结果写入JRx;

JRy=JRy-m;

JVx=JVx+1; JVy=JVy-1;

Nx=Nx-1; Ny=Ny-1;}

else{cout<<"向-x走一步"<<endl;

JRx=JRx-m; JVy=JVy-1; Nx=Nx-1;} }

else {if (JRy>=m)

{cout<<"向+y走一步"<<endl; JRy=JRy-m; JVx=JVx+1; Ny=Ny-1;}} }

while(Nx!=0||Ny!=0);}

第三章 VisualC++模拟仿真 3.1 逐点比较法 3.1.1 直线插补仿真

以第一象限为例,仿真程序如下:

void CMy11111View::OnLButtonDown(UINT nFlags, CPoint point)

{CClientDC dc(this) ; // 定义画笔

dc.MoveTo(0,0); //移动画笔到原点

int xe,ye,f,j,x,y; xe=40; ye=30; x=100; y=80; f=0; j=xe+ye;

do {if (f>=0)

{if(ye>=xe)

{ x++; y++; dc.LineTo(x,y); f=f+xe-ye; j=j-2;}

else{ x++ ; dc.LineTo(x,y); f=f-ye; j=j-1;}}

else {if (ye>xe)

{ y++ ; dc.LineTo(x,y); f=f+xe; j=j-1;}

else { x++; y++; dc.LineTo(x,y); f=f+xe-ye; j=j-2;}}}

while (j!=0);

CView::OnLButtonDown(nFlags, point);}

3.1.2 圆弧插补仿真

以第一象限逆圆为例,仿真程序如下:

void CMy11111View::OnLButtonDown(UINT nFlags, CPoint point)

{CClientDC dc(this) ; // 定义画笔

dc.MoveTo(100,100); //移动画笔到点(100,100)

int x0, y0, j,f, x1, y1,x,y; x0=40; y0=0; x1=0; y1=40;

j=x0+y1; f=0; x=100; y=100;

do {if (f>=0)

{ x-- ; dc.LineTo(x,y); f=f-2*x0+1; x0=x0-1;}

else { y++ ; dc.LineTo(x,y); f=f+2*y0+1; y0=y0+1;}

j=j-1;}

while (j!=0);

CView::OnLButtonDown(nFlags, point);}

3.2 数字积分插补法(DDA) 3.2.1 DDA直线插补仿真

以第一象限为例,仿真程序如下:

void CMy11111View::OnLButtonDown(UINT nFlags, CPoint point)

{CClientDC dc(this) ; // 定义画笔

dc.MoveTo(0,0); //移动画笔到原点

int x1,y1,m,xe,ye,k,x,y; x1=0; y1=0; k=0;x=0,y=0;

m=64; xe=100; ye=50;

do {x1=x1+xe;y1=y1+ye;

if (x1>=m)

{if (y1>=m)

{x++; y++; dc.LineTo(x,y); x1=x1-m; y1=y1-m; k=k+1;}

else{x++; dc.LineTo(x,y); x1=x1-m; k=k+1;}}

else{if (y1>=m)

{y++; dc.LineTo(x,y); y1=y1-m; k=k+1;}

else {k=k+1;}}}

while (k!=m);

CView::OnLButtonDown(nFlags, point);}

3.2.2 DDA圆弧插补仿真

以第一象限逆圆为例,仿真程序如下:

void CMy11111View::OnLButtonDown(UINT nFlags, CPoint point)

{CClientDC dc(this) ; // 定义画笔

dc.MoveTo(100,50); //移动画笔到点(100,50)

int m,JRx,JVx,JRy,JVy,Nx,Ny,x,y; JVx=0; JVy=50;

m=64; Nx=50; Ny=50; JRx=0; JRy=0; x=100; y=50;

do {if (Nx!=0) JRx=JRx+JVx;

if(Ny!=0) JRy=JRy+JVy;

if (JRx>=m)

{if (JRy>=m)

{ x--; y++; dc.LineTo(x,y); JRx=JRx-m; JRy=JRy-m; JVx=JVx+1; JVy=JVy-1;

Nx=Nx-1; Ny=Ny-1;}

else{ x-- ; dc.LineTo(x,y); JRx=JRx-m; JVy=JVy-1; Nx=Nx-1;}}

else {if (JRy>=m)

{ y++ ; dc.LineTo(x,y); JRy=JRy-m; JVx=JVx+1; Ny=Ny-1;}}}

while(Nx!=0||Ny!=0);

CView::OnLButtonDown(nFlags, point);}

第四章 单片机开发环境(μVision)下,编程实现插补 4.1 单片机的介绍

所谓单片机,就是将CPU,RAM,ROM,定时/计数器和多种I/O接口电路都集成在一块集成芯片上的微型计算机。

MCS--51系列单片机是美国Intel公司在1980年推出的8位单片 微型计算机,包含51和52两个子系列。51子系列的典型产品有8031,8051和8751三种机型 52子系列包括8032,8052二种主要机型。 51子系列的配置如下:

(1)8位CPU;

(2)振荡频率1.2~12MHZ;

(3)128个字节的片内数据存储器(片内RAM);

(4)21个专用寄存器;

(5)4KB的片内程序存储器(8031无);

(6)8位并行I/O口P0,P1,P2,P3;

(7)一个全双工串行I/O口;

(8)2个16位定时器/计数器;

(9)5个中断源,分为2个优先级;

本次编程选用ATMEL89S51系列单片机,由于它的模块化设计为适应具体的应用提供了极大的灵活性,便于扩展功能,有效的提高了系统的经济性。AT89S51是一种低工耗、高性能的片内含有4KB快闪可编程/擦除只读存储器的八位CMOS微控制器,使用高密度、非易失存储编程器对程序存储器重复编程。

AT89S51具有以下特点:

(1)与MCS-51微控制器产品系列兼容。

(2)片内有4KB可在线重复编程的快闪擦写存储器。

(3)32条可编程I/O线。

(4)程序存储器具有三级加密保护。

(5)可编程全全双工串行通道。

(6)空闲状态维持低功耗和掉电状态保存存储内容。

(7)而且与87C51系列的引脚也完全兼容。

89S51单片机结构如图4-1所示:

数控系统插补控制系统设计

图4-1 89S51单片机结构框图

51系列单片机的引脚功能:

主电源引脚 Vss、Vcc Vss:接地,Vcc:接+5V电源

外接晶振引脚 XTAL1、XTAL2

XTAL1:片内反向放大器输入端,XTAL2:片内反向放大器输出端

输入/输出引脚 P0、P1、P2、P3

P0.0~P0.7:P0口的8个引脚,P0口是8位漏极开路型双向I/0端口,在接有片外存储器或I/0扩展接口时,P0.0~P0.7分时复用,作低8位地址总线与双向8位数据总线

P1.0~P1.7:P1口的8个引脚,P1口是一个带内部上拉电阻的8位双向I/O口,对于52子系列,P1.0还可用于定时器/计数器2的计数脉冲输入端T2,P1.1还可作定时器/计数器2的外部控制端T2EX。

P2.0~P2.7:P2口的8个引脚,P2口也是一个带内部上拉电阻的双向I/O口,在访问片外存储器或扩展I/O接口时,还用于提供高8位地址。

P3.0~P3.7:P3口的8个引脚,P3口也是一个带上拉电阻的I/O口。

今后单片机的发展趋势,将是进一步向着多功能、高性能、高速度、低功耗、低价格、存储容量扩大和增强I/O功能及结构兼容等方面发展。其发展趋势主要有以下几个方面:

1. 多功能

在单片机中尽可能多地把应用所需的存储器、各种功能的I/O口都集成在一块芯片内,使单片机的功能更加强大。如把LED、LCD或VFD显示驱动器也开始集成在8位单片机中。

2. 高性能

进一步改进CPU的性能,加快指令运算的速度和提高系统控制的可靠性,采用精简指令系统计算机RISC(Reduced Instruction Set Computer)结构和流水线技术,大幅度提高运行速度。现指令速度最高者已达100MIPS(Million Instruction Per Seconds,即兆指令每秒),并加强了位处理功能、中断和定时控制功能,使单片机的性能明显地优于同类型的微处理器。单片机集成度进—步提高,有的单片机的寻址能力已突破64 KB的限制,8位、16位的单片机有的寻址能力已达到1 MB和16 MB。片内ROM的容量可达64 KB,RAM的容量可达2 KB。

3. 低电压、低功耗

允许使用的电压范围越来越宽,一般在3~6V范围内工作,有的已能在1.2V或0.9V电压下工作。。几乎所有的单片机都具有省电运行方式。单片机的功耗已从mA级降到μA级,甚至1μA以下,在一粒钮扣电池下就可长期工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。

4. 低价格

单片机应用的另一显著特点是量大面广。促使世界各国公司在提高单片机性能的同时,也十分注意降低价格。如Z-8系列的Z8600、80C51系列的80C31每片仅售1-1.5美元。提高性能价格比是各公司竞争的主要策略和不懈追求的目标。[1]

4.2 直线编程 4.2.1逐点比较法的直线插补编程

以第一象限直线为例:

#include<AT89X51.h>

void main(){

int xe,ye,f,j,x,y; xe=40; ye=30; x=100; y=80; f=0; j=xe+ye;

do {P1_0=1; P1_1=1;

if (f>=0)

{if(ye>=xe)

{ x++; P1_0=0;y++; P1_1=0;f=f+xe-ye; j=j-2;}

else{ x++ ; P1_0=0; f=f-ye; j=j-1;}}

else {if (ye>xe)

{ y++ ;P1_1=0;f=f+xe;j=j-1;}

else { x++; y++; P1_0=0;P1_1=0;f=f+xe-ye;j=j-2;}}}

while (j!=0);}

故:数字积分插补法(DDA)的直线插补编程也类似这样;

4.3 圆弧编程 4.3.1逐点比较法的圆弧插补编程

以第一象限逆圆弧为例:

#include<AT89X51.h>

void main(){

int x0, y0, j,f, x1, y1,x,y; x0=40; y0=0; x1=0; y1=40; j=x0+y1; f=0; x=100; y=100;

do { P1_0=1; P1_1=1;

if (f>=0)

{ x-- ; P1_0=0; f=f-2*x0+1; x0=x0-1;}

else { y++ ; P1_1=0; f=f+2*y0+1; y0=y0+1;}

j=j-1;}

while (j!=0);}

故:数字积分插补法(DDA)的圆弧插补编程也类似这样;

结论:

本文主要是讨论数控机床加工过程中整个数控系统控制软件的核心——插补。而在现代数控系统中,一般都采用软件插补器。在大多数数控机床的数控装置都具有直线插补器和圆弧插补器。根据插补所采用的原理和计算方法的不同,可有许多插补方法。目前应用的插补方法分为基准脉冲插补和数据采样插补两大类。

提醒:《数控系统插补控制系统设计》最后刷新时间 2024-03-14 01:19:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《数控系统插补控制系统设计》该内容的真实性请自行鉴别。