基于FPGA的逐点比较圆弧插补算法设计

更新时间:2024-04-27 07:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

二 ○ 一 三 届 毕 业 设 计

基于FPGA逐点比较圆弧插补算法设计

学 院:电子与控制工程学院 专 业:电子科学与技术 姓 名:…….. 学 号:……… 指导教师:…….. 完成时间:2013年5月

二〇一三年五月

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

摘 要

摘 要

本课题主要是研究基于VHDL实现数控系统中的逐点比较圆弧插补,要求圆弧运动过程平滑,在各象限能顺利过渡,并有较小的设计误差,能与运动控制部分很好的集成,实现较高的切割频率。

本课题采用QuartusII软件来调试程序,并进行波形仿真。主要的工作如下: 1) 理解数控系统中逐点比较圆弧插补算法的原理及其实现方法; 2) 通过硬件描述语言VHDL在FPGA上实现上述算法; 3) 完成圆弧插补的仿真与测试。

关键词:VHDL,FPGA,逐点比较法,QuartusII

I

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

ABSTRACT

ABSTRACT

This topic mainly studies based on VHDL realization of point by point comparison circular arc interpolation in nc system, the movement for arc process smooth, in each quadrant can smooth transition, and a relatively small design error, can very good integration with motion control part, realize the high frequency of cutting.

This subject adopts software QuartusII to debug program and waveform simulation. The main work is as follows:

1. Understand CNC system the principle of point by point comparison in circular arc interpolation algorithm and its realization method

2. Through the hardware description language VHDL FPGA to realize the above algorithms.

3. Finish arc interpolation of simulation and test

KEY WORDS: VHDL, FPGA, point-by-point comparison, QUARTUS II

II

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

目录

目录

摘 要 .................................................................. I ABSTRACT .............................................................. II 第一章 绪论 ........................................................... 1

1.1概述 ............................................................ 1 1.2国内外发展状况 ................................. 错误!未定义书签。 1.3 FPGA的优点 .................................... 错误!未定义书签。 1.4 FPGA的设计流程 ................................ 错误!未定义书签。 第二章 设计方案选择 ................................................... 4

2.1各种方案的特点 .................................................. 4 2.2方案选择 ........................................................ 4 第三章 逐点比较法原理 ................................................. 5 3.1逐点比较圆弧插补原理 ............................................ 5 3.2圆弧插补的运算过程 .............................................. 6 3.3节拍控制和运算程序的流程图 ...................................... 7 3.4圆弧插补的象限处理与坐标交换 .................................... 7

3.4.1圆弧插补的象限处理 ........................................ 7 3.4.2圆弧自动过象限 ............................................ 8

第四章 圆弧插补算法VHDL实现 .......................................... 8

4.1圆弧插补逻辑状态 ............................................ 9 4.2圆弧插补方向进给 ........................................... 11 4.3圆弧插补VHDL仿真 .......................................... 11 4.4四象限圆弧插补 ............................ 1错误!未定义书签。

第五章 总结与展望 .................................................... 14 致谢 .................................................................. 16 参考文献 .............................................................. 17

III

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第一章 绪论2010届毕业设计6月7日修改版

第一章 绪论

1.1 概述

逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。逐点比较法既可以作直线插补又可以作圆弧插补。这种算法的特点是,运算直观,插补误差小于一个脉冲当量,输出脉冲均匀,而且输出买成速度变化小,调节方便,因此在两坐标数控机床中应用较为普遍。

在零件加工中,理想加工轨迹是刀具中心轨迹应与零件轮廓形状一致,但实际应用时往往用一小段直线或圆弧去逼近,从而使得控制算法简单,计算量减小。插补算法是确定刀具中心运动轨迹的计算方法;插补计算就是对数控系统输入基本数据(如直线的起点、终点的坐标,圆弧的起点、终点、圆心的坐标等)运用一定的插补算法计算,计算结果可用来图形仿真或作为刀的进给数据。目前插补算法有很多种,与其它插补方法相比,逐点比较法是一种控制算法简单、进给速度控制方便的插补算法。逐点比较法插补既可以作直线插补,又可作圆弧插补。

本文将介绍逐点比较法圆弧插补的基本原理,并进行相应的仿真,使其能很好的应用到FPGA上。

1.2 国内外发展现状

目前数控系统所使用的插补器多为软件插补器,软件插补器虽然有很多优点,但软件插补受计算机软件运算速度限制,插补的速度、精度等性能指标难以满足高速实时控制的要求,并已经逐渐成为制约数控加工速度的瓶颈。对于超高速加工场合,随着数控设备中关键功能部件(直线进给伺服单元、大功率电主轴和陶瓷轴承等)的技术突破,如果继续采用全软件方法来实现数控加工功能,其速度和加工效率将无法得到进一步提高。

在数字计算机系统、数控机床、数字控制系统、数字测量系统等领域中,FPGA(FieldProgrammable Gate Array现场可编程门阵列)技术的应用同益广泛。FPGA器件及其开发系统是开发大规模数字集成电路的新技术,它将现代T24U逻辑集成的

共 25 页 第 1 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第一章 绪论2010届毕业设计6月7日修改版

优点和可编程器件设计灵活,制作及上市快速的长处相结合,使设计者在FPGA开发系统软件的支持下,现场直接根据系统要求定义和修改其逻辑功能,使一个包含数千个逻辑门的数字系统设计实现,采用FPGA技术,即可几天内完成。用FPGA技术使得电子系统设计发展到系统芯片化的新时代,FPGA技术为电子系统设计提供了新的思路和方法。

开放式、可重构是目前数控系统的主要发展趋势。随着深亚微米集成电路制造工艺的成熟,可编程逻辑器件和硬件描述语言的广泛应用,使个人用户开发定制硬逻辑运动控制功能芯片成为可能。特别是近几年兴起的基于硬件复用技术的SoC(System onChip:片上系统)设计方法,以其快速的产品上市时间、良好的功能可配置性日益成为IC(集成电路)设计的重要方法。

1.3 FPGA的优点

FPGA芯片是特殊的ASIC芯片,它除了具有ASIC的特点之外,还具有以下几个优点: 随着VISI(Very Large Scale IC,超大规模集成电路)工艺的不断提高单一芯片内部可以容纳上百万个晶体管,FPGA芯片的规模也越来越大,其单片逻辑门数已达到上百万门,它所能实现的功能也越来越强,同时也可以实现系统集成。

FPGA芯片在出厂之前都做过百分之百的测试,不需要设计人员承担投片风险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片的最终功能设计。所以,FPGA的资会投入小,节省了许多潜在的花费。

用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。所以,用FPGA试制样片,能以最快的速度占领市场。FPGA软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直至最后芯片的制作。当电路有少量改动时,更能显示出FPGA的优势。电路设计人员使用FPGA进行电路设计时,不需要具备专门的IC(集成电路)深层次的知识,FPGA软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。

1.4 FPGA的设计流程

完整的FPGA设计流程包括电路设计与输入、功能仿真、综合、综合后仿真、实现、布线后仿真与验证、板级仿真验证与调试等主要步骤。 (1)电路设计与输入

电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给EDA工

共 25 页 第 2 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第一章 绪论2010届毕业设计6月7日修改版

具。常用的设计输入方法有硬件描述语言(HDL)和原理图设计输入方法等。大型工程设计时,最常用的设计方法是HDL设计输入法。特点是利于由顶向下设计,利于模块的划分与复用,可移植性好,通用性好,设计不因芯片的工艺与结构的不同而变化,更利于#]ASIC的移植。波形输入和状态机输入方法是两种常用的辅助设计输入方法。(2)功能仿真

电路设计完成后,要用专用的仿真工具对设计进行功能仿真,验证电路功能是否符合设计要求。功能仿真有时也被称为前仿真。通过仿真能及时发现设计中的错误,加快设计进度,提高设计的可靠性。 (3)综合优化

综合优化(Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的逻辑连接,输出edf年Iledn等标准格式的网表文件,供FPGA/CPLD厂家的布局布线器进行实现。 (4)综合后仿真

综合完成后需要检查综合结果是否与原设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。综合后仿真只能估计门延时,不能估计线延时,仿真结果与布线后的实际情况还有一定的差距。这种仿真的主要目的在于检查综合器的综合结果是否与设计输入一致。在功能仿真中介绍的仿真工具一般都支持综合后仿真功能。 (5)实现与布局布线

在实现过程中最主要的过程是布局布线(PAR,PlaceAnd Route):所谓布局(Place)是指将逻辑网表中的硬件原语或者底层单元合理地适配到FPGA内部的固有硬件结构上,所谓布线(Route)是指根据布局的拓朴结构,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程。 (6)时序仿真与验证

将布局布线的时延信息反标注到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,简称后仿真。布局布线之后生成的仿真时延文件包含的时延信息最全,不仅包含门延时,还包含实际布线延时,所以布线后仿真最准确,能较好地反映芯片的实际工作情况。通过布局布线后仿真能检查设计时序与FPGA实际运行情况是否一致,确保设计的可靠性和稳定性。布局布线后仿真的主要目的在于发现时序违规(TimingViolation)。在功能仿真中介绍的仿真工具一般都支持布局布线后仿真功能。 (7)板级仿真与验证

共 25 页 第 3 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第二章 设计方案选择2010届毕业设计6月7日修改版

在有些高速设计情况下还需要使用第三方的板级验证工具进行仿真与验证,如Mentor Tau、Forte Design-Timing Designer、Mentor Hyperlynx、Mentor ICX,CadenceSPECCTRAQuest、Synopsys HSPICE。这些工具通过对设计的IBIS、HSPICE等模型的仿真,能较好地分析高速设计的信号完整性、电磁干扰(EMI)等电路特性等。 (8)调试与加载配置

设计开发的最后步骤就是在线调试或者将生成的配置文件写入芯片中进行测试。任何仿真或验证步骤出现问题,就需要根据错误的定位返回到相应的步骤更改或者重新设计。

第二章 设计方案选择

2.1 各种方案的特点

第一:采用逐点比较法插补。逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。逐点比较法既可以作直线插补又可以作圆弧插补。这种算法的特点是,运算直观,插补误差小于一个脉冲当量,输出脉冲均匀,而且输出买成速度变化小,调节方便,因此在两坐标数控机床中应用较为普遍。

第二:数学积分法插补。又称为微分分析法。这种插补方法可实现一次、二次、甚至高次曲线的插补,也可以实现多坐标联动控制。只要输入不多的几个数据,就能加工出圆弧等形状较为复杂的轮廓曲线。作直线插补时,脉冲分配也较均匀。

第三:数据采样插补。数据采样插补实际上是一种粗插补过程,它所产生的微小线段仍然比较大,必须进一步对其密化(即精插补)。粗插补算法比较复杂,大多用高级语言编制;精插补算法比较简单,多用汇编语言或硬件插补器实现。

2.2 方案选择

根据课题要求,对逆圆插补。根据两种方案的比较,都是很好的方法,但由于圆是二次,采用逐点比较法插补进行设计比较方便、简单,所以根据各种插补方法的特点,选择用逐点比较法来实现。

共 25 页 第 4 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第三章 逐点比较法原理2010届毕业设计6月7日修改版

第三章 逐点比较法原理

3.1 逐点比较法圆弧插补原理

加工一个圆弧,很容易令人想到用加工点到圆心的距离与该圆弧的名义半径相比较来反映加工偏差。设要加工图3-1所示的第一象限逆时针走向的圆弧AB,半径为R,以圆点为圆心,起点坐标为A(x0,

y0),在xy坐标平面第一象限中,点

的加工偏差有以下3种情况。若

P(xi,yj)加工点P(xi,yj)正好落在圆弧上,则下式成立,即

xi?y22j?x0?y0?R222

若加工点P(xi,yj)落在圆弧外侧,则RPxi?yj?x0?y02222?R,即

?R若加工点P(xi,yj)落在圆弧内侧,则RPxi?yj?x0?y02222,即

将上面各式分别改写为下列形式,即

(xi?yj)?(x0?y0)?0(xi?yj)?(x0?y0)?0(xi?yj)?(x0?y0)?0222222222222 (在圆弧上) (在圆弧外侧) (在圆弧外侧)

取加工偏差判别式为

Fi,j?(xi?yj)?(x0?y0)

2222

共 25 页 第 5 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第三章 逐点比较法原理2010届毕业设计6月7日修改版

若点P(xi,yj)在圆弧外侧或圆弧上,则满足Fi,j?0的条件时,向x轴发出一负向

?0运动的进给脉冲(??x);若点P(xi,yj)在圆弧内测,即满足条件Fi,j的条件时,则

向y轴发出一正向运动的进给脉冲(??y)。为了简化偏差判别式的运算,仍用递推法来推算下一步新的加工偏差。

设加工点P(xi,yj)在圆弧外侧或圆弧上,则加工偏差为

Fi,j?(xi?yj)?(x0?y0)?02222

故x轴必须向负方向进给一步(??x),移动到新的加工点P(xi?1,yj),其加工偏差为

Fi?1,j?(xi?1)?x0?yj?y0?xi?2xi?1?yj?y0?x022222222

?Fi,j?2xi?1????????????????(3-1)

设加工点P(xi,yj)在圆弧的内测,则Fi,j移到新的加工点P(xi,yj?1),其加工偏差为

那么?0。y轴须向正向进给一步(??y),

Fi?1,j?xi?x0?(yj?1)?y0?xi?x0?yj?2yj?1?y022222222

?Fi,j?2yi?1????????????????(3-2)

新的加工点的偏差值可以用前一点的偏差值递推出来。递推法把圆弧偏差运算式由平方运算化为加法和乘2运算,而对二进制来说,乘2运算是容易实现的。

3.2 圆弧插补的运算过程

圆弧插补的运算过程与直线插补的过程基本一样,不同的是,圆弧插补时,动点坐标的绝对值总是一个增大,另一个减小。如对于第一象限逆圆来说,动点坐标的增量公式为

xi?1?xi?1 yi?1?yi?1

圆弧插补运算每进给一步也需要偏差判别、进给、偏差计算、终点判别四个工作节拍,运算中F寄存偏差值为Fi,j;x和y分别寄存x和y动点的坐标值,开始分别存放x0和y0;n寄存终点判别值:n?xe?x0?ye?y0

共 25 页 第 6 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第三章 逐点比较法原理2010届毕业设计6月7日修改版

3.3 节拍控制和运算程序的流程图

圆弧插补的节拍控制:综上所述,逐点比较法圆弧插补的全过程,每走一步都要进行以下四个节拍,如图所示。第一节拍——偏差判别:判断道具当前位置相对于给定的轮廓的偏差情况,以此决定道具移动的方向;

第二节拍——进给:根据偏差判断结果,控制道具相对于工件轮廓进给一步,即向给定的轮廓靠拢,减小偏差;

第三节拍——偏差计算:由于道具进给已经改变了位置,因此应计算出道具当前位置的新偏差,为下次判别做准备;

第四节拍——终点判别:判别刀具是否已到达被加工轮廓的终点。若已经到达终点,则停止插补;若还未到达终点则继续插补。如此不断重复上述四

个节拍就可以加工出所要加工的轮廓。

3.4圆弧插补的象限处理与坐标交换

3.4.1圆弧插补的象限处理

上面仅讨论了第一象限的逆圆弧插补,实际上圆弧所在的象限不同,顺逆不同,则插补公式和进给方向均不同。逆圆插补有四种情况,如右图所示

现将逆圆弧插补的四种情况的偏差计算及进给方向列于表3-1中,其中R表示圆弧,N表示逆时针,四个象限分别用数字1、2、3、4标注,例如NR1表示第一象限逆圆。

表3-1 xy平面内逆圆插补的进给方向与偏差计算

线型 NR1 偏差 F?0 偏差计算 F←F+2x+1 进给方向与坐标 ??x

共 25 页 第 7 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第四章 圆弧插补算法VHDL实现2010届毕业设计6月7日修改版

NR1 NR2 NR2 NR3 NR3 NR4 NR4 F?0F?F?F?F?F?F? 0 0 0 0 0 0 x←x+1 F←F-2x+1 x←x-1 F←F+2y+1 y←y+1 F←F-2y+1 y←yx-1 ??x??y ??y3.3.2圆弧自动过象限

所谓圆弧自动过象限,是指圆弧的起点和终点不在同一象限内,如图3-4所示。为实现一个程序段的完整功能,需设置圆弧自动过象限功能。

要完成过象限的功能,首先应判别何时过象限。过象限有一显著特点,就是过象限时刻正好是圆弧与坐标轴相交的时刻,因此在两个坐标值中必有一个为零,判断是否过象限只要检查是否有坐标值为零即可。

过象限后,圆弧线型也改变了,但过象限时象限的转换是有一定规律的。当圆弧起点在象限时,逆时针圆弧过象限后转换顺序NR1→NR2→NR3→NR4→NR1,每过一次象限,象限顺序号加1,当从第四象限向第一象限过象限时,象限顺序号从4变为1。

3-4圆弧过象限

第四章 圆弧插补算法VHDL实现

逐点比较法第Ι象限圆插补计算流程图如图4.1所示:

共 25 页 第 8 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第四章 圆弧插补算法VHDL实现2010届毕业设计6月7日修改版

图4.1 逐点比较法第Ι象限圆插补计算流程图

4.1 圆弧插补逻辑状态

在VHDL脉冲输出真值表4-1

CLK clk'event and clk='0' clk'event and clk='0' F<0 无脉冲 有脉冲 F F>=0 CPX 有脉冲 CPY 无脉冲 脉冲输出状态表示如4.2图所示:

共 25 页 第 9 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第四章 圆弧插补算法VHDL实现2010届毕业设计6月7日修改版

图4.2圆弧插补状态图

结束 是 进行X轴方向进给,计算偏差函数 否 F>=0 否 进行Y轴方向进给,计算偏差函数 判断插补步数是否等于总步数 计算插补步长,初始化偏差F 将clk分频赋值给pul 开始 触发clk 触发P1进程,判断象限 触发pul进程 是 程序中,p1:process(g,clck)为进程语句,clk为敏感变信号,敏感信号有事件发生时,进程中的顺序语句都会按照他们出现的顺序执行。

程序中我设置了clk时钟输入口,还设置了变量clck,clk经分频处理后赋值给clck。DIR:='0'时表示为逆圆,DIR:='1'时则表示为顺圆。clck'event and clck='1'表pul上升沿,'EVENT是信号预定义属性,表示有事件发生,clck'event and clck='1'为clck发生变化且clck=1,从而实现clck的上升沿,clck为上升沿有效。

这里定义变量xcp,ycp分别表示X轴和Y轴的方向进给,分别对应cpx,cpy。

共 25 页 第 10 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第四章 圆弧插补算法VHDL实现2010届毕业设计6月7日修改版

其中cpx代表X轴方向进给,cpy代表Y轴方向进给。F是整型数,代表偏差函数寄存器,用来存放偏差值,当F>0时,(1)DIR:='0'时为逆圆计算公式,-X方向进给一个脉冲,(2)DIR:='1'时为顺圆计算公式,-Y方向进给一个方向;当F<0时,(1)DIR:='0'时为逆圆计算公式,+Y方向进给一个方向(2)DIR:='1'时为顺圆计算公式,+X方向进给一个脉冲。

r、s代表的是动态的X,Y坐标,也是整型数,主要用来存放插补时插补点的坐标,动点坐标是变化的,要不断修正坐标值并存入寄存器中。

p2进程程序是将clk分频的程序,用于消除毛刺。

以上程序插补算法是根据逐点比较法的原理来设计,圆弧插补分为四个象限通过观察,逐点比较法四象限的插补之间具有共同点。其它三个象限都可以和第一象限联系起来,所以在设计四象限圆弧是可以参照第一象限圆弧的插补算法。

程序增加了一个中间常量,用来存放中间CPU送入的直线终点坐标值,再通过判别CPU送入的坐标的象限,来修正坐标,把它对应到第一象限中进行插补运算,再输出脉冲。

4.2 圆弧插补方向进给

表4-2 四象限圆弧插补偏差计算与进给方向

线型 SR1 NR2 SR3 NR4 NR1 SR2 NR3 SR4 F=F-2|X|+1 |X|=|X|-1 F=F-2|Y|+1 |Y|=|Y|-1 F≥0 偏差计算 坐标进给 -ΔY -ΔY +ΔY +ΔY -ΔX +ΔX +ΔX -ΔX F=F+2|Y|+1 |Y|=|Y|+1 F=F+2|X|+1 |X|=|X|+1 偏差计算 F<0 坐标进给 +ΔX -ΔX -ΔX +ΔX +ΔY +ΔY -ΔY -ΔY 4.3圆弧插补VHDL仿真

共 25 页 第 11 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第四章 圆弧插补算法VHDL实现2010届毕业设计6月7日修改版

4.3 第一象限逆圆弧插补VHDL仿真

VHDL程序编写完成后,对其进行编译,将文件置顶后选择“Start Compilation”,编译无误后进行波形仿真,仿真前要先建立仿真波形。

1) 在File菜单中选择“New”选项,然后选择“Vector Waveform File”,弹出一个.vwf的文件,在“Name”下右击选择“Insert Node...”,再按“Node Finder”,找到需要的输入输出量后,选择向右箭头,单击“List”生成仿真窗口。

2) 从Edit菜单中选择“End Time”,设置欲仿真的时间长度。 3) 在编辑波形窗口,根据需要来编辑波形,对信号进行赋值。 4) 保存在相应文件夹后,点击“Start Simulation”仿真开始。

当g脉冲出现第一个上升沿时,程序初始化首先修改写入的坐标值,都取绝对值,对应到第一象限上来,计算插补总步数。当clk时钟信号上升沿来时,触发p3进程,将clk信号分频,引入变量pul来触发p2进程,判断插补是否结束,判断num是否等于总插补步数,如果不相等则进行插补运算,先修改偏差函数,输出插补脉冲,以此类推得出插补波形。

以图4.3为例,插补起点坐标(8,6),插补终点坐标(6,8),XS表示起点X轴坐标,YS表示起点Y轴坐标,XE表示终点X轴坐标,YE表示终点Y轴坐标,首先F=0,X方向进给一个脉冲,num加一,修正F,当下一个clk上升沿到来时F<0,Y方向进给一个脉冲,以此类推,圆弧插补总共插补了4步,结果符合理论的结果。

5.5 四象限圆弧插补

VHDL程序编写完成后,对其进行编译,将文件置顶后选择“Start

共 25 页 第 12 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第四章 圆弧插补算法VHDL实现2010届毕业设计6月7日修改版

Compilation”,编译无误后进行波形仿真,仿真前要先建立仿真波形。

1) 在File菜单中选择“New”选项,然后选择“Vector Waveform File”,弹出一个.vwf的文件,在“Name”下右击选择“Insert Node...”,再按“Node Finder”,找到需要的输入输出量后,选择向右箭头,单击“List”生成仿真窗口。

2) 从Edit菜单中选择“End Time”,设置欲仿真的时间长度。 3) 在编辑波形窗口,根据需要来编辑波形,对信号进行赋值。 4) 保存在相应文件夹后,点击“Start Simulation”仿真开始。

5.4

第一象限顺圆弧插补VHDL仿真

图第

第三象限逆圆弧插补VHDL仿真

共 25 页 第 13 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第五章总结与展望2010届毕业设计6月7日修改版

第三象限顺圆弧插补VHDL仿真

第五章总结与展望

本课题通过理解数控逐点比较圆弧插补的原理及实现方法,然后再通过硬件描述语言VHDL在FPGA上实现上述算法,完成仿真与测试。在FPGA平台上用逐点比较法来描述了圆弧的插补。在做此课题的过程中,对VHDL语言和数控的圆弧插补等知识有了进一步的了解和运用。但是刚开始时,却是对此了解不多。通过这次毕业设计,有了以往在上课中没有的锻炼机会,比如自己调研,有不懂的都要向老师和组长及时请教,这是大学里为数不多的。

逐点比较法具有鲜明的特点,但是缺点也是一目了然。别的同学因此用了数据采样法,在讨论的过程中发现了自身方法的优劣。

在仿真调试的过程中,软件仿真图中总是会出现毛刺现象,经过探究了解到这是由于赋值过程的延时,这反映了硬件系统的重要特性,说明硬件系统并不是立即发生的,它发生在一个进程结束时。由于在运行程序时存在延迟,造成在下一个时钟脉冲来时中间变量状态还保持原来的状态,所以造成了毛刺现象。为了解决这个问题,引入pul变量,clk时钟信号经过p3进程处理后时钟的频率缩小对原来的一半,再将pul应用到p2进程中来,进行插补运算。

在未处理前存在明显的毛刺,在芯片输出插补脉冲是会造成干扰,影响插补精度,

共 25 页 第 14 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

第五章总结与展望2010届毕业设计6月7日修改版

分频处理能有效的解决这个问题。

综上所述,尽管还有许多不尽人意的地方,但是逐点比较圆弧插补算法任然取得了一些成果,而且整个的研究仍然在继续和进一步深入,相信随着科技的进一步发展,我们还会有更加完备的算法来解决数控中的各种进给问题。

共 25 页 第 15 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

致谢2010届毕业设计6月7日修改版

致谢

本论文是在导师温利民老师的细心指导下完成的,至此论文完成之际,对温老师致以深深的感谢。温老师常识渊博、治学严谨,对研究一丝不苟、对学生高度负责的态度,深深地影响着我的学习和生活,将使我受益终生,这也使我的论文质量得到保证,同时使得我能够及时的完成此论文。

感谢温利民老师在整个毕业设计中给予的我莫大的支持。整个论文的写作过程中,温老师耐心地指导我,帮助我解决遇到的困难;在软件设计的过程中,温老师在经济上给予了很大的支持。

感谢我的父母在生活和经济上的关心和帮助,感谢朋友们多年来的关心和鼓励。 感谢国家自然科学基金(编号:60806043)、中国博士后科学基金 (编号:20090461278)和中央高校基本科研业务费专项基金 (编号:CHD2009JC025)对本课题和论文的大力支持,感谢专家教授们对本论文的评审。

共 25 页 第 16 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

参考文献2010届毕业设计6月7日修改版

参考文献

[1] 改进逐点比较法圆弧插补的研究与仿真_唐慧锋2006 年第22 卷第5-3 期

[2] 基于FPGA的数控数字积分法圆弧插补器的设计与实现_周保廷2005,27(5):16~18 [3] 基于FPGA的数控逐点比较法直线插补数字系统设计与实现( 2001) 06- 0045- 05 [4] 基于FPGA的数字积分法圆弧插补器的设计与实现_陈黎融( 2008) 02) 0058) 03 [5] 基于FPGA的硬圆弧插补器设计_秦兴( 2002) 5- 104- 2 [6] 基于FPGA技术的数控插补器算法改进研究 [7] 基于PC的逐点比较法插补控制程序设计 [8] 逐点比较法第一象限直线圆弧插补 [9] 逐点比较法顺圆弧插补 [10] 逐点比较算法圆弧插补

共 25 页 第 17 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

程序清单

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PUL IS

PORT(G : IN STD_LOGIC;

XE : IN Integer RANGE -32768 TO 32767; YE : IN Integer RANGE -32768 TO 32767; CLK : IN STD_LOGIC; XDIR : OUT STD_LOGIC; YDIR : OUT STD_LOGIC; XP : OUT STD_LOGIC; YP : OUT STD_LOGIC); END PUL;

ARCHITECTURE sample OF PUL IS SIGNAL PUL:STD_LOGIC; SIGNAL XCP:STD_LOGIC; SIGNAL YCP:STD_LOGIC;

SIGNAL XXE: Integer RANGE 0 TO 65535; SIGNAL YYE: Integer RANGE 0 TO 65535; BEGIN

XP<=XCP AND CLK; YP<=YCP AND CLK; P1:PROCESS(XXE,YYE) VARIABLE XXDIR: STD_LOGIC; VARIABLE YYDIR: STD_LOGIC;

VARIABLE TXE: Integer RANGE 0 TO 65535; VARIABLE TYE: Integer RANGE 0 TO 65535; BEGIN

共 25 页 第 18 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

IF XE<0 THEN XXDIR:='1'; TXE:=-XE; ELSE

XXDIR:='0'; TXE:=XE; END IF; IF YE<0 THEN YYDIR:='1'; TYE:=-YE; ELSE

YYDIR:='0'; TYE:=YE; END IF; XDIR<=XXDIR; YDIR<=YYDIR; XXE<=TXE; YYE<=TYE; END PROCESS P1; P2:PROCESS(G,PUL)

VARIABLE xx:Integer RANGE 0 TO 65535; VARIABLE yy:Integer RANGE 0 TO 65535; VARIABLE F:Integer; VARIABLE NUM:Integer; VARIABLE YG:STD_LOGIC; VARIABLE XG:STD_LOGIC; BEGIN

IF G='1' THEN XX:=XXE; YY:=YYE; F:=0;

NUM:=abs(XE)+abs(YE);

共 25 页 第 19 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

elsIF PUL'EVENT AND PUL='1' THEN IF NUM/=0 then IF(F<0)then yy:=yy-1; YG:='1'; XG:='0'; F:=F+XXE; else xx:=xx-1; YG:='0'; XG:='1'; F:=F-YYE; END IF; NUM:=NUM-1; ELSE YG:='0'; XG:='0'; END IF; END IF;

XCP<=XG AND PUL; YCP<=YG AND PUL; END PROCESS P2; P3:PROCESS(CLK)

VARIABLE CP:STD_LOGIC; BEGIN

if CLK'EVENT AND CLK='0' THEN CP:=NOT(CP); END IF; PUL<=CP; END PROCESS P3; END sample;

共 25 页 第 20 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY APUL IS

PORT(G : IN STD_LOGIC;

XS : IN Integer RANGE -32768 TO 32767; YS : IN Integer RANGE -32768 TO 32767; XE : IN Integer RANGE -32768 TO 32767; YE : IN Integer RANGE -32768 TO 32767; CLK : IN STD_LOGIC; XDIR : OUT STD_LOGIC; YDIR : OUT STD_LOGIC; XP : OUT STD_LOGIC; YP : OUT STD_LOGIC); END APUL;

ARCHITECTURE sample OF APUL IS SIGNAL XCP:STD_LOGIC; SIGNAL YCP:STD_LOGIC; SIGNAL CLCK:STD_LOGIC;

SIGNAL XXS: Integer RANGE 0 TO 65535; SIGNAL YYS: Integer RANGE 0 TO 65535; SIGNAL XXE: Integer RANGE 0 TO 65535; SIGNAL YYE: Integer RANGE 0 TO 65535; BEGIN

XP<=XCP AND CLK; YP<=YCP AND CLK;

P1:PROCESS(XXE,YYE,XXS,YYS) VARIABLE XXDIR: STD_LOGIC; VARIABLE YYDIR: STD_LOGIC;

VARIABLE TXS: Integer RANGE 0 TO 65535; VARIABLE TYS: Integer RANGE 0 TO 65535;

共 25 页 第 21 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

VARIABLE TXE: Integer RANGE 0 TO 65535; VARIABLE TYE: Integer RANGE 0 TO 65535; BEGIN

IF XE>XS THEN XXDIR:='0'; ELSE

XXDIR:='1'; END IF; IF YE>YS THEN YYDIR:='0'; ELSE

YYDIR:='1'; END IF; IF XE<0 THEN TXE:=-XE; ELSE TXE:=XE; END IF; IF XS<0 THEN TXS:=-XS; ELSE TXS:=XS; END IF; IF YE<0 THEN TYE:=-YE; ELSE TYE:=YE; END IF; IF YS<0 THEN TYS:=-YS; ELSE TYS:=YS;

共 25 页 第 22 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

END IF; XDIR<=XXDIR; YDIR<=YYDIR; XXS<=TXS; YYS<=TYS; XXE<=TXE; YYE<=TYE; END PROCESS P1; P2:PROCESS(G,CLCK)

VARIABLE xx:Integer RANGE 0 TO 65535; VARIABLE yy:Integer RANGE 0 TO 65535; VARIABLE F:Integer; VARIABLE DIR:STD_LOGIC; VARIABLE NUM:Integer; VARIABLE YG:STD_LOGIC; VARIABLE XG:STD_LOGIC; BEGIN

IF G='1' THEN xx:=XXS; yy:=YYS;

if XXE

NUM:=XXS-XXE+YYE-YYS; ELSE DIR:='1';

NUM:=XXE-XXS+YYS-YYE; END IF; F:=0;

elsIF CLCK'EVENT AND CLCK='1' THEN IF NUM/=0 then IF(F<0)then IF DIR='0'THEN

共 25 页 第 23 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

F:=F+yy+yy+1; yy:=yy+1; YG:='1'; XG:='0'; ELSE

F:=F+xx+xx+1; xx:=xx+1; YG:='0'; XG:='1'; END IF; else

IF DIR='0'THEN F:=F-xx-xx+1; xx:=xx-1; YG:='0'; XG:='1'; ELSE

F:=F-YY-YY+1; yy:=yy-1; YG:='1'; XG:='0'; END IF; END IF; NUM:=NUM-1; ELSE YG:='0'; XG:='0'; END IF; END IF;

XCP<=XG AND CLCK; YCP<=YG AND CLCK; END PROCESS P2;

共 25 页 第 24 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

程序清单2010届毕业设计6月7日修改版

P3:PROCESS(CLK)

VARIABLE CP:STD_LOGIC; BEGIN

if CLK'EVENT AND CLK='0' THEN CP:=NOT(CP); END IF; CLCK<=CP; END PROCESS P3; END sample;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY OUTP IS

PORT(A : IN STD_LOGIC_VECTOR(1 DOWNTO 0); B : IN STD_LOGIC_VECTOR(1 DOWNTO 0); SEL: IN STD_LOGIC;

D : Out STD_LOGIC_VECTOR(1 DOWNTO 0)); END OUTP;

ARCHITECTURE sample OF OUTP IS BEGIN

P1:PROCESS(A,B,SEL) BEGIN if SEL='1' then D<=B; ELSE D<=A; END IF; END PROCESS P1; END sample;

共 25 页 第 25 页

本文来源:https://www.bwwdw.com/article/qfyg.html

Top