《基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于FPGA的步进电机控制系统的数字硬件设计研究—毕业设计论文.doc(48页珍藏版)》请在三一办公上搜索。
1、基于FPGA的步进电机控制系统的数字硬件设计研究作 者 姓 名: 专 业 名 称:电子信息科学与技术专业指 导 老 师: 摘要步进电机因其能够精确地控制机械的移动量而被广泛采用。步进电机是由输入的脉冲信号来加以控制的。模拟电路虽然可以用来产生连续可调的脉冲信号,但却难以控制,而用数字集成电路来对步进电机进行控制,则能克服以上缺点。 现在,数字集成电路的设计越来越多地采用VHDL + FPGA 的设计方法。采用VHDL 的设计方法有着不依赖器件、移植容易、能加快设计的特点。并且,VHDL 在现场就能进行修改,与FPGA 器件相结合,能大大提高设计的灵活性与效率,缩短产品的开发周期,加快产品的上市
2、时间。VHDL + FPGA 的设计方法是数字系统设计的一个创新,也是未来的一种发展方向。 步进电机是一种将电脉冲转化为角位移的执行机构,已广泛应用于各种自动化控制系统中。为了提高对步进电机的细分要求,提出了基于FPGA控制的步进电机控制器方案。给出了用VHDL语言层次化设计各功能模块的过程,利用Quartus进行仿真,给出了仿真结果,并成功地在FPGA器件上验证了设计的可能性。采用FPGA器件和VHDL语言,只需修改模块程序参数,而无须修改硬件电路就能实现各种控制。该设计硬件结构简单可靠,可根据实践需要灵活方便进行配置。关键词:VHDL FPGA 步进电机AbstractStepper mo
3、tors 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 inte
4、grated 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 a
5、nd 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 elect
6、rical 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 f
7、unction 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 achiev
8、e 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 本研究课题所涉及的主要理论和技术7
9、2 .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.
10、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前言电子系统设计的变革是从八十年代中期开始的。Altera公司发明了现场可编程门阵列( FPGA )器件,随后研制了复杂可编程逻辑器件
11、( CPLD )。这些器件最大的特点是用户可编程,使电子系统设计工程师通过利用与器件兼容的 EDA 软件,在办公室或实验室里就可以设计自己的专用集成电路(下称 ASIC )系统,实现用户规定的各种专门用途,因此构成了可编程 ASIC 类器件应用的广阔前景,推动了数字系统现场集成技术的形成与发展。随着 FPGA 和 CPLD 技术的不断发展,产品的集成度和性能不断提高,而价格却逐步降低。目前, FPGA / CPLD 产品可以完成更加复杂的工作,其应用范围扩展到了数据处理、网络、仪器仪表、工业控制、军事和航空航天等更广泛的领域。同时,随着 FPGA 产品的高度集成化、系统化,以及 FPGA 厂商
12、日益完善的远程控制方案,大大缩短和简化了工程技术人员的硬件设计和升级的过程,提高了用户产品设计和实现的工作效率。一、设计目标本论文的设计目标是,采用 VHDL 方式,用 FPGA 来设计和实现步进电机脉冲信号控制系统,以构成步进电机测试用的信号发生器。二、实现目标的技术路线在 EDA 技术平台上,利用硬件描述语言 VHDL ( VHDLVery High Speed Integrated circuit ( VHSIC ) Hardware Description Language (超高速集成电路硬件描述语言)进行数字逻辑设计,进行系统的逻辑功能和时延仿真,并用 FPGA 实现其所要求的逻辑
13、功能定义。三、设计意义 VHDL 和 FPGA 为特征的数字系统现场集成技术是将来 ASIC 设计的主要发展趋势之一,通过本课题研究,学习和掌握数字逻辑的 VHDL 设计方法和系统功能的 FPGA 实现方法,推动了数字系统现场集成技术的应用。1 步进电机脉冲信号发生器原理与设计要求近来,呈高速发展的OA 、FA (机器人技术)缺少不了电机。电机己广泛应用于工业制造的各个领域。电机的种类有很多种。二十世纪末以来,步进电机因其能够精确地控制机械的移动量而被广泛采用。上述这两个领域均利用电机来精密地控制机械的移动量,一般多采用步进电机(stepping motor ,又称Pulse motor )。
14、本章将对步进电机及其控制部分脉冲信号发生器的原理和本研究课题的有关设计要求作简要的介绍。1.1步进电机原理步进电机是由输入的脉冲信号来加以控制的。其最大特征是容易精确地控制机械位置。步进电机的特征( l )电机的总旋转角度与输入脉冲总数成比例,电机的速度与每秒的输入脉冲数目(脉冲速率:Pulse rate )成比例。图1.1 输入脉冲与旋转角的关系图1 . 1 所示为输入脉冲与旋转角的关系。在实用上,输入脉冲数的单位多为pps ( pulse per second :每秒的脉冲数) ( 2 )旋转角误差不会逐步累积。1.2测试原理电机驱动电路图1.2 为现在广泛使用的4 相步进电机驱动电路(相
15、激磁电路)。此电路由4BIT 双方向移位暂存器构成,每次当脉冲输入CLK 端子时往右或往左(CW 或CCW )移位(Shift )。图1.2 4相步进电机的驱动电路表1.1 移位暂存器的4个输出在移位时的状态当移位暂存器移位一次,步进电机就会转一个角度,而暂存器的移位是由输入到CLK 的脉冲所决定的,每输入1 个脉冲则移位一次,因此,步进电机的转速及所旋转的角度就由输入脉冲的速率和总脉冲数所决定。图1.3 脉冲速率与电机旋转速度的关系如果步进电机仅需能够旋转即可的场合,则只要脉冲产生电路所产生的脉冲供给步进电机即可。但是,在实际上,我们往往需要调节步进电机的旋转速度或旋转量,看看是否符合我们的
16、要求。测试一个步进电机是否能完全同输入脉冲同步,就需要一个能精确设定脉冲速率和脉冲总数的脉冲发生器。有了这样的脉冲发生器,就可以控制步进电机完成一系列复杂的动作,例如加速、减速等。1.3设计要求用户要求,步进电机的控制系统一脉冲信号发生器的输出脉冲能完成定速、加速、减速,且速率和加减速度都能做到连续可调。主要的功能定义是: ( l )基准时钟 65536 Hz ( 2 )输出脉冲个数设定范围 l 16777215 ( 3 )输出脉冲速率设定范围 l 65535 pps ( 1 pps / step ) ( 4 )输出脉冲加速度设定范围 065535 pps / s ( 5 )用 FPGA 实现
17、1.4目前可以实现的方法及比较要实现上述的脉冲信号发生器,有多种实现方法可供选择,具体如下: ( 1 )模拟电路的方法图1.4 用模拟信号控制脉冲用模拟电路实现的方法见图 1 . 4 。图中的纵向坐标代表了电压和输出脉冲频率的大小,从图中可以看出,不同的电压大小可以得出不同频率的输出脉冲。模拟电路来实现脉冲信号发生器,主要是通过精确地控制输出电压的大小,再通过压控震荡电路,从而获得不同频率的脉冲输出。这种方法的优点是:用模拟电路可以比较容易地得到连续可调的脉冲信号。缺点是:用模拟电路设计脉冲信号发生器,精度有限,而且,抗干扰能力差,也难以用微机来控制。( 2 )单片机的方法通常,单片机的时钟信
18、号(clock )来源于晶振,所以,可以得到稳定度相当高的脉冲。因此,以子程序控制单片机运行一定数量周期的空操作即可构成定时器,根据定时器令输出端呈ON / OFF 动作即可产生脉冲。这种方法所具有的优点是:输出脉冲的稳定度很高。缺点是:如果所要求的脉冲周期不是单片机时钟( clock )周期的整数倍时,实现起来就有一定的困难。而且,编制这样的汇编程序也不是一般的操作人员所能完成,如果要改变输出脉冲,程序就得重新写,显得较为烦琐。 ( 3 )采用专用逻辑电路的方法采用专用逻辑电路来设计脉冲信号发生器,即用硬件的方法来实现,可以在能够输出连续可调的不同频率的脉冲信号的同时,系统又具有更高的可靠性
19、和稳定性。结合上述几种传统的方法进行比较之后得出:我们可以采用可编程ASIC 来实现步进电机的控制,其主要优点在于:根据具体的逻辑要求来设计ASIC ;ASIC 具有较高的稳定性;应用较为简便;由于是数字集成电路,便于用微机控制。所以,本研究课题就选用第(3 )种方法,即用专用逻辑电路的方法来实现。本研究课题的目标是以VHDL 为设计手段,以FPGA 为目标载体,设计和实现一个可产生符合步进电机测试用途的脉冲信号发生器的专用的数字集成电路系统。2 本研究课题所涉及的主要理论和技术本研究课题的主要知识要点是:以FPGA (现场可编程门阵列)为系统目标器件,以VHDL 设计方法为目标系统逻辑设计的
20、基本方法,采用Altera公司的Quartus II开发系统,以现代EDA 的数字设计方式,来设计实现前面所述的基于FPGA 的步进电机脉冲信号控制系统的数字硬件。2 .1 数字系统现场集成技术的基本概念纵观信息技术的进步,一切数字化产品高度发展的核心,都归功于基于半导体技术高度发展的专用集成电路,归功于系统的单芯片集成技术SOC ( system on chip )。在半导体技术的推动下,数字系统的性能、功能、体积和电源消耗不仅得到显著改善,而且价格不断降低。数字系统的半导体技术含量不断增加。当前,由于复杂电路的单芯片集成技术日益完善,使得整个系统集成在一起成为可能。因此,系统级芯片(SOC
21、 )正在出现并改变着整个工业结构;知识产权(IP ) 成为关键的资源;新的市场动力来自于灵活变通和新构想,而不是对市场趋势的预测。2.1.1工艺集成技术数字系统的工艺集成技术就是指采用半导体掩膜工艺的方法来实现数字系统的单片物理结构。其中,主要的加工工艺技术为CM0S (互补金属氧化物硅)工艺。而主要电路的设计方式,可以分为门阵列设计、标准单元设计和全定制电路设计等。不同的设计方式和不同的加工工艺流程互为规范和制约。为了实现不同的电路性能成本指标,需要不同的电路设计规范和工艺设计规范,并要制定合理的加工工艺流程。2.1.2 现场集成技术所谓现场集成技术,是指一个数字系统的单片化设计和实现可以在
22、实验室现场进行,是指采用FPGA 、CPLD 为代表的可编程逻辑器件作为数字系统实现的目标载体来进行的数字系统单片的现场设计、现场仿真、现场实现的技术。对于利用现场集成技术来实现数字系统的单片化,其基本要素是: 现场集成的目标载体现场可编程器件; 现场集成的设计工具及IP 库资源; 针对具体目标器件的不同编程方式。(1)FPGA 未来发展方向 以FPGA 、CPLD 为代表的现场可编程逻辑电路的主要发展方向为:1 )为了迎接系统级芯片时代,向密度更高、速度更快、频带更宽的数百万门超大规模的方向发展。 2 )为了方便用户设计和特殊功能应用,向嵌入通用或标准功能模块方向发展。 3 )为了适应全球环
23、保潮流,向低压、低功耗的绿色元件方向发展。同时,模拟可编程阵列、数模混合可编程阵列,动态可重构阵列器件等新概念也正在涌现。(2)设计的实现过程设计实现过程主要分为输入文件的编译逻辑单元的分解规划目标芯片中的布局布线时延分析配置文件的建立。在整个过程中,要运行一系列程式去进行处理和转换,完成逻辑图网表文件Bit 文件的转换,从而在实现逻辑分区规划的基础上,进一步完成优化的布局和布线。(3)设计的仿真过程要成功地进行FPGA 应用系统的设计,至少需要两次仿真。一是逻辑功能仿真,即对经过合并处理的网表文件进行逻辑功能的验证,这时不考虑布线及不同分区规划而产生的时延对系统功能的影响,仅仅为了验证系统设
24、计的功能;二是布局、布线后的LCA 系统仿真,此时要考虑不同的布线,分区规划产生的各种时延对系统功能的影响,而且往往是考虑最坏的情况,即恶劣的温度环境、电源供电等情况。通常经过系统时延仿真并获得通过的布局布线后设计配置文件用来配置FPGA 芯片时,芯片的功能基本正确且成功。2.2 现场集成的编程方式在现场可编程集成电路的应用设计中,针对具体目标器件,需要不同的编程方式来实现目标数字系统的下载。根据不同的器件结构,目前常用的下载可分为如下3 种: 1 在线系统可编程技术ISP ( Insystem Programmability )。具有ISP 功能的器件在下载时无需专门的编程器,可直接在己制成
25、的系统(称为目标系统)中或印制板上对芯片进行编程数据下载。ISP 技术为系统设计和制造带来了很大的灵活性。目前大多数CPLD 新芯片均采用ISP 编程技术。 2 在线系统可重配置技术ISR ( In system Reconfiguration )。具备ISR 功能的器件也可直接在目标系统中或印制电路板上通过数据下载电缆配置和重新配置,无需专门的编程器。因为ISR 器件是基于SRAM 编程技术,故系统掉电后,芯片的编程信息会丢失。 3 一次性编程技术。具备这种编程技术的FPGA 采用反熔丝制造工艺,一旦编程就不可改变,适用于高可靠性低功耗的使用场合。2.2.1高密度型和低成本型的可编程逻辑器件
26、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个逻辑单元,
27、可以满足比较复杂的设计要求。2 低成本型的可编程逻辑器件低成本型的可编程逻辑器件有ALTERA 公司推出的FLEX600系列的FPGA 器件。该系列又分为EPF6010A 、EPF6016 、EPF6016A 和EPF6024A 几种系列的器件,统称FLEX600系列。1 ) FLEX600系列FPGA 的主要特性FLEX60系列FPGA 器件具有低电压、低功耗的特点。系列中的EPF6010A 、EPF6016A 和EPF6024A工作所需的电压只需要3.3 V,大大降低了功耗。此外,该系列FPGA 为计数器和算术应用提供了更高的速度,工作频率超过了12OMHZ 。2 ) FLEX600 系列
28、FPGA 的基本结构 FLEX600系列是一种小容量、低成本的FPGA器件,采用0.3um的SRAM工艺。该器件由逻辑阵列块有10个逻辑单元LE。一个LE由一个四输入的查找表和一个寄存器组成。该器件的集成度范围为1000024000个可用门、8081960个LE单元。现在,在数字系统现场集成设计方式中,用VHDL 进行设计输入的方法已成为大势所趋,因此,下面我将重点介绍采用VHDL 设计技术的优缺点。2.3 VHDL 设计方法及技术原理2.3.1 VHDL 的发展概况VHDL 是在7080 年代,由美国国防部资助的VHSIC 项目开发的产品。这种语言首次开发出来时,其目标仅是作为一个电路文本化
29、的一种标准,为了使人们用文本方式描述设计能够被其它人所理解。同时,也被用来作为模型语言,方便于采用软件来进行模拟。20 世纪90 年代,引起数字系统设计方式发生突破性技术变革的技术是VHDL 技术。目前正在全球范围内先进工业国家的电子系统设计领域获得广泛应用。 今天,VHDL 己成为数字电路和系统的描述、建模、综合的工业标准。在电子产业界,无论ASIC 设计人员,还是系统级设计人员,都需要学习VHDL 来提高他们的工作效率。2.3.2 VHDL 设计综合过程通常,设计过程可划分为下述6 个步骤:( l )设计要求的定义;( 2 )用VHDL 进行设计描述(系统描述与代码设计); ( 3 )源代
30、码模拟;( 4 )设计综合,设计优化和设计的布局布线;( 5 )布局布线后的设计模块模拟;( 6 )器件编程。2.3.3 设计要求的定义在从事设计进行编写代码工作之前,必须对设计目的和要求有一个明确的认识。例如,设计的功能是什么?对所需的信号建立时间、时钟一输出时间、最大系统工作频率、关键的路径等这些需求,要有一个明确的定义,这将有助于我们的设计,然后再选择适当的设计方式和相应的器件结构,进行设计综合。2.3.4 采用VHDL 进行设计描述l )设计规划:有了设计要求的定义后,编写设计代码。但是,首先应该决定设计方式。只有对如何描述我们的设计有了一个最佳的认识,才能更有效地编写设计代码,然后再
31、通过综合,进行所需要的逻辑实现。常用的设计方式有三种:自顶向下设计、自底向上设计、平坦式设计。2 )设计代码的编写:决定了设计方式后,根据VHDL 具体的语法结构,参照一些功能块、数据状态图等设计代码。但是编写一个优化的VHDL 代码的关键在于要依靠硬件的内在要求去思考,特别是,要能象综合软件运行时的“思考”方式去体验如何实现设计。2.4 EDA 工具EDA 工具有多种,本研究课题所采用的Altera公司的Quartus II软件便是为了使用户能够有效地使用Altera 公司的器件进行数字系统现场开发所推出的。现场可编程逻辑器件的开发系统是各器件厂商开发的、给开发者使用的一套集成开发环境软件。
32、本研究课题采用美国Altera 公司的FLEX600 系列FPGA 器件中的EPF6010A 芯片。所以我们却采用了Altera公司的开发系统。Altera的CPLD和FPGA器件具有良好的性能、极高密度和非常大的灵活性,它通过集成化、多I/O容量及最快的速度,为用户的各种需求提供了有效的解决方案,极大地满足了对片上系统日益增长的需求。Altera的可编程器件除了具有CPLD/FPGA的一般特点外,还具有改进的结构、先进的处理技术、现代的开发工具以及多种Mega功能等优点,主要有:高性能、高密度逻辑集成、较短的开发周期。3 设计与实现本研究课题采用了Altera公司的Quartus II开发软
33、件。整个设计的流程是:先用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 种不同频率而且互相不重叠的脉冲后,就可以
34、提取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
35、 / 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 。
36、如图3.4 所示,只要将脉冲速率的二进制数写进寄存器,就可以得到相应速率的输出脉冲。这样一来,我们就可以很方便地控制输出脉冲的速率,只需将其大小写进寄存器,一切输出脉冲的复杂速率要求,我们都可以通过修改寄存器中的内容而实现。图3.4 脉冲发生器的逻辑框图有了图3 .4 的任意脉冲发生电路,就只需要设计一个控制电路控制图3.4中的寄存器,这样就完成了系统设计。这样便得出图3 . 5 的系统框图。图3.5 系统电路框图3.2 VHDL 设计通过上面的设计讨论,己经弄清楚要用什么样的逻辑电路来实现,剩下的任务就是用VHDL 语言将各个电路模块描述出来,具体程序见附录。为了让结果更加清晰,我把系统分成
37、了两个部分,控制部分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 ste
38、p_control.vhd部分的结构框图有了图3 .6 的结构框图,我们就可以具体对各个模块用VHDL 进行设计,具体设计过程下面将作介绍。(1)频率产生模块在控制部分step_control.vhd 中,具体要用哪些模块才能实现设计的要求呢?首先,要求的基准频率为65536HZ ,而本研究课题的实验平台能提供的时钟输入为8MHZ ,所以,最前端的模块应该是一个65536HZ 时钟产生模块。要实现从8MHZ 的时钟输入分频到65536HZ ,至少需要一个7bit 的计数器。所以,开始的时候我直接用VHDL 描述一个7bit 的计数器。VHDL 描述如下:process ( RESET , CL
39、K , 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 时钟。然而,结合后续所需模块,分析可知,由于需要可调的加速度,所以,系统每秒钟都要根据加速度调整输出脉冲的
40、个数。而这就需要一个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
41、) ; 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 的计数器和
42、一个输出开关来实现对总输出脉冲个数的控制。如下所示: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
43、 ; 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_pl
44、us 的时候,iocontrol 为 O ,WAVE_IN 被屏蔽掉,系统不输出脉冲。(3)每秒输出的脉冲个数寄存器更新模块对输出脉冲个数寄存器的更新,我利用前端模块产生的控制信号Sclkout , 在每一周期(秒)的最后一个脉冲输出后进行更新。当加速度不为零的时候,每秒种要输出的脉冲个数前一秒钟输出的脉冲个数加速度。由于最大输出的脉冲数为65535 ,而且负的脉冲输出个数没有意义,所以,在对脉冲输出个数的寄存器更新前,要确保新的输出脉冲个数在O 65535 之间。因此,我把加速度分为正和负两种情况,在和前一秒输出的脉冲个数相加前先进行判断。对于正的加速度,大于65535 的结果被强制为系统所
45、能输出的最大脉冲数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
46、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 级,这样可以方便地观测输出波