逐点比较插补原理实现完整版.docx

上传人:b****8 文档编号:12294489 上传时间:2023-06-05 格式:DOCX 页数:34 大小:442.28KB
下载 相关 举报
逐点比较插补原理实现完整版.docx_第1页
第1页 / 共34页
逐点比较插补原理实现完整版.docx_第2页
第2页 / 共34页
逐点比较插补原理实现完整版.docx_第3页
第3页 / 共34页
逐点比较插补原理实现完整版.docx_第4页
第4页 / 共34页
逐点比较插补原理实现完整版.docx_第5页
第5页 / 共34页
逐点比较插补原理实现完整版.docx_第6页
第6页 / 共34页
逐点比较插补原理实现完整版.docx_第7页
第7页 / 共34页
逐点比较插补原理实现完整版.docx_第8页
第8页 / 共34页
逐点比较插补原理实现完整版.docx_第9页
第9页 / 共34页
逐点比较插补原理实现完整版.docx_第10页
第10页 / 共34页
逐点比较插补原理实现完整版.docx_第11页
第11页 / 共34页
逐点比较插补原理实现完整版.docx_第12页
第12页 / 共34页
逐点比较插补原理实现完整版.docx_第13页
第13页 / 共34页
逐点比较插补原理实现完整版.docx_第14页
第14页 / 共34页
逐点比较插补原理实现完整版.docx_第15页
第15页 / 共34页
逐点比较插补原理实现完整版.docx_第16页
第16页 / 共34页
逐点比较插补原理实现完整版.docx_第17页
第17页 / 共34页
逐点比较插补原理实现完整版.docx_第18页
第18页 / 共34页
逐点比较插补原理实现完整版.docx_第19页
第19页 / 共34页
逐点比较插补原理实现完整版.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

逐点比较插补原理实现完整版.docx

《逐点比较插补原理实现完整版.docx》由会员分享,可在线阅读,更多相关《逐点比较插补原理实现完整版.docx(34页珍藏版)》请在冰点文库上搜索。

逐点比较插补原理实现完整版.docx

逐点比较插补原理实现完整版

《微型计算机控制技术》课程设计报告

 

课题名称:

逐点比较插补原理的实现

姓名:

章洪高

班级:

自动化2班

学号:

201320150211

指导老师:

徐猛华

 

东华理工大学机械与电子工程学院

2016年6月

1设计任务及要求

设计一个计算机控制步进电机系统,该系统利用单片机的I/O口输出控制信号,其信号驱动控制X、Y两个方向的三相步进电机转动,利用逐点比较法插补绘制出如下曲线。

图1-1第一象限逆圆弧

课程设计的主要任务:

1)在显示器上显示任意四位十进制数;

a、定义键盘按键:

10个为数字键0~9;6个功能键:

设置SET、清零CLR、确认、开始START、暂停、停止;

b、显示器上第一位显示次数,后三位显示每次行走的角度;

c、通过键盘的按键,设置X、Y轴插补的起始值;按START键启动步进电机开始转动,按SET键进行数据设置、按CLR键清零。

2)设计硬件系统,画出电路原理框图(要求规范);

3)定义步进电机转动的控制字;(不设计步进电机驱动电路与驱动程序)。

4)推导出用逐点比较法插补绘制出下面曲线的算法;

5)编写算法控制程序线;

6)撰写设计说明书。

2方案设计及认证

本次课程设计内容为设计一个单片机控制步进电机系统,该系统利用单片机的I/O口输出控制信号,其信号驱动后控制X、Y两个方向的三相步进电机转动,利用逐点比较法插补绘制出第一象限逆圆弧。

第一象限逆弧如图2-1所示。

图2-1第一象限逆圆弧

针对以上设计要求,采用单片机控制步进电机进行逐步逼近插补。

硬件方面,在显示器上显示任意四位数,可采用LCD1602显示,第一位显示次数,即在插补过程中每走一步步数加1在第一位显示出来10个数字键采用矩阵键盘,用矩阵键盘扫描的方式判断哪个键按下,以此来设定X,Y的初始坐标。

用独立键盘做其功能键,K1用作设置初始坐标,K2坐标清零,K3插补启动,K4插补暂停,K5停止。

主控制器采用STC90单片机做控制,硬件简单,控制方便。

插补算法-逐点比较法是以阶梯折线来逼近直线或圆弧等曲线,它与规定的加工直线或圆弧之间的最大误差为一个脉冲当量,因此只要把脉冲当量(每走一步的距离即步长)取得足够小,就可以达到精度的要求。

以下为课程设计要求插补的第一象限逆圆弧。

图2-1为第一象限逆圆弧。

单片机程序软件的设计主要有矩阵键盘和独立键盘扫描程序的设计,人机交互界面采用1602液晶做菜单显示器,设计到显示菜单程序的编写。

调试及其结果分析,其中包括界面设置,调试记录以及结果分析三个方面,对软件程序进行调试和完善,实现步进电机插补原理。

3硬件设计原理

3.1硬件结构

步进电机通过51单片机进行控制,进而进行数模转换,由伺服电机驱动电路驱动伺服电机,带动工作台进行逐步比较插补,逐步逼近给定轨迹。

流程如图3.1所示。

随着集成电路技术的发展,开环数字程序控制得到了广泛的应用,如各类数控机床、线切割机低速小型数字绘图仪等,它们都是利用开环数字程序控制原理实现控制的设备。

其结构亦如图3-1所示。

这种结构没有反馈检测元件,工作台由步进电机驱动。

步进电机接收驱动电路发来的指令作相应的运动,把刀具移动到与指令脉冲相当的位置,至于刀具是否到达了指令脉冲规定的位置,它不作任何检查,因此这种控制的可靠性和精度基本上由步进电机和传动装置来决定。

图3-2为两台三相步进电机控制接口示意图,选定由单片机的P2.0、P2.1、P2.2通过驱动电路来控制x轴步进电机,由P2.3、P2.4、P2.5通过驱动电路来控制y轴步进电机,并假定数据输出为“1”时,相应的绕组通电;数据输出为“0”时,相应绕组断电。

步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

通过控制脉冲个数即

可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

以下为步进电机三相六拍工作方式,其输出字表如表3-1。

表3-1步进电机三相六拍工作方式输出字表

x轴步进电机输出字表

Y轴步进电机输出字表

存储地址标号

P3口输出字

存储地址标号

P3口输出字

ADX1

00000001=01H

ADY1

00001000=08H

ADX2

00000011=03H

ADY2

00011000=18H

ADX3

00000010=02H

ADY3

0001000=10H

ADX4

00000110=06H

ADY4

00110000=30H

ADX5

00000100=04H

ADY5

0010000=20H

ADX6

00000101=05H

ADY6

00101000=28H

3.2硬件电路图

图3-3硬件电路原理图

3.3硬件原理

本次课程设计内容为设计一个51单片机控制步进电机系统,该系统利用单片机机的I/O口输出控制信号,其信号驱动后控制X、Y两个方向的三相步进电机转动,利用逐点比较法插补绘制出第一象限逆圆弧。

逐点比较法是以阶梯折线来逼近直线或圆弧等曲线,它与规定的加工直线或圆弧之间的最大误差为一个脉冲当量,因此只要把脉冲当量(每走一步的距离即步长)取得足够小,就可以达到精度的要求。

以下为课程设计要求插补的第一象限逆圆弧。

图3-4为第一象限逆圆弧。

 

图3-4第一象限逆圆弧

以下就以第一象限为例进行分析。

(1)偏差计算公式

设要加工逆圆弧AB,圆心在原点,起点坐标A(x0,Y0),终点坐标(xe,Ye),半径R。

瞬时加工点M(xm,Ym),它距圆心Rm,则可用R与Rm来反映偏差。

由图3-2可知:

由此定义偏差公式为:

若Fm=0,M点在圆弧上;

若Fm>0,M点在圆弧外;

若Fm<0,M点在圆弧内。

第一象限逆圆弧的插补原理是:

从圆弧起点出发,若Fm>=0,沿-X方向走一步,并计算新偏差;当Fm<0时,沿+Y方向走一步,并计算新偏差。

如此一步一步计算与进给,并在到达终点时停止计算。

但以上Fm计算式比较复杂,可以考虑用递推公式:

(Xm和Ym均取绝对值运算)

1当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)插补计算过程

圆弧插补计算比直线插补计算过程要多一个环节,即要计算加工瞬时坐标。

故圆弧插补计算为五个步骤即偏差判断、坐标进给、偏差计算、坐标计算、终点判断。

通过以上的分析计算,可以得出以下四个象限的顺圆弧(SR)和逆圆弧(NR)的圆弧插补计算公式和进给方向。

其插补进算公式及其进给方向如表3-2所示。

表3-2圆弧插补计算公式和进给方向

偏差

圆弧种类

进给方向

偏差计算

坐标计算

Fm≥0

SR1、NR2

-Y

Fm+1=Fm-2Ym+1

Xm+1=Xm

Ym+1=Ym-1

SR3、NR4

+Y

NR1、SR4

-x

Fm+1=Fm-2Xm+1

Xm+1=Xm-1

Ym+1=Ym

NR3、SR2

+x

Fm<0

SR1、NR4

+x

Fm+1=Fm+2Xm+1

Xm+1=Xm+1

Ym+1=Ym

SR3、NR2

-x

NR1、SR2

+Y

Fm+1=Fm+2Ym+1

Xm+1=Xm

Ym+1=Ym+1

NR3、SR4

-Y

由于本次课程设计的设计要求为第一象限逆圆弧,以逆圆弧为例分析,通过以上计算结果分析,通过绘图,的出相应四个象限圆弧插补的对称关系。

以下为四个象限圆弧插补的对称关系,当Fm大于等于零或者小于零时,分别对应的偏差判别,偏差计算,进给方向,坐标计算等等。

以下为根据表3-2得出的相应四个象限的插补对应关系,从图中可以推出其对应的具体进给方向,如图3-4所示。

图3-5四个象限逆圆弧插补的对称关系

4软件系统

4.1软件思想

本次课程设计圆弧插补控制系统实时调试采用51单片机做主控制器,使用矩阵键盘、独立键盘和1602液晶达到人机交互、坐标输入和插补信息实时显示的目的,软件的设计制作包括如下几方面:

1.矩阵键盘扫描和键值显示函数

2.独立键盘扫描和坐标设置及插补信息显示菜单函数

3.插补计算函数。

4.步进电机驱动运行函数。

4.2流程图

主程序的流程图如下:

 

N

 

按键子程序如下:

有功能按键按下

Y

Y

Y

Y

Y

NN

NN

YY

Y

N

Y

 

图3-6下位机调试软件设计流程图

4.3源程序

如附录所示

5调试记录及结果分析

5.1硬件调试界面设置

1602液晶显示界面设置

KEY1按键设置起始点坐标,KEY2清零起始点坐标和键值。

图5-1坐标输入界面设置

5.2调试记录

插补过程信息显示调试

实验说明:

KEY1按键设置起始点坐标,KEY2清零起始点坐标和键值,KEY3插补开始按键,KEY4插补暂停,KEY5插补停止。

图5-3通过设置键设置起点和终点坐标并实时显示在1602液晶屏上

图5-2插补信息和进给方向实时显示在液晶屏上

5.3结果分析

通过以上界面设置,通过相应参数输入,首先进行起点坐标输入,包括起点x轴坐标输入及其y轴坐标输入,进而进行终点坐标输入,其中包括终点x轴坐标输入及其y轴坐标输入。

进而进行圆弧插补计算并显示进给方向。

以上图5-2所示步进电机插补过程调试,在插补中实现起点坐标为(2,1),终点坐标为(2,5)的圆弧插补。

最终经1602液晶屏显示插补信息得,进给方向依次为+Y,+X,+X,+Y,+Y,-X,+Y,-X。

下面再理论分析进给方向是否正确:

根据步进电机插补原理,偏差判别是为:

该圆弧为第一象限圆弧,第一象限圆弧插补Fm判别式,有如下关系:

1.当Fm≥0时,Xm+1=Xm-1

Ym+1=Ym

Fm+1=Fm-2Xm+1

2.当Fm<0时,Xm+1=Xm

Ym+1=Ym+1

Fm+1=Fm+2Ym+1

由起点及其终点,可得终点判断Nxy=8,另外令圆心(2,3)为新建坐标系原点,可得一下圆弧插补过程,如表5-1所示。

表5-1圆弧插补计算过程

步数

偏差判别

坐标进给

象限判断

坐标计算

偏差计算

终点判断

起点

X0=0,Y0=|-2|

F0=0

Nxy=8

1

Fo=0

+Y

Y1=Y0-1=1,X1=0

F1=F0-2Y0+1=-3

Nxy=7

2

F1=-1<0

+X

X2=X1+1=1,Y2=1

F2=F1+2X1+1=-2

Nxy=6

3

F2=-2<0

+X

X3=X2+1=2,Y3=1

F3=F2+2X2+1=1

Nxy=5

4

F3=1>0

+Y

X4=2,Y4=Y3-1=0

F4=F3-2Y3+1=0

Nxy=4

5

F4=0

+Y

X5=2,Y5=Y4+1=1

F5=F4-2Y4+1=1

Nxy=3

6

F5=1>0

-X

X6=X5-1=1,Y6=1

F6=F5-2X5+1=-2

Nxy=2

7

F6=-2<0

+Y

X7=1,Y7=Y6+1=2

F7=F6+2Y6+1=1

Nxy=1

8

F7=1>0

-X

X8=X7-1=0,Y8=2

F8=F7-2X7+1=0

Nxy=0

根据以上圆弧插补过程和进给方向,可知单片机实现的圆弧插补控制系统实现了完整并且正确的圆弧插补过程。

6心得体会

微机控制原理技术是一门综合性的课程,任何一个计算机系统都是一个复杂的整体,学习微机控制原理是要涉及到整体的每一部分。

通过讨论其控制原理时又要涉及到各部件之间控制的工作原理,不仅较深入理解计算机控制的工作原理。

所以,在循序渐进的课堂教学过程中,我有时候会处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。

学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微机基本原理的同时,必须学会各种控制技术的应用,其创造性劳动在于如何用计算机的有关技术实现计算机的控制,设计实用的电路和系统,再配上相应的应用程序,完成各种控制应用项目。

这次课程设计并不是很难,主要的困难来自对单片机按键程序的处理和1602菜单显示界面的设计。

功夫不负有心人,经过团队中2个人的合作和努力,最后对实验的原理有了更清晰的认识。

虽然设计中并的功能并不是十分完善,但是就系统功能来说,基本完成了课程设计要求。

但是通过平时课程的学习,又通过本次课程设计对它的再一次认真努力学习和操作,巩固了该门课程的知识和应用,对我们以后的学习也会有帮助的。

本次还遇到一个困难,便是对于上位机开发VB使用的不熟悉。

对于VB的应用,仅仅限于大学一年级的简单学习,这次课程设计中对于步进电机的软件仿真,VB中的很多不懂的地方,通过看书学习和向同学请教,实现了圆弧插补的上位机仿真软件设计。

本次课程设计的过程中,对于VB的再一次重温和理解,相信对于今后的学习也有很大的帮助。

至于下位机(单片机)调试的过程中花了很多时间,由于本课程涉及到很多按键,又有很多显示内容,所以在硬件的选型上就花费了一些时间,后期的按键和1602显示程序的调试也花费了不少功夫才把显示菜单和按键功能的程序调试出来。

总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机控制原理课程上讲到的各种控制技术,本次设计尤其深入了对步进电机插补原理的理解,熟悉了VB程序的编写过程和51单片机人机界面程序的编写、运行过程,最后还提高了自己的动手能力。

7参考资料

[1]郑学坚,周斌微型计算机原理与应用清华大学出版社

[2]于海生微型计算机控制技术清华大学出版社

[3]沈美明,温冬婵IBM-PC汇编语言程序设计清华大学出版社

[4]何立民单片机应用系统设计北京航空航天大学出版社

附录:

附件一

下位机调试(单片机)主程序清单

/*******************************************************************************

*

*东华理工大学

----------------------------------------------------------------------------------------------------------------------

*实验名:

逐点比较插补控制1602显示

*实验说明:

KEY1按键设置起始点坐标,KEY2清零起始点坐标和键值,KEY3插补开始按键,KEY4插补暂停

*连接方式:

见连接图

*注意:

*******************************************************************************/

/*******************************************************************************

*

*东华理工大学

--------------------------------------------------------------------------------

*实验名:

逐点比较插补控制1602显示

*实验说明:

KEY1按键设置起始点坐标,KEY2清零起始点坐标和键值,KEY3插补开始按键,KEY4插补暂停

*连接方式:

见连接图

*注意:

*******************************************************************************/

#include

#include"lcd.h"

#include"math.h"

//--定义使用的IO口--//

#defineGPIO_KEYP1

sbitK1=P2^0;//设置起始点坐标按键

sbitK2=P2^1;//坐标清零按键

sbitK3=P2^2;//插补开始按键

sbitK4=P2^3;//插补暂停按键

sbitK5=P2^4;//插补停止按键

//--定义全局变量--//

unsignedcharR;//圆弧半径设置为变量

unsignedcharPuZh[13]="keyvalueis:

";

unsignedcharPuZi[16]="S:

X0Y0E:

X0Y0";

unsignedcharPuZj[16]="Times:

";

unsignedcharKeyValue,STx,STy,EDx,EDy;//键值变量,起始坐标和终点坐标变量设置

unsignedcharflag=0,flag_Chabu;

//用来存放读取到的键值

unsignedchark1num=0;//存放按键K1按下的次数,初始化为0

//--声明全局函数--//

voidNumberKeyScan(void);//(数字)矩阵按键扫描函数

voidMenuKeyScan(void);//(菜单)独立按键扫描函数

voidDelay10ms(unsignedintc);//10毫秒延时函数,误差0us

voidMotorStart(void);//插补显示控制函数

voidBanyuanChabu_Count(unsignedcharSTx,unsignedcharSTy,unsignedcharEDx,unsignedcharEDy);//插补计算函数

/*******************************************************************************

*函数名:

main

*函数功能:

主函数

*输入:

*输出:

*******************************************************************************/

voidmain(void)

{

unsignedchari;

LcdInit();

LcdWriteCom(0x80);

for(i=0;i<12;i++)

{

LcdWriteData(PuZh[i]);

}

LcdWriteCom(0x80+0x40);

for(i=0;i<15;i++)

{

LcdWriteData(PuZi[i]);

}

while

(1)

{

NumberKeyScan();//按键键值扫描计算函数

MenuKeyScan();//菜单按键扫描函数

}

}

/*******************************************************************************

*函数名:

NumberKeyScan

*函数功能:

检测有按键按下并读取键值

*输入:

*输出:

*******************************************************************************/

voidNumberKeyScan(void)

{

unsignedchari=0;

chara=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!

=0x0f)//读取按键是否按下

{

Delay10ms

(1);//延时10ms进行消抖

if(GPIO_KEY!

=0x0f)//再次检测键盘是否按下

{

//测试列

GPIO_KEY=0X0F;

switch(GPIO_KEY)

{

case(0X07):

KeyValue=0;break;

case(0X0b):

KeyValue=4;break;

case(0X0d):

KeyValue=8;break;

case(0X0e):

KeyValue=12;break;

}

//测试行

GPIO_KEY=0XF0;

switch(GPIO_KEY)

{

case(0X70):

KeyValue=KeyValue+3;break;

case(0Xb0):

KeyValue=KeyValue+2;break;

case(0Xd0):

KeyValue=KeyValue+1;break;

case(0Xe0):

KeyValue=KeyValue;break;

}

while((a<50)&&(GPIO_KEY!

=0xf0))//检测按键松手检测

{

Delay10ms

(1);

a++;

}

}

}

if(flag==0)

{

LcdWriteCom(0x80+13);//设置键值显示坐标

if(KeyValue<10)

{

LcdWriteData('0'+KeyValue);

}

else

{

LcdWriteData('7'+KeyValue);//A的ASCII码的前10位是7,所以用7做基数

}

}

}

voidMenuKeyScan(void)

{

unsignedchari=0;

if(K3==0)

{

Delay10ms

(1);

if(K3==0)//确认插补开始键按下

{

while(!

K3);//按键释放

flag_Chabu=0;//插补停止标志位清零

LcdWriteCom(0x01);

flag=1;

MotorStart(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2