基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc_第1页
基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc_第2页
基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc_第3页
基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc_第4页
基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc_第5页
免费预览已结束,剩余43页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于fpga的步进电机控制系统的数字硬件设计研究基于fpga的步进电机控制系统的数字硬件设计研究作 者 姓 名: 专 业 名 称:电子信息科学与技术专业指 导 老 师: - ii -摘要步进电机因其能够精确地控制机械的移动量而被广泛采用。步进电机是由输入的脉冲信号来加以控制的。模拟电路虽然可以用来产生连续可调的脉冲信号,但却难以控制,而用数字集成电路来对步进电机进行控制,则能克服以上缺点。 现在,数字集成电路的设计越来越多地采用vhdl + fpga 的设计方法。采用vhdl 的设计方法有着不依赖器件、移植容易、能加快设计的特点。并且,vhdl 在现场就能进行修改,与fpga 器件相结合,能大大提高设计的灵活性与效率,缩短产品的开发周期,加快产品的上市时间。vhdl + fpga 的设计方法是数字系统设计的一个创新,也是未来的一种发展方向。 步进电机是一种将电脉冲转化为角位移的执行机构,已广泛应用于各种自动化控制系统中。为了提高对步进电机的细分要求,提出了基于fpga控制的步进电机控制器方案。给出了用vhdl语言层次化设计各功能模块的过程,利用quartus进行仿真,给出了仿真结果,并成功地在fpga器件上验证了设计的可能性。采用fpga器件和vhdl语言,只需修改模块程序参数,而无须修改硬件电路就能实现各种控制。该设计硬件结构简单可靠,可根据实践需要灵活方便进行配置。关键词:vhdl fpga 步进电机abstractstepper motors can be precise because of mechanical control of the movement of production and are widely used. stepper motor input from the pulse signal to control. although analog circuits can be used to produce continuously adjustable pulse signal, but it is difficult to control, and the use of digital integrated circuits to the stepper motor control, to overcome the above drawbacks. now, digital ic design increasingly used vhdl + fpga design methods. vhdl design is not dependent on devices, easily transplanted, can speed up the design characteristics. furthermore, vhdl at the scene can make changes and fpga devices combine can greatly improve the design flexibility and efficiency, shorten product development cycles, accelerate product time to market. vhdl + fpga design methodology for digital systems design an innovative, as well as the future direction of development. stepping motor is a electrical impulses into angular displacement of the executive agency, has been widely used in all kinds of automatic control system. in order to improve the stepper motor subdivision requirements, is put forward based on fpga control stepping motor controller scheme. in this paper, a vhdl language the function module design of hierarchical process, use quartus simulation, then the simulation results, and succeeded in the fpga device validate design of possibilities. based on fpga device and vhdl language, only modify module procedure parameters, without having to change hardware circuit can achieve all kinds of control. the hardware design of simple structure and reliable, but according to the practice needs is flexible and convenient for configuration.keywords : fpga,vhdl, stepper motor 目录摘要iabstractii目录iii前言11 步进电机脉冲信号发生器原理与设计要求21.1步进电机原理21.2测试原理31.3设计要求41.4目前可以实现的方法及比较52 本研究课题所涉及的主要理论和技术72 .1 数字系统现场集成技术的基本概念72.1.1工艺集成技术72.1.2 现场集成技术82.2 现场集成的编程方式92.2.1高密度型和低成本型的可编程逻辑器件92.3 vhdl 设计方法及技术原理102.3.1 vhdl 的发展概况102.3.2 vhdl 设计综合过程112.3.3 设计要求的定义112.3.4 采用vhdl 进行设计描述112.4 eda 工具123 设计与实现133.1采用的设计方案133.2 vhdl 设计163.2.1 step_control.vhd 部分163.2.2 step_wave . vhd 部分214 设计调试与问题讨论264.1 设计调试264.2 问题讨论264.2.1 vhdl 程序编写274.2.2 vhdl 程序的顺序问题274.3 改进设计或其它方案的思索275 总结29致谢30参考文献31附件1 vhdl源程序32a1.1 vhdl源程序step_control.vhdl32a1.2 vhdl源程序step_wave.vhdl35附件2 电路图40a2.1 step_control.vhdl部分的门级电路图40a2.2 step_wave.vhdl部分的门级电路图42a2.3 电路总图43-iv-前言电子系统设计的变革是从八十年代中期开始的。altera公司发明了现场可编程门阵列( fpga )器件,随后研制了复杂可编程逻辑器件 ( cpld )。这些器件最大的特点是用户可编程,使电子系统设计工程师通过利用与器件兼容的 eda 软件,在办公室或实验室里就可以设计自己的专用集成电路(下称 asic )系统,实现用户规定的各种专门用途,因此构成了可编程 asic 类器件应用的广阔前景,推动了数字系统现场集成技术的形成与发展。随着 fpga 和 cpld 技术的不断发展,产品的集成度和性能不断提高,而价格却逐步降低。目前, fpga / cpld 产品可以完成更加复杂的工作,其应用范围扩展到了数据处理、网络、仪器仪表、工业控制、军事和航空航天等更广泛的领域。同时,随着 fpga 产品的高度集成化、系统化,以及 fpga 厂商日益完善的远程控制方案,大大缩短和简化了工程技术人员的硬件设计和升级的过程,提高了用户产品设计和实现的工作效率。一、设计目标本论文的设计目标是,采用 vhdl 方式,用 fpga 来设计和实现步进电机脉冲信号控制系统,以构成步进电机测试用的信号发生器。二、实现目标的技术路线在 eda 技术平台上,利用硬件描述语言 vhdl ( vhdlvery high speed integrated circuit ( vhsic ) hardware description language (超高速集成电路硬件描述语言)进行数字逻辑设计,进行系统的逻辑功能和时延仿真,并用 fpga 实现其所要求的逻辑功能定义。三、设计意义 vhdl 和 fpga 为特征的数字系统现场集成技术是将来 asic 设计的主要发展趋势之一,通过本课题研究,学习和掌握数字逻辑的 vhdl 设计方法和系统功能的 fpga 实现方法,推动了数字系统现场集成技术的应用。1 步进电机脉冲信号发生器原理与设计要求近来,呈高速发展的oa 、fa (机器人技术)缺少不了电机。电机己广泛应用于工业制造的各个领域。电机的种类有很多种。二十世纪末以来,步进电机因其能够精确地控制机械的移动量而被广泛采用。上述这两个领域均利用电机来精密地控制机械的移动量,一般多采用步进电机(stepping motor ,又称pulse motor )。本章将对步进电机及其控制部分脉冲信号发生器的原理和本研究课题的有关设计要求作简要的介绍。1.1步进电机原理步进电机是由输入的脉冲信号来加以控制的。其最大特征是容易精确地控制机械位置。步进电机的特征( l )电机的总旋转角度与输入脉冲总数成比例,电机的速度与每秒的输入脉冲数目(脉冲速率:pulse rate )成比例。图1.1 输入脉冲与旋转角的关系图1 . 1 所示为输入脉冲与旋转角的关系。在实用上,输入脉冲数的单位多为pps ( pulse per second :每秒的脉冲数) ( 2 )旋转角误差不会逐步累积。1.2测试原理电机驱动电路图1.2 为现在广泛使用的4 相步进电机驱动电路(相激磁电路)。此电路由4bit 双方向移位暂存器构成,每次当脉冲输入clk 端子时往右或往左(cw 或ccw )移位(shift )。图1.2 4相步进电机的驱动电路表1.1 移位暂存器的4个输出在移位时的状态当移位暂存器移位一次,步进电机就会转一个角度,而暂存器的移位是由输入到clk 的脉冲所决定的,每输入1 个脉冲则移位一次,因此,步进电机的转速及所旋转的角度就由输入脉冲的速率和总脉冲数所决定。图1.3 脉冲速率与电机旋转速度的关系如果步进电机仅需能够旋转即可的场合,则只要脉冲产生电路所产生的脉冲供给步进电机即可。但是,在实际上,我们往往需要调节步进电机的旋转速度或旋转量,看看是否符合我们的要求。测试一个步进电机是否能完全同输入脉冲同步,就需要一个能精确设定脉冲速率和脉冲总数的脉冲发生器。有了这样的脉冲发生器,就可以控制步进电机完成一系列复杂的动作,例如加速、减速等。1.3设计要求用户要求,步进电机的控制系统一脉冲信号发生器的输出脉冲能完成定速、加速、减速,且速率和加减速度都能做到连续可调。主要的功能定义是: ( l )基准时钟 65536 hz ( 2 )输出脉冲个数设定范围 l 16777215 ( 3 )输出脉冲速率设定范围 l 65535 pps ( 1 pps / step ) ( 4 )输出脉冲加速度设定范围 065535 pps / s ( 5 )用 fpga 实现1.4目前可以实现的方法及比较要实现上述的脉冲信号发生器,有多种实现方法可供选择,具体如下: ( 1 )模拟电路的方法图1.4 用模拟信号控制脉冲用模拟电路实现的方法见图 1 . 4 。图中的纵向坐标代表了电压和输出脉冲频率的大小,从图中可以看出,不同的电压大小可以得出不同频率的输出脉冲。模拟电路来实现脉冲信号发生器,主要是通过精确地控制输出电压的大小,再通过压控震荡电路,从而获得不同频率的脉冲输出。这种方法的优点是:用模拟电路可以比较容易地得到连续可调的脉冲信号。缺点是:用模拟电路设计脉冲信号发生器,精度有限,而且,抗干扰能力差,也难以用微机来控制。( 2 )单片机的方法通常,单片机的时钟信号(clock )来源于晶振,所以,可以得到稳定度相当高的脉冲。因此,以子程序控制单片机运行一定数量周期的空操作即可构成定时器,根据定时器令输出端呈on / off 动作即可产生脉冲。这种方法所具有的优点是:输出脉冲的稳定度很高。缺点是:如果所要求的脉冲周期不是单片机时钟( clock )周期的整数倍时,实现起来就有一定的困难。而且,编制这样的汇编程序也不是一般的操作人员所能完成,如果要改变输出脉冲,程序就得重新写,显得较为烦琐。 ( 3 )采用专用逻辑电路的方法采用专用逻辑电路来设计脉冲信号发生器,即用硬件的方法来实现,可以在能够输出连续可调的不同频率的脉冲信号的同时,系统又具有更高的可靠性和稳定性。结合上述几种传统的方法进行比较之后得出:我们可以采用可编程asic 来实现步进电机的控制,其主要优点在于:根据具体的逻辑要求来设计asic ;asic 具有较高的稳定性;应用较为简便;由于是数字集成电路,便于用微机控制。所以,本研究课题就选用第(3 )种方法,即用专用逻辑电路的方法来实现。本研究课题的目标是以vhdl 为设计手段,以fpga 为目标载体,设计和实现一个可产生符合步进电机测试用途的脉冲信号发生器的专用的数字集成电路系统。2 本研究课题所涉及的主要理论和技术本研究课题的主要知识要点是:以fpga (现场可编程门阵列)为系统目标器件,以vhdl 设计方法为目标系统逻辑设计的基本方法,采用altera公司的quartus ii开发系统,以现代eda 的数字设计方式,来设计实现前面所述的基于fpga 的步进电机脉冲信号控制系统的数字硬件。2 .1 数字系统现场集成技术的基本概念纵观信息技术的进步,一切数字化产品高度发展的核心,都归功于基于半导体技术高度发展的专用集成电路,归功于系统的单芯片集成技术soc ( system on chip )。在半导体技术的推动下,数字系统的性能、功能、体积和电源消耗不仅得到显著改善,而且价格不断降低。数字系统的半导体技术含量不断增加。当前,由于复杂电路的单芯片集成技术日益完善,使得整个系统集成在一起成为可能。因此,系统级芯片(soc )正在出现并改变着整个工业结构;知识产权(ip ) 成为关键的资源;新的市场动力来自于灵活变通和新构想,而不是对市场趋势的预测。2.1.1工艺集成技术数字系统的工艺集成技术就是指采用半导体掩膜工艺的方法来实现数字系统的单片物理结构。其中,主要的加工工艺技术为cm0s (互补金属氧化物硅)工艺。而主要电路的设计方式,可以分为门阵列设计、标准单元设计和全定制电路设计等。不同的设计方式和不同的加工工艺流程互为规范和制约。为了实现不同的电路性能成本指标,需要不同的电路设计规范和工艺设计规范,并要制定合理的加工工艺流程。2.1.2 现场集成技术所谓现场集成技术,是指一个数字系统的单片化设计和实现可以在实验室现场进行,是指采用fpga 、cpld 为代表的可编程逻辑器件作为数字系统实现的目标载体来进行的数字系统单片的现场设计、现场仿真、现场实现的技术。对于利用现场集成技术来实现数字系统的单片化,其基本要素是: 现场集成的目标载体现场可编程器件; 现场集成的设计工具及ip 库资源; 针对具体目标器件的不同编程方式。(1)fpga 未来发展方向 以fpga 、cpld 为代表的现场可编程逻辑电路的主要发展方向为:1 )为了迎接系统级芯片时代,向密度更高、速度更快、频带更宽的数百万门超大规模的方向发展。 2 )为了方便用户设计和特殊功能应用,向嵌入通用或标准功能模块方向发展。 3 )为了适应全球环保潮流,向低压、低功耗的绿色元件方向发展。同时,模拟可编程阵列、数模混合可编程阵列,动态可重构阵列器件等新概念也正在涌现。(2)设计的实现过程设计实现过程主要分为输入文件的编译逻辑单元的分解规划目标芯片中的布局布线时延分析配置文件的建立。在整个过程中,要运行一系列程式去进行处理和转换,完成逻辑图网表文件bit 文件的转换,从而在实现逻辑分区规划的基础上,进一步完成优化的布局和布线。(3)设计的仿真过程要成功地进行fpga 应用系统的设计,至少需要两次仿真。一是逻辑功能仿真,即对经过合并处理的网表文件进行逻辑功能的验证,这时不考虑布线及不同分区规划而产生的时延对系统功能的影响,仅仅为了验证系统设计的功能;二是布局、布线后的lca 系统仿真,此时要考虑不同的布线,分区规划产生的各种时延对系统功能的影响,而且往往是考虑最坏的情况,即恶劣的温度环境、电源供电等情况。通常经过系统时延仿真并获得通过的布局布线后设计配置文件用来配置fpga 芯片时,芯片的功能基本正确且成功。2.2 现场集成的编程方式在现场可编程集成电路的应用设计中,针对具体目标器件,需要不同的编程方式来实现目标数字系统的下载。根据不同的器件结构,目前常用的下载可分为如下3 种: 1 在线系统可编程技术isp ( insystem programmability )。具有isp 功能的器件在下载时无需专门的编程器,可直接在己制成的系统(称为目标系统)中或印制板上对芯片进行编程数据下载。isp 技术为系统设计和制造带来了很大的灵活性。目前大多数cpld 新芯片均采用isp 编程技术。 2 在线系统可重配置技术isr ( in system reconfiguration )。具备isr 功能的器件也可直接在目标系统中或印制电路板上通过数据下载电缆配置和重新配置,无需专门的编程器。因为isr 器件是基于sram 编程技术,故系统掉电后,芯片的编程信息会丢失。 3 一次性编程技术。具备这种编程技术的fpga 采用反熔丝制造工艺,一旦编程就不可改变,适用于高可靠性低功耗的使用场合。2.2.1高密度型和低成本型的可编程逻辑器件1 高密度型的可编程逻辑器件密度型的可编程逻辑器件以altera公司推出的acex1k系列fpga 为代表。acex1k器件带有高性能的嵌入式存储块(eab),每个eab块提供4096位,除实现一般ram、rom,先进先出(fifo)等其他一些逻辑功能,可以达到64位、66mhz的高性能的带宽。逻辑阵列由若干个lab块组成,每个lab块有八个逻辑单元le和一个局部的快速通道组成,一个le由一个四输入lut、一个可编程的触器、进位链、级连链和互连信号组成。一部分型号的器件还带有锁(pll)功能,i/o单元有多电压的功能,可以配置成5v、3v和2.5v的电压。器件的密度为5764992个逻辑单元,可以满足比较复杂的设计要求。2 低成本型的可编程逻辑器件低成本型的可编程逻辑器件有altera 公司推出的flex600系列的fpga 器件。该系列又分为epf6010a 、epf6016 、epf6016a 和epf6024a 几种系列的器件,统称flex600系列。1 ) flex600系列fpga 的主要特性flex60系列fpga 器件具有低电压、低功耗的特点。系列中的epf6010a 、epf6016a 和epf6024a工作所需的电压只需要3.3 v,大大降低了功耗。此外,该系列fpga 为计数器和算术应用提供了更高的速度,工作频率超过了12omhz 。2 ) flex600 系列fpga 的基本结构 flex600系列是一种小容量、低成本的fpga器件,采用0.3um的sram工艺。该器件由逻辑阵列块有10个逻辑单元le。一个le由一个四输入的查找表和一个寄存器组成。该器件的集成度范围为1000024000个可用门、8081960个le单元。现在,在数字系统现场集成设计方式中,用vhdl 进行设计输入的方法已成为大势所趋,因此,下面我将重点介绍采用vhdl 设计技术的优缺点。2.3 vhdl 设计方法及技术原理2.3.1 vhdl 的发展概况vhdl 是在7080 年代,由美国国防部资助的vhsic 项目开发的产品。这种语言首次开发出来时,其目标仅是作为一个电路文本化的一种标准,为了使人们用文本方式描述设计能够被其它人所理解。同时,也被用来作为模型语言,方便于采用软件来进行模拟。20 世纪90 年代,引起数字系统设计方式发生突破性技术变革的技术是vhdl 技术。目前正在全球范围内先进工业国家的电子系统设计领域获得广泛应用。 今天,vhdl 己成为数字电路和系统的描述、建模、综合的工业标准。在电子产业界,无论asic 设计人员,还是系统级设计人员,都需要学习vhdl 来提高他们的工作效率。2.3.2 vhdl 设计综合过程通常,设计过程可划分为下述6 个步骤:( l )设计要求的定义;( 2 )用vhdl 进行设计描述(系统描述与代码设计); ( 3 )源代码模拟;( 4 )设计综合,设计优化和设计的布局布线;( 5 )布局布线后的设计模块模拟;( 6 )器件编程。2.3.3 设计要求的定义在从事设计进行编写代码工作之前,必须对设计目的和要求有一个明确的认识。例如,设计的功能是什么?对所需的信号建立时间、时钟一输出时间、最大系统工作频率、关键的路径等这些需求,要有一个明确的定义,这将有助于我们的设计,然后再选择适当的设计方式和相应的器件结构,进行设计综合。2.3.4 采用vhdl 进行设计描述l )设计规划:有了设计要求的定义后,编写设计代码。但是,首先应该决定设计方式。只有对如何描述我们的设计有了一个最佳的认识,才能更有效地编写设计代码,然后再通过综合,进行所需要的逻辑实现。常用的设计方式有三种:自顶向下设计、自底向上设计、平坦式设计。2 )设计代码的编写:决定了设计方式后,根据vhdl 具体的语法结构,参照一些功能块、数据状态图等设计代码。但是编写一个优化的vhdl 代码的关键在于要依靠硬件的内在要求去思考,特别是,要能象综合软件运行时的“思考”方式去体验如何实现设计。2.4 eda 工具eda 工具有多种,本研究课题所采用的altera公司的quartus ii软件便是为了使用户能够有效地使用altera 公司的器件进行数字系统现场开发所推出的。现场可编程逻辑器件的开发系统是各器件厂商开发的、给开发者使用的一套集成开发环境软件。本研究课题采用美国altera 公司的flex600 系列fpga 器件中的epf6010a 芯片。所以我们却采用了altera公司的开发系统。altera的cpld和fpga器件具有良好的性能、极高密度和非常大的灵活性,它通过集成化、多i/o容量及最快的速度,为用户的各种需求提供了有效的解决方案,极大地满足了对片上系统日益增长的需求。altera的可编程器件除了具有cpld/fpga的一般特点外,还具有改进的结构、先进的处理技术、现代的开发工具以及多种mega功能等优点,主要有:高性能、高密度逻辑集成、较短的开发周期。3 设计与实现本研究课题采用了altera公司的quartus ii开发软件。整个设计的流程是:先用quartus ii 软件的文本编辑功能编写vhdl 源程序,并进行编译和综合。流程可见图3 . 1 。图3 . 1 设计流程3.1采用的设计方案本研究课题的设计思想:利用各种不同频率的脉冲叠加,如图3 . 2 所示。图3.2 脉冲合成由于本课题要求的基准时钟是65536hz ,输出的脉冲信号的频率范围为o 65535pps ,所以需要用一个16 位的计数器来实现不同脉冲信号的输出,而不同频率的输出脉冲之间不能重叠。16 位计数器的16 种不会重叠的状态具体如图3.3 所示。图3.3 16位计数器的16种不会重叠的状态有了16 种不同频率而且互相不重叠的脉冲后,就可以提取16 种频率的脉冲中所需要的几种来进行叠加,从而构成所需的连续可调的输出脉冲。可以由16 种不同频率的脉冲来叠加成o 65535pps 中任何频率的输出脉冲的原理见下面的公式:f = al5fo / 21+ al4fo / 22 + al3fo / 23 + alzfo / 24 + allfo / 25 + alofo / 26 + a9fo / 27 + a8fo / 28 + a7fo / 29 + a6fo / 210 + asfo / 211 + a4fo / 212 + a3fo / 213 + azfo / 214 + alfo / 215 + aofo / 216 = fo / 2 16( 215a15 + 214 a14 + 213 a13 + 212 a12 + 211 all + 210 alo + 29 a9 + 28 a8 + 27 a7 + 26 a6 + 25 a5 + 24a423 a3 + 22 a2 + 21 al + 20 a0 ) 可以看出,括号内是一个16 位的二进制数(0000 ffff ) ,因此,只要fo 可以精确到65536hz ,那么通过改变二进制数(a15a0 ) ,输出f 就可以达到连续可调。上面所述的数学模型论证了可以用叠加不同频率的脉冲信号的方法来实现设计要求。根据此设计思想,得到了下面的逻辑电路,其框图如图3.4 。如图3.4 所示,只要将脉冲速率的二进制数写进寄存器,就可以得到相应速率的输出脉冲。这样一来,我们就可以很方便地控制输出脉冲的速率,只需将其大小写进寄存器,一切输出脉冲的复杂速率要求,我们都可以通过修改寄存器中的内容而实现。图3.4 脉冲发生器的逻辑框图有了图3 .4 的任意脉冲发生电路,就只需要设计一个控制电路控制图3.4中的寄存器,这样就完成了系统设计。这样便得出图3 . 5 的系统框图。图3.5 系统电路框图3.2 vhdl 设计通过上面的设计讨论,己经弄清楚要用什么样的逻辑电路来实现,剩下的任务就是用vhdl 语言将各个电路模块描述出来,具体程序见附录。为了让结果更加清晰,我把系统分成了两个部分,控制部分step_control.vhd 和脉冲产生部分step_wave.vhd,这两个部分对应图3 .5 的两个模块,这两部分设计完成后,通过一张顶层的原理图连接起来就构成了一个完整的脉冲信号发生器系统。下面具体说明两部分的设计过程。3.2.1 step_control.vhd 部分根据step_control.vhd 部分所需实现的功能,经过分析后知道此部分主要由以下几个模块构成:1 、频率产生模块;2 、总输出脉冲数控制模块;3 、每秒输出的脉冲个数寄存器更新模块。上面三个模块的连接关系图即step_control.vhd 部分的结构框图如图3 .6 所示。图3.6 step_control.vhd部分的结构框图有了图3 .6 的结构框图,我们就可以具体对各个模块用vhdl 进行设计,具体设计过程下面将作介绍。(1)频率产生模块在控制部分step_control.vhd 中,具体要用哪些模块才能实现设计的要求呢?首先,要求的基准频率为65536hz ,而本研究课题的实验平台能提供的时钟输入为8mhz ,所以,最前端的模块应该是一个65536hz 时钟产生模块。要实现从8mhz 的时钟输入分频到65536hz ,至少需要一个7bit 的计数器。所以,开始的时候我直接用vhdl 描述一个7bit 的计数器。vhdl 描述如下:process ( reset , clk , count7 ) begingenerate a 8 bit counter and sclkout signal if ( reset =0 ) then count7 0 ) ; else if ( clk = 1 and clkevent ) then count7 = count7 + 1 ; end if;end if;end process ; clkout = count7 ( 6 ) ; 程序中,clk 为输入8mhz 的时钟,clkout 为输出的65536hz 时钟。然而,结合后续所需模块,分析可知,由于需要可调的加速度,所以,系统每秒钟都要根据加速度调整输出脉冲的个数。而这就需要一个23bit 的计数器来实现,在每一秒的最后面,系统实施输出脉冲个数的更新,也就是重新更新输出脉冲数分给寄存器。而这个23bit 的时钟,完全可以同时用来做把输入8mhz 时钟分频到65536hz 的功能,这样可以节省一个8bit 的计数器,以节省资源。综上所述,最前面的模块将可以修改成为以下这样:process ( reset , clk , count23 , sclkout ) begin generate a 23 bit counter and sclkout signal if ( reset = o ) then sclkout = 0 ; count23 0 ) ; else if ( clk = l and clk event ) then count23 = count23 + l ; if ( count23 = “11111111111111111111111” ) then sclkout = l ; else sclkout = o ; end if;end if;end if;end process ; clkout = count23 ( 6 ) ; 程序中,clkout 为所需的的结束信号,给后面的模块使用65536hz 的时钟,sclkout 为每一个周期(每秒)。(2)总输出脉冲数控制模块在这里,我用一个23bit 的计数器和一个输出开关来实现对总输出脉冲个数的控制。如下所示:process ( reset ,wave_in , pulse _ counter , iocontrol , max_plus ) begin if ( reset = o ) then iocontrol = l ; pulse_counter o ) ; else if (wave_in = o and wave_inevent ) then if ( pulse _ counter = max_plus ) then iocontrol = o ; else pulse _ counter = pulse _ counter + l ; end if;end if ;end if;end process ; output wave_in and iocontrol;wavein 是step _wave . vhd 部分的脉冲信号输出,输入到step _ control 部分,每输入一个wavein ,代表着输出一个控制步进电机的脉冲。由iocontrof 来控制输出到整个系统的输出output 。当输出脉冲个数计数器pulse _ counter 没有达到设定的总输出脉冲个数max_plus 的时候,iocontrol 为 1 ,wave_in 一直输出到output 。当pulse _ counter 达到max_plus 的时候,iocontrol 为 o ,wave_in 被屏蔽掉,系统不输出脉冲。(3)每秒输出的脉冲个数寄存器更新模块对输出脉冲个数寄存器的更新,我利用前端模块产生的控制信号sclkout , 在每一周期(秒)的最后一个脉冲输出后进行更新。当加速度不为零的时候,每秒种要输出的脉冲个数前一秒钟输出的脉冲个数加速度。由于最大输出的脉冲数为65535 ,而且负的脉冲输出个数没有意义,所以,在对脉冲输出个数的寄存器更新前,要确保新的输出脉冲个数在o 65535 之间。因此,我把加速度分为正和负两种情况,在和前一秒输出的脉冲个数相加前先进行判断。对于正的加速度,大于65535 的结果被强制为系统所能输出的最大脉冲数65535 。而对于负的加速度,小于o 的结果则被强制为系统所能输出的最小脉冲数o 。vhdl 的描述如下所示:process ( reset , sclkout , skeyout , speed , set ) begin if ( reset = o ) then if ( set = 001 ) then speed = speed ) and skeyout = speedup ( 15 downto 0 ) ) then skeyout = skeyout - speedup ( 15 downto 0 ) ; elseskeyout = speed ; end if;end if;end if;end process ;程序中skeyout 就是输出脉冲个数寄存器,由step _ control. vhd 部分输出给step_wave.vhd 部分,用以实际控制输出的脉冲个数。有一点要说明的是,实际应用中,需要设定三个值:速度(speed )、加速度(speedup )和总输出脉冲个数( max_puls ) ,具体数值由外部的单片机,芯片或dsp 来决定,这需要多根i/o 和另外编写单片机dsp 的程序,而这方面程序的设计不在本研究课题的范围内,所以在本研究课题中,总输出脉冲个数和加速度这两个参数我预先设定在vhdl 描述的电路之中,修改参数后重新编译vhdl 程序便可实现不同参数的录入。而速度则由外部的dip 开关设定。本系统能设定的速度范围为o 65535pps ,不过,由于速度差距不大时示波器上不容易看出区别,所以,外接的dsp开关只为8 位,设定的速度为256 级,这样可以方便地观测输出波形。(4)step_control.vhd仿真模块图3.7 step_control.vhd模块图3.8 step_control.vhd的时序仿真中其reset 为复位信号,clk 为外部提供的8mhz 时钟源,set 为外部所设定的输出脉冲信号的速度,wave_ln 为step_wave . vhd 部分反馈回来的输出脉冲信号,keyout 为输出到step_wave . vhd 部分的信号,对输出脉冲信号速度寄存器的数值进行更新。output 信号为输出给步进电机驱动器的脉冲信号,即本课题研究所要求得到的信号。3.2.2 step_wave . vhd 部分根据step_ave.vhd 部分所需实现的功能,经过分析后知道,此部分主要由以下几个模块构成:l 、16bit 计数器;2 、16 种频率的脉冲产生模块;3 、脉冲叠加模块。上面三个模块的连接关系图即step_wave .vhd 部分的结构框图如图3 .9 所示。图3.9 step_wave.vhd部分的结构框图有了图3.9的结构框图,我们就可以用vhdl 设计各个模块,下面将作论述。(1)16bit计数器模块在脉冲产生部分step_wave . vhd 中,具体要用哪些模块才能实现本研究课题的要求呢?首先,由于要求产生的脉冲数是o 65535 ,根据前面的方程式可以知道,最终输出的脉冲其实是由1/2clk 、l / 4clk 、l / 8clk l 32768clk 这16 种脉冲中的某些来合成的。为了实现这16 种频率的脉冲,需要一个16bit 的计数器。所以,这部分的第一个模块就是用来产生一个16bit 的计数器。vhdl 描述如下所示:process ( clk , reset , countl6 ) begin if ( reset = 0)then countl6 0 ) ; else if ( clk = l and clkevent ) then countl6 = countl6 + l ; end if;end if;end process ; 程序中的clk 就是由step _ control 分频得到65536 hz的时钟。产生的16bit 计数器的16 种状态,提供给下一个模块使用,以便产生16 种频率的唯一状态,以保持一个基准时钟周期的脉冲。(2)16种频率的脉冲产生模块step_wave . vhd 部分第二个模块是16 种频率的脉冲产生模块,从前面的公式和图3 .3 可知,这16 种脉冲其实是以16bit 计数器的16 种不会重叠的状态为条件而产生的。用vhdl 来实现,具体描述见附录。process ( countl6 , outputl6 ) begin if ( reset = o ) then outputl6 o ) ; else if ( countl6 ( o ) = l ) then outputl6 ( 15 ) = l ; else outputl6 ( 15 ) = o ; end if;if ( countl6 ( 1 downto 0 ) = 10 ) then outputl6 ( 14 ) = l ; else outputl6 ( 14 ) = o , ; end if; ;end if;end process ; 程序中的outputl6 的o15位,就是这16 种频率的脉冲,依次成1 / 2 递减,且不会重叠。其中output ( 15 )也就是最高位,其频率最高。(3)脉冲叠加模块第三个也就是step_wave . vhd 部分最后一个模块,它是脉冲叠加模块,用来把这16 种脉冲叠加起来,得到最终所需要的输出。由前面的公式可知,最后,在指定的输出脉冲个数下,对于这16 种频率的脉冲,应提取出需要的那几种进行叠加。所以,要在每一种脉冲输出加上输出控制,以控制这种脉冲需不需要输出。这个输出控制可由16 个两输入与门,一端接输出脉冲,另一端接对应的脉冲个数寄存器。例如,要每秒钟输出8000 个脉冲,则先把8000 化成二进制:1111101000000 ,得出对应位a12 , a11 , a10 , a9 , a8 和a6 为1 ,其余位为o 。所以,与这些为“1 ”的位相连接的与门打开,让对应频率的脉冲l / 16clk 、l / 32clk 、l / 64clk 、l / 128clk 、l / 256clk 和l / 1o24clk 输出到16 输入的或门上进行叠加。vhdl 的描述如下所示:process ( reset , key , clk , outputl6 , swave_out , key_tmp ) begin if ( reset = 0 ) then swave_out = 0 ; else for i in 0 to 15 loop key_tmp ( i ) = key ( i ) and outputl6 ( i ) and clk ; end loop ; swave _ out = key_tmp ( o ) or key_tmp ( l ) or key_tmp ( 2 ) or key_tmp ( 3 ) or key_tmp ( 4 ) or key_tmp ( 5 ) or key_tmp ( 6 ) or key_tmp ( 7 ) or key_tmp ( 8 ) or key_tmp ( 9 ) or key_tmp ( 10 ) or key_tmp ( 11 ) or key_tmp ( 12 ) or key_tmp ( 13 ) or key_tmp ( 14 ) or key_tmp ( 15 ) ; end if;end process ; 程序中的swave_out 就是最后合成的脉冲输出。step_wave.vhd 部分完成以后,单独对此部分进行时序仿真,波形图如3 .9 所示。(4)step_wave.vhd仿真模块图3.10 step_wave.vhd模块图3.11 step_wave.vhd部分的时序仿真图鉴于显示的篇幅有限,不能把数秒内完整的波形图显示出来,所以,上面显示的只是一个周期中一段时间内的波形图。两幅图中的clk 即第二

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论