逐点比较插补原理的实现.docx
《逐点比较插补原理的实现.docx》由会员分享,可在线阅读,更多相关《逐点比较插补原理的实现.docx(26页珍藏版)》请在冰豆网上搜索。
逐点比较插补原理的实现
计算机控制课程设计
课题:
逐点比较插补原理的实现
系别:
电气与控制工程学院
专业:
电气工程及其自动化
姓名:
王永杰
学号:
091413138
指导教师:
邢广成宋伟
河南城建学院
2016年6月27日
摘要
根据逐点比较法插补原理,按方向完成从第一象限内任意起点),(yxA到坐标原点)0,0(O直线插补的matlab仿真。
程序的`具体编写要求包括:
要求用input()函数读取起点),(yxA,脉冲当量(步长)。
坐标当量可设为1,则步长取坐标当量的0.01-1倍;并用print()函数画出具体走步轨迹图。
然后推导出用逐点比较法插补绘制出下面曲线的算法,利用matlab语言编写.m文件,实现第一象限直线插补的仿真。
插补计算时,每走一步,都要进行以下四个步骤的计算过程,即偏差判别、坐标进给、偏差计算、终点判断。
设计具体算法时,首先根据直线轨迹参数,计算出偏差计算公式及递推公式。
由程序判断出偏差的正负号,从而决定坐标的进给方向,再根据递推公式计算出坐标进给后的偏差,若未到达终点,则返回偏差判别,如此循环。
可以根据起点和终点的坐标位置,计算出总的进给步数Nxy,X或Y的坐标每进给一步,这个值就减一,若Nxy=0,就到达了终点,这就是终点判别的方法。
关键词:
直线插补法、圆弧插补法、偏差判别、终点判断
目录
1设计目的3
2设计要求3
3系统方案总体设计3
4硬件及及软件设计3
4.1硬件件设计3
4.1.1接口示意图3
4.1.2方案论证4
4.1.3单片机与8255的接口5
4.1.4硬件接线原理图6
4.1.5元件清单7
4.2软件设计7
4.2.1软件设计原理7
4.2.28255的初始化编程11
4.2.3步进电机走步控制程序11
4.2.4主程序13
5仿真及结果分析14
5.1系统安装调试14
5.2结果验证14
6设计总结15
7参考文献16
附录一芯片资料17
附录二源程序18
1设计目的
设计一个微型计算机控制步进电机系统,该系统利用微型机的并口输出控制信号,其信号驱动后控制X、Y两个方向的三相步进电机转动,利用逐点比较法插补原理绘制出如下图所示的目标曲线。
图1目标曲线
2设计要求
可以实现直线插补和圆弧插补;每次插补运算后,只有一个坐标轴方向有进给;插补误差不超过一个脉冲当量;运算简单直观,输出脉冲均匀。
但是不容易实现两坐标以上的联动插补。
3、系统方案总体设计
本设计大致包含三部分:
硬件设计、软件设计和系统的运行调试。
硬件设计采用8255,以及51单片机。
软件设计包括初始化程序步进电机控制程序。
调试采用MATLAB软件进行仿真得出轨迹图。
4、软硬件设计
4.1硬件设计
4.1.1接口示意图
两台三相步进电机控制接口如下图所示。
图2系统接口示意图
步进电机是一种将脉冲信号转换成角位移或直线位移的执行机构,其转动距离和角度取决于输入脉冲的个数,转动方向取决于输入脉冲的相序。
4.1.2方案论证
单片机的接口电路可以是锁存器,也可以是专门的接口芯片,本设计采用可编程接口芯片8255。
由于步进电机需要的驱动电流比较大,所以单片机和步进电机的连接还要有驱动电路,如何设计驱动电路成了问题的关键。
设计方案一如图3所示,当某相上驱动信号变为高电平时,达林顿管导通,从而使得该相通电。
图3驱动电路方案一
设计方案二如图4所示,在单片机与驱动器之间增加一级光电隔离,当驱动信号为高电平时,发光二极管发光,光敏三极管导通,从而使达林顿管截止,该相不通电;当驱动信号为低电平时,则步进电机的该相通电。
图4驱动电路方案二
综合比较两种设计方案可知,方案二有抗干扰能力,且可避免一旦驱动电路发生故障,造成高电平信号进入单片机而烧毁器件。
所以,本设计选择方案二。
4.1.3单片机与8255的接口
MCS-51单片机可以和8255直接连接而不需要任何外加逻辑器件,接口示意图如图5所示。
因为8255的B口和C口具有驱动达林顿管的能力,所以将采用B口和C口输出驱动信号。
图5单片机与8255的接口
4.1.4硬件接线原理图
图6系统硬件接线原理图
单片机控制步进电机的硬件接线如图6所示。
因为8255的片选信号
接单片机的地址线P2.7,A1、A0通过地址锁存器接到了8051单片机的地址线P0.1和P0.0,由硬件接线图可以清楚地知道,8255的各口地址为:
A口地址:
7FFCH
B口地址:
7FFDH
C口地址:
7FFEH
控制口地址:
7FFFH
同时,B口和C口都作为输出口,8255工作在方式0。
下面以8255的B口输出端PB0为例说明控制的工作原理。
若PB0输出0,经反相器74LS04后变为高电平,发光二极管正向导通发光。
在光线的驱动下,光敏三极管导通,+5V的电压经三极管引入地线而不驱动达林顿管。
因而,达林顿管截止,X轴上步进电机的C相不通电。
若PB0输出1,反相后变为低电平,发光二极管不导通。
从而光敏三极管截止,+5V电压直接驱动达林顿管导通,X轴上步进电机的C相有从电源流向地线的电流回路,即C相得电。
4.1.5元件清单
表1元件清单表
名称
位号
型号
数量
单片机
——
8051
1
地址锁存器
——
74LS373
1
并行接口芯片
——
8255A
1
反相器
——
74LS04
6
电阻
R1—R24
1K
24
光电三极管
U1—U3
4N25
3
达林顿管
Q1—Q6
NPNDAR
6
二极管
D1—D6
IN4001
6
4.2软件设计
4.2.1软件设计原理
4.2.1.1直线插补原理
逐点比较法的基本原理是,在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给。
图7第一象限直线
如图所示,设直线的起点为坐标原点,终点坐标为A(
),点m(
)为加工点(动点)。
定义偏差公式为
。
若
=0,表明点m在OA直线段上;若
>0,表明点m在OA直线段上方,即点m’处;若
<0,表明点m在OA直线段下1方,即点m’’处。
由此可得第一象限直线逐点比较法插补的原理是:
从直线的起点出发,当
0时,沿+x轴方向走一步;当
<0时,沿+y轴方向走一步;当两方向所走的步数与终点坐标(
)相等时,发出终点到信号,停止插补。
可以将上面所定义的偏差公式进一步简化,推导出偏差的递推公式。
1当
0时,沿+x轴方向进给一步,
(1)
②当
<0时,沿+y轴方向进给一步,
(2)
式
(1)和式
(2)是简化后偏差的计算公式,在公式中只有一次加法或减法运算,新加工点的偏差都可由前一点偏差和终点坐标相加或相减得到。
圆弧插补原理
逐点比较法是以阶梯折线来逼近直线或圆弧等曲线,它与规定的加工直线或圆弧之间的最大误差为一个脉冲当量,因此只要把脉冲当量(每走一步的距离即步长)取得足够小,就可以达到精度的要求。
以下为课程设计要求插补的第一象限逆圆弧。
图3-3为第一象限逆圆弧。
图8第一象限逆圆弧
以下就以第一象限为例进行分析。
(1)偏差计算公式
设要加工逆圆弧AB,圆心在原点,起点坐标A(x0,Y0),终点坐标(xe,Ye),半径R。
瞬时加工点M(xm,Ym),它距圆心Rm,则可用R与Rm来反映偏差。
由此定义偏差公式为:
若Fm=0,M点在圆弧上;
若Fm>0,M点在圆弧外;
若Fm<0,M点在圆弧内。
第一象限逆圆弧的插补原理是:
从圆弧起点出发,若Fm>=0,沿-X方向走一步,并计算新偏差;当Fm<0时,沿+Y方向走一步,并计算新偏差。
如此一步一步计算与进给,并在到达终点时停止计算。
但以上Fm计算式比较复杂,可以考虑用递推公式:
①当Fm≥0时,Xm+1=Xm-1
Ym+1=Ym
Fm+1=Fm-2Xm+1
②当Fm<0时,Xm+1=Xm
Ym+1=Ym+1
Fm+1=Fm+2Ym+1
(2)终点判断方法
①设置Nx,NY两个计数器,初值设为|Xe-Xo|,|Ye-Yo|在不同的坐标轴进给时对应的计数器减一,两个计数器均减到零时,到达终点。
②用一个计数器NxY,初值设为Nx+NY,无论在哪个坐标轴进给,Nxy计数器减一,计数器减到零时,到达终点。
(3)插补计算过程
圆弧插补计算比直线插补计算过程要多一个环节,即要计算加工瞬时坐标。
故圆弧插补计算为五个步骤即偏差判断、坐标进给、偏差计算、坐标计算、终点判断。
图9四个象限逆圆弧插补的对称关系
4.2.1.2步进电机工作原理
步进电机有三相、四相、五相、六相等多种,本设计采用三相步进电机的三相六拍工作方式,其通电顺序为
……
各相通电的电压波形如图8所示。
图10三相六拍工作的电压波形
当步进电机的相数和控制方式确定之后,PB0—PB2和PC0—PC2输出数据变化的规律就确定了,这种输出数据变化规律可用输出字来描述。
为了便于寻找,输出字以表的形式存放在计算机指定的存储区域。
表2给出了三相六拍控制方式的输出字表。
表2三相六拍控制方式输出字表
步序
控制位
工作状态
控制字表
C相
B相
A相
1
0
0
1
A
01H
2
0
1
1
AB
03H
3
0
1
0
B
02H
4
1
1
0
BC
06H
5
1
0
0
C
04H
6
1
0
1
CA
05H
4.2.28255的初始化编程
由前面的分析知道,8255工作在方式0,控制口地址为7FFFH,控制字为90H。
所以,8255的初始化编程如下。
MOVDPTR,#7FFFH;控制口地址送DPTR
MOVA,#90H;控制字送寄存器A
MOVX@DPTR,A;将控制字写入控制口
4.2.3步进电机走步控制程序
4.2.3.1程序流程图
图11步进电机走步控制程序流程图
4.2.3.2汇编程序代码
以下为X轴上电机的步进控制算法,Y轴上步进电机算法类似。
XCOTROL:
MOVDPTR,#ADX;将控制字表地址赋给DPTH
MOVA,R2;表首偏移量送A
MOVCA,@A+DPTR;读取当前步进电机的控制字
MOVDPTR,#7FFDH;PB口地址送DPTR
MOVX@DPTR,A;将步进电机的控制字传送到PB口
CJNEA,#05H,LOOP3;若到表尾,转LOOP3
INCR2;未到表尾,表首偏移量加1
SJMPDELAY1
LOOP3:
MOVR2,#00H;表首偏移量清零
SJMPDELAY1
DELAY1:
MOVR0,#FFH;延时
DJNZDELAY1
RET;返回
4.2.4主程序
4.2.4.1主程序流程图
图12主程序流程图
2.2.4.2源程序代码
首先分配各变量的地址为,NXY:
4FH,50H;XE:
4DH,4EH;YE:
4BH,4CH;FM:
49H,4AH,高位存高地址,地位存进低地址。
源程序代码见附录二。
5、仿真及结果分析
5.1系统安装调试
按照硬件接线图将系统安装好后,装入程序,执行后查看步进电机的走步轨迹。
5.2结果验证
若终点坐标(
)为(4,3),插补计算过程如表所示。
表3直线插补计算过程
步数
偏差判别
坐标进给
偏差计算
终点判别
起点
=0
=7
1
+X
=0-3=-3
=6
2
+Y
=-3+4=1
=5
3
+X
=1-3=-2
=4
4
+Y
=-2+4=2
=3
5
+X
=2-3=-1
=2
6
+Y
=-1+4=3
=1
7
+X
=3-3=0
=0
根据上表,可作出步进电机的走步轨迹如图所示。
若输入的参数为XE=4,YE=3,系统走步轨迹与下图比较,可判断出设计的正确性。
图13步进电机走步轨迹
6、设计总结
课程设计中,主要是我更加了解直线插补和圆弧插补的相关知识,计算机控制设计的相关知识更加专业化,能在考试周期间,火急火燎的完成这次课程设计离不开小组成员的努力和团结,不懂得网上和图书馆积极查阅资料,虽然我部分内容不是很明白,但是还是组员帮助下,慢慢的深入,自己也慢慢的掌握的相关知识,让我在直线插补,圆弧插补应用到步进电机的设计中,收获不少,更加熟练的应用课本知识。
在老师的耐心指导下,有意识的培养和建立了我的思维能力,使我真正建立数据及信息流的概念,以便在控制应用中,能够使软件和硬件有机地结合。
通过单片机对步进电机的控制系统设计,让我真正的掌握了微型计算机软件和硬件相结合的设计方法。
通过一个星期的课程设计,我对这门课有了进一步的了解。
工业控制是计算机的一个重要应用领域,计算机控制正是为了适应这一领域的需要而发展起来的一门专门技术,它主要研究如何将计算机技术和自动控制理论应用于工业生产过程,并设计出所需要的计算机控制系统。
参考文献
[1]贺亚茹.汇编语言程序设计.北京:
科学出版社,2005
[2]卜艳萍、周伟.汇编语言程序设计教程.北京:
清华大学出版社,2004
[3]温玉杰.Intel汇编语言程序设计(第四版).北京:
电子工业出版社,2004
[4]郑学坚、周斌.微型计算机原理与应用.北京:
清华大学出版社,2000
[5]于海生.微型计算机控制技术.北京:
清华大学出版社,1998
[6]沈美明、温冬婵.IBM-PC汇编语言程序设计.北京:
清华大学出版社,2002
[7]何立民.单片机应用系统设计.北京:
北京航空航天大学出版社,2003
附录一芯片资料
图8051单片机引脚图
图可编程芯片8255A引脚图
附录二源程序
(一)
ORG0100H
MOVDPTR,#7FFFH;控制口地址送DPTR
MOVA,#90H;控制字送寄存器A
MOVX@DPTR,A;将控制字写入控制口,初始化8255
MOV4EH,?
;XE的低8位存入4EH
MOV4DH,?
;XE的高8位存入4DH
MOV4CH,?
;YE的低8位存入4CH
MOV4BH,?
;YE的高8位存入4BH
MOVA,4EH
ADDA,4CH;XE与YE低8位相加
MOV50H,A;低位之和存入NXY低8位
MOVA,4DH
ADDCA,4BH;XE与YE的高8位带进位相加
MOV4FH,A;和存入NXY高8位
MOV4AH,#00H;将FM置零
MOV49H,#00H
CLRR2;表ADX偏移量清零
CLRR3;表ADY偏移量清零
LOOP1:
MOVA,49H;取偏差的高8位
JBACC.7,YCONTROL;若FM<0,转到YCONTROL
ACALLXCONTROL;否则,调XCONTROL
CLRC;进位寄存器清零
MOVA,4AH
SUBBA,4CH;FM与YE的低8位相减
MOV4AH,A;结果存入FM低8位
MOVA,49H
SUBBA,4BH;FM与YE的高8位相减
MOV49H,A;结果存入FM高8位
LOOP2:
CLRC
MOVA,50H
SUBBA,#01H;NXY低位值减1
MOV50H,A;结果存入NXY的低位
MOVA,4FH
SUBBA,#00H;考虑低位字节借位
MOV4FH,A;减去借位后存入NXY的高位
ORLA,50H;判断NXY是否为零
JNZLOOP1;不为零则转到LOOP1
LJMP8000H
XCOTROL:
MOVDPTR,#ADX;将控制字表地址赋给DPTH
MOVA,R2;表首偏移量送A
MOVCA,@A+DPTR;读取当前步进电机的控制字
MOVDPTR,#7FFDH;PB口地址送DPTR
MOVX@DPTR,A;将步进电机的控制字传送到PB口
CJNEA,#05H,LOOP3;若到表尾,转LOOP3
INCR2;未到表尾,表首偏移量加1
SJMPDELAY1
LOOP3:
MOVR2,#00H;表首偏移量清零
SJMPDELAY1
DELAY1:
MOVR0,#FFH;延时
DJNZDELAY1
RET;返回
YCOTROL:
MOVDPTR,#ADY;将控制字表地址赋给DPTH
MOVA,R3;ADY表首偏移量送A
MOVCA,@A+DPTR;读取当前步进电机的控制字
MOVDPTR,#7FFEH;PC口地址送DPTR
MOVX@DPTR,A;将步进电机的控制字传送到PC口
CJNEA,#05H,LOOP4;若到表尾,转LOOP4
INCR3;未到表尾,表首偏移量加1
SJMPDELAY2
LOOP4:
MOVR3,#00H;表首偏移量清零
SJMPDELAY2
DELAY2:
MOVR0,#FFH;延时
DJNZDELAY2
CLRC;进位寄存器清零
MOVA,4AH
ADDA,4EH;FM与XE低8位相加
MOV4AH,A;结果存入FM低位
MOVA,49H
ADDCA,4DH;FM与XE高8位带进位相加
MOV49H,A;结果存入FM高8位
SJMPLOOP2;无条件转到LOOP2
ORG8000H
END;程序结束
ADX:
DB01H;X轴步进电机控制字表
DB03H
DB02H
DB06H
DB04H
DB05H
ADY:
DB01H;Y轴步进电机控制字表
DB03H
DB02H
DB06H
DB04H
DB05H
(二)程序清单
OptionExplicit
PublicqAsDouble
PublicflagAsInteger
PublicxaAsInteger
PublicyaAsInteger
PublicxbAsInteger
PublicybAsInteger
PublicfmAsInteger
PublicnAsInteger
PublicxAsDouble
PublicyAsDouble
PublicsxAsDouble
PublicsyAsDouble
DimcAsInteger
PublicFunctionmax(a,b)
Ifa>bThen
max=a
Else
max=b
EndIf
EndFunction
PrivateSubCommand1_Click()
Picture1.Refresh
q=Val(Text1.Text)
xa=Val(Text2.Text)
ya=Val(Text3.Text)
xb=Val(Text4.Text)
yb=Val(Text5.Text)
Picture1.Scale(-1,10)-(10,-1)'定义坐标轴的大小
Picture1.Line(0,0)-(0,10)
Picture1.Line(10,0)-(0,0)
Picture1.Line(10,0)-(9.5,0.5)'画出坐标系X.Y方向的箭头
Picture1.Line(10,0)-(9.5,-0.5)
Picture1.Line(0,10)-(0.5,9.5)
Picture1.Line(0,10)-(-0.5,9.5)
Picture1.Circle(1,1),q,vbRed,0,3.141592/2
n=2*q
fm=0
x=xa-1
y=ya-1
Picture1.CurrentX=xa
Picture1.CurrentY=ya
Do
Iffm>=0Then
Picture1.Line-Step(-1,0)
fm=fm-2*x+1
x=x-1
n=n-1
Else
Picture1.Line-Step(0,1)
fm=fm+2*y+1
y=y+1
n=n-1
EndIf
LoopWhile(n>0)
EndSub
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
课程设计成绩评定
班级姓名学号
综合成绩:
指导教师签字年月日