基于CPLD的多功能脉冲分配器的设计说明书

更新时间:2024-07-07 00:17:01 阅读量: 综合文库 文档下载

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

毕业设计说明书

基于CPLD的多功能脉冲 分配器的设计

专业 电子信息工程 韩 清 B电子032班 0310620206 成 开 友 2007年6月14日

学生姓名 班学

级 号

指导教师 完成日期

盐城工学院本科生毕业设计说明书(2007)

基于CPLD的多功能脉冲分配器的设计 摘 要: 现代经济快速发展,步进电机作为能够精确步进定位的器件,被广泛应

用于不同的行业中。但是步进电机自身不能控制运行,需要借助步进电机控制器来控制。而脉冲分配器作为步进电机控制器中的核心设备,将直接控制步进电机的运转方式和运转速度。

设计的脉冲分配器能实现多种功能。通过模式键切换,实现步进电机分三相六拍和双三拍两种模式工作;根据复位键的高低电平,决定步进电机是否运转;有方向控制选择键,实现对步进电机的正、反方向运转的控制;并且具有分频功能,可以将输入频率生成八种不同频率输出来控制步进电机的转速。对脉冲分配器的设计以XILINX公司的XC9572 CPLD芯片为硬件主体和超高速集成电路硬件描述语言VHDL为软件主体。这种设计方法具有设计简单、代码通用、系统灵活性和可靠性强的优势。文中详细介绍了脉冲分配器中XC9572 CPLD芯片、分频器和状态机的设计细节。

由于是基于可编程逻辑器件并结合VHDL语言设计的步进电机脉冲分配器,因此其突出的优点就是有良好的升级特性,能很好地提高产品的竞争优势。

关键词: 步进电机;脉冲分配器;VHDL;CPLD

盐城工学院本科生毕业设计说明书(2007)

The design of Multifunctional Pulse Distributor

based on CPLD

Abstract : With the rapid development of modern economy, stepper motor, as a device

which can precisely positioning, is widely used in various industries. However, stepper motor can not control operation itself, thus stepper motor controller is needed. Meanwhile, the pulse distributor, as the core equipment of stepper motor controller, will be in direct control of the stepper motor operation and the operation of speed.

The pulse distributor is designed to carry out its various functions, among which are: by key mode switching, two modes of six hours of three-phase and three-bats can be shoot; according to the high or low level of the electricity of the reset button, whether stepper motor is in operation can be decided; the control of the all-direction operation of stepper motor can be carried out by the direction control keys; moreover, this pulse distributor has the function of frequency-distribution, it can control the speed of the stepper motor by transferring the input frequency into eight different output frequencies. The design of this pulse distributor employs XC9572 CPLD chip which produced by XILINX company as its main hardware and VHDL as its main software. This method is simple in design, with a common code, a flexible system and has advantages in its reliability. This paper describes in detail about the pulse split XC9572 CPLD, the dividers and the design details of the state machine.

Because it is the stepper motor pulse distributor which is based on programmable logic device and VHDL design, it has the obvious advantages of a good upgrades and a good competitive advantage.

Key words: Stepper Motor; Pulse Distributor; VHDL; CPLD

基于CPLD的多功能脉冲分配器的设计

目 录

1 概 述 .................................................................................................................... 1 2 步进电机脉冲分配器实现方式的论证 ................................................................. 2 2.1 几种实现方式比较 ............................................................................................. 2 2.2 确定方案 ............................................................................................................. 4 3脉冲分配器的设计 ................................................................................................. 4 3.1 脉冲分配器的硬件部分设计 ............................................................................. 4 3.1.1 XC9572芯片介绍 ............................................................................................. 5 3.1.2 XC9572芯片在设计中有关管脚功能分析 ..................................................... 6 3.2 脉冲分配器的软件部分设计及波形仿真 ......................................................... 8 3.2.1 VHDL语言的特点和基本结构 .......................................................................... 8 3.2.2 控制逻辑分析 .................................................................................................. 9 3.2.3 分频模块的设计和波形仿真 .........................................................................11 3.2.4 脉冲分配状态机的设计和波形仿真 ............................................................ 14 3.2.5 整个脉冲分配器芯片的顶层实体实现 ........................................................ 18 3.3 设计综合输出 ................................................................................................... 18 4放大电路选用 ....................................................................................................... 18 5步进电机的选用 ................................................................................................... 20 5.1 磁阻式步进电机的工作原理 ........................................................................... 20 5.2 磁阻式步进电机按设计要求的工作方式 ....................................................... 21 5.2.1 三相六拍工作 ................................................................................................ 21 5.2.2 双三拍工作 .................................................................................................... 23 6 结 束 语................................................................................................................ 23 参考文献 .................................................................................................................. 25 致 谢 .................................................................................................................... 24 附 录 .................................................................................................................... 26 附录1 顶层文件程序清单 ...................................................................................... 26 附录2 分频程序清单 ............................................................................................. 28 附录3 脉冲分配程序清单 ..................................................................................... 33

盐城工学院本科生毕业设计说明书(2007)

基于CPLD的多功能脉冲分配器的设计 1 概 述

步进电机是将电脉冲信号转换成角位移的一种机电式数模转换器。每当输入一个脉冲时,转轴便转过一个固定的机械角度。步进电机旋转的角位移与输入脉冲的个数成正比,其转速与输入脉冲的频率也成正比,其转动方向由输入脉冲对绕组加电的顺序决定。它具有快速起停、精确步进、没有累积误差且能直接接受数字信号的特点,在数字控制系统中得到了广泛的应用。尤其在数控设备、航空、导弹等工业中一般都采用步进电机作为伺服执行元件。

步进电机要依靠专门的设备(步进电机驱动控制器)才能运行。对实际的步进电机控制系统来说,脉冲分配器是整个系统的核心电路。系统框图如图1-1所示。

图1-1 步进电机控制系统框图

常用的步进电机控制系统采用专用控制器或者微机控制。而传统的控制器往往使控制系统成本较高,而且性能不稳定。微机控制用软件进行控制,程序量较大,占用CPU时间较多,而且抗干扰能力差。因此用户在使用传统驱动控制时往往需要做许多工作,才可实现按设计要求控制步进电机,有时甚至不能够完成控制任务。随着步进电机应用范围的不断扩大,以及适应当今产品智能化的要求,设计结构简单、功能实用的智能步进电机脉冲分配器系统十分必要。

脉冲分配器作为步进电机控制器中的核心设备,设计中可采用功能强大的硬件描述语言设计具有多种输出模式的脉冲分配器;还可对输入脉冲分配器的时钟信号进行分频,实现步进电机调速范围选择。同时脉冲分配器可采用可编程逻辑器件为控制芯片,它能控制指令按照一定顺序和分配方式传送到功率放大器,经过放大后控制步进电机的绕组按照预先规定的工作方式通、断电,驱动电机转子旋转。

所设计的多功能脉冲分配器技术要求如下:1、可以输出两种脉冲:一种为双三拍,另一种为三相六拍;2、有一个模式键来切换输出形式,当功能键按下时为

1

基于CPLD的多功能脉冲分配器系统的设计

三相六拍输出,当缺省时为双三拍输出;3、有一个复位信号EX,当EX为高电平时,输出为低电平;4、电机控制有一方向选择控制端DIR,当DIR为高电平时,电机反转,反之为正转;5、DIR有效电平时插入,要能使 A路在下一拍即改变转向;6、有三位输出频率控制器,可以将输入频率分成八种频率输出;7、要求用 VHDL语言来实现,并提供仿真波形图;8、设计平台用XILINX公司XC9572来实现。

设计主要解决的是如何使脉冲分配器既要实现三相六拍工作,又要实现双三拍工作;同时为了使步进电机调速范围广,并且无需频繁中断,还需要设计分频器对输入脉冲进行有效地八种分频。具体的设计思路如下:论证步进电机脉冲分配器的实现方式,确定用可编程逻辑器件来实现,把XILINX公司XC9572高性能的CPLD器件作为脉冲分配器的芯片;通过逻辑分析后,用VHDL语言设计分频器和状态机的程序,并把程序进行编译,再通过波形仿真,形成仿真波形图;选用斩波驱动放大电路和磁阻式步进电机。基于CPLD的多功能脉冲分配器能达到设计的技术要求,基本能够按设计要求工作。 2 步进电机脉冲分配器实现方式的论证

2.1 几种实现方式比较 (1)逻辑电路法

中、小规模数字集成电路(如74系列及其改进系列、CC4000系列、74HC系列等)都属于通用型数字集成电路。这种方法是由与或门电路和触发器构成的,它们的逻辑功能都比较简单,而且是固定不变的。由于它们的这些逻辑功能在组成复杂数字系统时经常要用到,所以这些器件有很强的通用性,早期的电路设计大多采用这种方法来实现。

从理论上来讲,用这些通用型的中、小规模集成电路可以组成复杂的数字系统,但是在目前的应用中,由于控制要求的不同和应用范围的变大,为了实现复杂的要求就需要增加一定的门电路和触发器,其印制板的面积随之增加,成本也随之增加,而可靠性却随之下降,其电路也比较复杂。另外这种脉冲分配器的最大缺点是:脉冲分配的路数受计数器和译码器的限制,不能是任意的,它还要有专门的控制和功放电路,其应用灵活性差。因此现在这种方法已经很少采用了。 (2)专用集成电路法

如果把所设计的数字系统做成一片大规模集成电路,则不仅能减少电路的体积、重量、功耗,而且会使电路的可靠性大为提高。这种为某种专门用途而设计的集成电路叫做专门集成电路,即所谓的ASIC(Application Specific Integrated Circuit的缩写)。目前脉冲分配器的专门集成电路已经有很多,如5G674、CH250等。它们集成度高,抗干扰能力强,但是这些集成电路控制方式都不灵活。集成电路设计完成以后其逻辑关系和时序过程就完全确定了,无法修改和更新,所以在很

2

盐城工学院本科生毕业设计说明书(2007)

大程度上限制了它的应用范围。而且在用量不大的情况下,设计和制造这样的专用集成电路不仅成本很高,而且设计、制造的周期也太长。 (3)软件实现(由单片机或PC机的扩展I/O输出)

采用软件实现,即利用查表或计算的方法来进行脉冲的环行分配。把相应的状态代码列入程序数据表中,通过软件可顺次在数据表中提取数据并通过输出接口输出即可。通过正向顺序读取和反向顺序读取数据表可控制电机进行正反转,通过控制读取一次的时间间隔可控制电机的转速。

将计算机软件技术应用于智能步进电机脉冲分配器硬件电路设计中,使步进电机脉冲分配器的电路具有微型化、低功耗、智能化的特点。解决了用硬件实现步进电机普遍适应性差的问题。这种方法可以大大简化硬件电路,降低了成本,提高了运行的可靠度和精度,易于修改;充分利用计算机软件资源以降低硬件成本,尤其是对多相的脉冲分配具有更大的优点。但是这种方法占用了较多的计算机CPU的时间,降低了计算机的运行效率和实时控制精度,易影响步进电机的运行速度,在高精度控制系统,这种方法是不可取的。 (4)用可编程逻辑器件实现

可编程逻辑器件(Programmable Logic Device,简称PLD)的出现为解决器件的选择问题提供了一条比较理想的途径。PLD虽然是作为一种通用器件生产的,但它的逻辑功能是由用户通过对器件的编程来设定的。而且有些PLD的集成度很高,足以满足设计一般数字系统的需要。这样可以由设计人员自行编程,把一个数字系统“集成”在一片PLD上,而不必去请芯片制造厂商设计和制造专门集成电路芯片。

自80年代以来PLD的发展非常迅速。目前生产和使用的PLD产品主要有现场可编程逻辑阵列FPLA(系Field Programmable Logic Array的缩写)、可编程阵列逻辑PAL(系Programmable Array Logic的缩写)、通用阵列逻辑GAL(系Generic Array Logic的缩写)、可擦除的可编程逻辑器件EPLD(系Erasable Programmable Logic Device的缩写)、复杂可编程逻辑器件CPLD(系Complex Programmable Logic Device的缩写)和现场可编程门阵列FPGA(系Field Programmable Gate Array的缩写)等几种类型。其中EPLD、CPLD和FPGA的集成度比较高,有时又把这三种器件称为高精度PLD。

复杂可编程逻辑器件CPLD是一种可擦除的、可重新编程的高密度PLD器件。其结构灵活,性能优越,功能可靠。几乎可以代替整个74LS系列、54LS系列、74HC系列和CC4000系列的器件(只有少量的除外)。它可以反复的擦除、改写,且擦除时间仅为10ms,不采用紫外线光源,也不需要窗口式的封装。在封装前后都可以对芯片进行反复的完善和实际的测试,测试的可靠性可以达到100%。并且它还可以加密,安全性能很好,设计者不用了解其内部的结构,只要能明确输入和输出之间的关系就可以编程了,编好程序后用编程器把程序写入器件即可。它具有易于编程和调试,

3

基于CPLD的多功能脉冲分配器系统的设计

集成度高,成本低,可靠性高等优点。同时CPLD作为设计复杂逻辑密集型集成电路的主要器件,在功耗方面也显示出优势,与同样密集度的其它PLD相比,CPLD的待机功耗最低。 2.2 确定方案

随着超大规模集成电路的集成度和工艺水平的不断提高,CPLD得到了广泛的应用,它们不仅具有GAL芯片的所有优点,而且由于它规模大、引脚多且功耗低,所以非常适用于各种复杂控制的场合。同时VHDL语言可以很好地描述由CPLD组成的逻辑电路。因此本次毕业设计采用这种方案,用CPLD设计多功能脉冲分配器。

3脉冲分配器的设计

脉冲分配器是整个步进电机控制电路的核心部分。

步进电机运行时,要求把有相当功率的电脉冲按要求逻辑馈送给它的各个控制绕组。而电脉冲是如何按照要求的逻辑馈送的呢?这是由脉冲分配器来完成。在设计中,脉冲分配器需要设计成能控制指令按照一定顺序和分配方式传送到功率放大电路。然后经放大后控制步进电机的绕组按照预先规定的工作方式通、断电,驱动电机转子旋转。

在具体的脉冲分配器设计过程中,主要分硬件和软件两部分来设计。 3.1 脉冲分配器的硬件部分设计

随着超大规模集成电路的集成度和工艺水平的不断提高,深亚微米工艺,如0.18um、0.13um已经走向成熟,专用集成电路ASIC的设计成本在不断降低。CPLD/FPGA作为实现ASIC的主流器件,它们的特点是直接面向用户,具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,成本低,工作可靠性好。

设计要求步进电机的工作模式有以下两种:三相双三拍和三相六拍。其正转激励分别为:AB—BC—CA—AB?;A—AB—B—BC—C—CA—A?。其反转激励分别为:AC—BC—AB—AC?;A—AC—C—BC—B—AB—A?。在同一频率输入脉冲下,双三拍工作方式的转速为三相六拍方式的2倍,可使伺服系统快速运动,但由于步距相对较大,其定位精度是三相六拍方式的

12。而三相六拍方式运动速度相对较慢,但定

位精度提高一倍。因此在步进电机的控制过程中,常需要将两种方式结合在一起使用,使系统在快速工作时用双三拍工作方式,而需要定位时用三相六拍方式。与此同时,为了扩大步进电机的转速范围,有专门的分频功能,可以使步进电机有八种速率转动方式。这就是说,所设计选用的脉冲分配器芯片既要实现三相六拍工作,又要实现双三拍工作,同时还需要有三位输出频率控制端,将输入脉冲信号频率分成八种频率输出。而XC9572 CPLD器件刚好能轻松地满足这些要求。

4

盐城工学院本科生毕业设计说明书(2007)

3.3.1 XC9572芯片介绍

XC9572 CPLD器件是XILINX公司生产的一款高性能可编程逻辑器件。每个XC9572器件由四个功能块FB(Function Block)、一个输入/输出块IOB和一个开关矩阵FastCONNECT组成互连的系统。每个FB由18个独立的宏单元组成,每个宏单元可实现一个组合电路或寄存器的功能;每个FB提供36个输入和输出具有可编程逻辑的容量,其中18个输出用于驱动FastCONNECT开关矩阵;FB除接受来自FastCONNECT的输入外,还接收全局时钟、输出使能和复位/置位信号。IOB是内部逻辑电路和用户I/O引脚之间的接口,提供器件输入和输出的缓冲;每个IOB包括一个输入缓冲器、输出驱动器、输出使能数据选择器和用户可编程接地控制器。具体结构图如图3-1所示。

图3-1 XC9572芯片结构图

XC9572芯片的主要特点如下:

(1)所有可编程管脚间的脚对脚延时均为5ns; (2)系统的时钟速度可达到125MHz; (3)具有72个宏单元和1600个可用系统门; (4)可编程次数为10000次; (5)可采用5V在线编程和擦除; (6)拥有强大的管脚锁定能力;

5

基于CPLD的多功能脉冲分配器系统的设计

(7)每个宏单元都具有可编程低功耗模式; (8)未用的管脚有编程接地能力;

(9)提供有编程保密位,可对设计提供加密保护以防止非法读取; (10)外部I/O引脚与3.3V和5V兼容。

选用的实际XC9572芯片及其管脚图分别如图3-2和图3-3所示。

图3-2 XC9572芯片实图 图 3-3 XC9572管脚图

3.1.2 XC9572芯片在设计中有关管脚功能分析

根据设计要求对XC9572芯片进行管脚分配,管脚分配如图3-4所示。具体说明如下:

CP是时钟输入脚。脉冲分配器用来接受来自控制器的CP脉冲,并按步进电机状态转换表的状态顺序产生各相接通或截止的信号。每来一个CP脉冲,脉冲分配器的输出就转换一次。因此步进电机转速的高低、升速或降速、启动或停止都要取决于CP脉冲的有无或频率的大小。

EX是复位脚。EX=0时,电机正常运行;而EX=1时,则输出全为0,芯片复位,电机停止运行。

DIR是正反转控制脚。当DIR为0时,芯片输出正转脉冲;而当DIR为1时,芯片输出反转脉冲。值得注意的是,DIR信号需要即时有效,例如当步进电机运行在三相六拍的正转模式的BC拍时,DIR信号为高电平,电机需要反转,则下一时钟的上升沿,脉冲分配器需要输出B拍。

MODE是双三拍和三相六拍模式选择脚。当MODE为0时,芯片是三相六拍输出;

6

盐城工学院本科生毕业设计说明书(2007)

而当MODE为1时,芯片是双三拍输出。

RST是分频模块的复位脚。RST为1时,内置的计数值清零重新计数。 a1、a2、a3是三位输出频率控制脚。通过改变a1、a2、a3来控制频率的大小。 OUTA、OUTB、OUTC是芯片的三相输出脚。

图3-4 XC9572芯片有关管脚的端口功能分布图

上述功能也可以简单的以表格的形式来描述,如表3-1所示。

表3-1 脉冲分配器功能表

输入 CP X ↑ ↑ ↑ ↑ EX 1 0 0 0 0 MODE X 0 0 1 1 DIR X 0 1 0 1 OUTA 输出 OUTB OUTC 输出全0,芯片复位 三相六拍正转 三相六拍反转 双三拍正转 双三拍反转 上表并未给出分频模块的功能,进入放大电路的实际频率是CP经分配器分频后输出的CLK_OUT。

如果要求一个XC9572芯片控制两台步进电机的运行,只需在XC9572的输出端口加三路输出OUTa、OUTb、OUTc,其输出特性和OUTA、OUTB、OUTC三相相同。

7

基于CPLD的多功能脉冲分配器系统的设计

3.2 脉冲分配器的软件部分设计及波形仿真

随着计算机技术、超大规模集成电路技术的发展,传统的硬件系统设计方法很难满足硬件设计复杂度快速增长以及设计成果可继承性的需要,从而导致了采用硬件描述语言的硬件电路设计方法的兴起。

所谓硬件描述语言(HDL),就是可以描述硬件电路的功能、信号连接及定时关系的语言。硬件描述语言HDL有多种类型,最有代表性的是美国国防部开发的VHDL(VHSIC Hardware Description Language)语言和Verilog公司开发的Verilog HDL语言。

VHDL语言具有与硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言的层次化、结构化和易读性设计方面,表现了强大的生命力和应用潜力,因此选用VHDL语言进行编程。 3.2.1 VHDL语言的特点和基本结构

VHDL语言是一种国际标准的硬件描述语言,具有丰富的表达能力,可使不同复杂度(系统级/电路板级/芯片级/门级)的电路网络在同一抽象程度上被描述,其支持系统级、寄存器级、门级三种不同层次,是未来数字系统设计的主流。

VHDL语言与一般的计算机高级语言相比,具有如下优点: (1)通用性和设计的可变换性

VHDL语言是一种国际标准的硬件描述语言,几乎所有的综合仿真工具都支持它。由于VHDL是一种标准,所以VHDL模型可以在与此标准相一致的任意系统上运行,这就意味着无论是否使用了相同的设备,在一个地方建立的模型,都可以在另外一个地方运行。因而设计者可以交换一个数字系统的子系统的高层次描述,从而独立地发展每个子系统。

(2)支持多种设计方法和设计技术

VHDL语言支持Top Down和基于库(Library_Based)的设计方法,而且还支持同步电路、异步电路、FPGA和其它随机电路的设计,其范围之广是其它HDL语言所不能比拟的。

(3)系统硬件描述能力强

VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路。另外,高层次的行为描述可以和低层次的RTL描述及结构描述混合使用。VHDL语言能进行系统级的硬件描述,这是它的一个最突出的优点。其它HDL语言如UDL/I、Verilog等只能进行IC级或PCB级描述,而不能对系统级的硬件进行很好的描述。

(4)大规模设计和设计的再利用

在完成一个大型硬件系统的设计后,分解设计和描述设计的功能同等重要。在VHDL中,有些功能是专门为此而开发的。在VHDL中出现的程序包、配置说明和表

8

盐城工学院本科生毕业设计说明书(2007)

示一个实体的各种不同实现的多个结构体的概念,都体现了对设计共享、实验及设计管理的支持。

一个完整的VHDL语言程序通常包含实体(entity)、结构体(architecture)、配置(configuration)、包集合(package)和库(library)5个部分,如图3-5所示。实体用于描述所设计的系统的外部接口信号;结构体用于描述系统内部的结构和行为;配置用于从库中选取所需单元来组成系统;包集合存放各设计模块能共享的数据类型、常数、程序等;库用于存放已编译的实体、构造体、包集合、配置。

配 置 图3-5 VHDL语言程序基本结构

实 体 结构体 说明语句 功能描述语句 库、包集合 VHDL文件 下面是一个完整的VHDL程序设计的基本语法结构。 library<库名>;——————指定库名

use<库名>.<程序包名>.all;——————指定程序包 ?

entity 实体名称 is [generic(类属声明)];—————实体声明 [port(端口声明)]; end[实体名称];

architecture 结构体名称of 实体名称 is—————结构体声明 {块声明语句}; begin

{并行处理语句}; end[结构体名称]; 3.2.2 控制逻辑分析

设计要求步进电机以三相六拍和双三拍方式工作。如果以“0”表示绕组断电,以“1”表示绕组通电。那么对于ABC三相绕组来说,步进电机在正、反转时,脉冲分配器输出对应的脉冲序列应为:

三相六拍正转:A—AB—B—BC—C—CA—A?

100—110—010—011—001—101—100?

9

基于CPLD的多功能脉冲分配器系统的设计

三相六拍反转:A—AC—C—BC—B—AB—A?

100—101—001—011—010—110—100? 双三拍正转:AB—BC—CA—AB? 110—011—101—110? 双三拍反转:AB—AC—BC—AB? 110—101—011—110? 脉冲分配器输出对应的波形如图3-6所示。

CP A B C

(a) 三相六拍正转

CP A B C

(b)三相六拍反转

CP A B C

(c)双三拍正转

CP A B C

(d)双三拍反转 图3-6 逻辑分析输出波形图

10

盐城工学院本科生毕业设计说明书(2007)

同时脉冲分配器提供八种频率的输出脉冲信号,这就需要设计一个分频器,把输入的脉冲信号分频为八种不同频率的输出脉冲信号。分频的主要原理是把输入脉冲信号按控制要求进行延时后输出,不同的延时时间可以起到不同分频的作用,如把两个输入脉冲延时为一个脉冲输出,那就是二分频,那么要达到1—8分频就容易实现。同时还要考虑输出脉冲信号的占空比为1:1,即输出脉冲信号的高低电平所占的空间大小一致。这样,通过分频器分频后能够得到八种不同频率的输出脉冲信号,从而实现步进电机八种转速的选择。

了解了具体的控制逻辑后,可以分别对分配模块和脉冲分配状态机进行具体的程序设计和波形仿真。 3.2.3 分频模块的设计和波形仿真

分频器是数字电路中最常用的电路之一。在数字电路中,常需要对较高频率的时钟信号进行分频操作,得到较低频率的时钟信号。而计数器是实现分频电路的基础,通过计数器对脉冲信号的计数,按预定的要求限制脉冲个数,可以延长输出脉冲周期,同时缩小了频率,从而达到了分频的效果。

根据设计要求有三位输出频率控制端,可以将输入频率分成八种频率输出。也就是说,需要把输入的脉冲信号按由

a1、a2、a3 三个控制端形成不同的控制顺序

组合进行分频,然后有1—8分频后对应的八种不同频率脉冲信号输出,进而实现步进电机的八种转速的选择。

在1—8的分频过程中,为了使输出脉冲信号的占空比一致,达到1:1的效果,涉及1、3、5、7的奇数分频和2、4、6、8的偶数分频。偶数分频最易于实现,欲实现占空比为1:1的偶数N分频,一般来说有两种方案:一是当计数器计数到

N2时,

将输出电平进行一次翻转,同时给计数器一个复位信号,如此循环下去;二是当计数器输出为0到

N2-1时,时钟输出为0或1,计数器输出为

Ν2到N-1时,时钟输出为1

或0,当计数器计数到N-1时,复位计数器,如此循环下去。需要说明的是,第一种方案仅仅能实现占空比为50%的分频器,第二种方案可以有限度的调整占空比。实现奇数分频相对难一些,欲实现占空比为1:1的2N+1分频器,则需要对分频时钟的上升沿和下降沿分别进行

N2N+1分频,然后将两个分频所得的时钟信号相或得到占

空比为1:1的2N+1分频器。特别需要指出的是,奇数1分频其实没有涉及频率的分频,可以把原来的输入脉冲信号无需分频就可作为输出脉冲信号直接输出。 根据以上分析,编写分频器的VHDL程序代码。分频程序由奇数分频部分、偶数分频部分和整体输出部分组成。分频程序清单见附录2。

具体的分频结果仿真波形图如图3-7所示。

11

基于CPLD的多功能脉冲分配器系统的设计

(a) 一分频波形图

(b) 二分频波形图

(c) 三分频波形图

(d) 四分频波形图

12

盐城工学院本科生毕业设计说明书(2007)

(e) 五分频波形图

(f) 六分频波形图

(g) 七分频波形图

(h) 八分频波形图

图3-7 分频结果仿真波形图

13

基于CPLD的多功能脉冲分配器系统的设计

3.2.4 脉冲分配状态机的设计和波形仿真

利用VHDL设计的实用逻辑系统中,有许多是可以利用有限状态机的设计方案来描述和实现的。与基于VHDL的其它设计方案相比,状态机具有其突出的优越性,它的主要表现有以下几方面:

(1)状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的工作方式是根据控制信号按照预先设定的状态进行顺序运行的,状态机是纯硬件数字系统中的顺序控制电路,因此状态机在运行速度和工作可靠性方面十分突出。 (2)由于状态机的结构模式相对简单,设计方案相对固定,特别是可以定义符号化枚举类型的状态,这一切都为VHDL综合器尽可能发挥其强大的优化功能提供了有利条件。而且,性能良好的综合器都具备许多可控或自动的优化状态机的功能。 (3)状态机容易构成性能良好的同步时序逻辑模块,这对于对付大规模逻辑电路设计中令人深感棘手的竞争冒险现象无疑是一个上佳的选择。为了消除毛刺现象,在状态机设计中有许多设计方案可供选择。

(4)与VHDL的其它描述方式相比,状态机的VHDL表述丰富多样,程序层次分明、结构清晰、易读易懂;在排错、修改和模块移植方面也有其独到的好处。 (5)在高速运算和控制方面,状态机更有巨大的优势。由于在VHDL中,一个状态机可以由多个进程构成,一个结构体中可以包含多个状态机,而一个单独的状态机(或多个并行运行的状态机)以顺序方式所能完成的运算和控制方面的工作量本身就大。

(6)就可靠性而言,状态机的优势也是十分明显的。首先状态机是由纯硬件电路构成,它的运行不依赖软件指令的逐条执行,因此不存在软件运行过程中许多固有的缺陷;其次是状态机的设计能使用各种完整的容错技术;再次是当状态机进入非法状态并从中跳出,进入正常状态所耗的时间十分短暂,通常只有两三个时钟周期,约十纳秒,尚不足以对系统的运行构成损害。

在实用的逻辑系统中,一个完整的状态机设计过程包含几个步骤:

(1)确定任务和分析功能。首先要对实际应用问题进行分析和归纳,以明确控制系统的任务以及要实现的功能。

(2)把设计任务按逻辑要求转化为状态图。即确定所采用的状态机的每一个状态,以及状态之间转换的转换条件。

(3)根据状态图(或把状态图转化为状态表,并对状态图和状态表进行必要的简化处理),设计状态机的源程序。

(4)编辑程序,完成编译仿真。

脉冲分配事实上就可以用一个复杂的状态机来描述和实现。

根据步进电机的工作方式,画出的脉冲分配状态转换图如图3-8所示。

14

盐城工学院本科生毕业设计说明书(2007)

图3-8 脉冲分配的状态转换图

图中共有7个状态,其转换条件是模式信号MODE和方向选择信号DIR合成的矢量;STATE0是复位态,当EX=0时,系统复位,OUTA、OUTB、OUTC输出低电平;其它六个状态对应三相六拍的六个状态(双三拍的三个状态包含在六个状态中),如STATE_BC表示在BC拍,OUTB、OUTC输出高电平,OUTA输出低电平。从图3-6可以看出,在某个模式下,当DIR有效时,状态机转移到相应模式下的环行脉冲序列的下一状态。如在三相六拍的STATE_BC状态时,如果模式改变(即MODE=‘1’,为双三拍模式),则当DIR=0时,Trans_value=10,此时转移到STATE_AC,而如果DIR=1,则Trans_value=11,状态机转移到STATE_AB。

把状态图转化为状态表,可以分成四种不同模式的状态表。

表3-2 脉冲分配的状态表

(a) 三相六拍模式

输入 CP X ↑ ↑ ↑ ↑ ↑ ↑ EX 1 0 0 0 0 0 0 MODE X 0 0 0 0 0 0 DIR X 0 0 0 0 0 0 OUTA 0 1 1 0 0 0 1 输出 OUTB 0 0 1 1 1 0 0 OUTC 0 0 0 0 1 1 1 15

基于CPLD的多功能脉冲分配器系统的设计

续:表3-2 (b) 三相六拍反转模式

输入 CP X ↑ ↑ ↑ ↑ ↑ ↑ EX 1 0 0 0 0 0 0 MODE X 0 0 0 0 0 0 DIR X 1 1 1 1 1 1 OUTA 0 1 1 0 0 0 1 输出 OUTB 0 0 0 0 1 1 1 OUTC 0 0 1 1 1 0 0 (c) 双三拍正转模式

输入 CP X ↑ ↑ ↑ EX 1 0 0 0 MODE X 1 1 1 DIR X 0 0 0 OUTA 0 1 0 1 输出 OUTB 0 1 1 0 OUTC 0 0 1 1 (d) 双三拍反转模式

输入 CP X ↑ ↑ ↑ EX 1 0 0 0 MODE X 1 1 1 DIR X 1 1 1 OUTA 0 1 1 0 输出 OUTB 0 1 0 1 OUTC 0 0 1 1 根据以上分析,编写脉冲分配状态机的VHDL程序代码。脉冲分配程序根据转换条件(模式信号MODE和方向选择信号DIR合成的矢量),实现7个状态之间的转换,并且各个状态有各自不同的输出。脉冲分配程序清单见附录3。

具体的脉冲分配仿真波形图如图3-9所示。

16

盐城工学院本科生毕业设计说明书(2007)

(a) 三相六拍正转

(b) 三相六拍反转

(c)双三拍正转

(d) 双三拍反转 图3-9 脉冲分配仿真波形图

17

基于CPLD的多功能脉冲分配器系统的设计

3.2.5 整个脉冲分配器芯片的顶层实体实现

根据前面对步进电机脉冲分配器的端口功能描述,分频器的脉冲分频功能及状态机脉冲分配功能的实现。把系统分为2个模块:?分频器,它将输入脉冲信号CP分成八种频率,并通过a1、a2、a3的设定选择某一种频率输出。?状态机,它根据EX、MODE、DIR的选择,控制步进电机按照规定模式运行。分频模块输出的时钟信号CLK_OUT作为状态机分配脉冲的输入时钟信号。 两个模块之间的连接关系如图3-10所示。

图3-10 芯片的模块划分图

根据上述功能的划分,下面需完成芯片的顶层实体top_level的VHDL的实现。顶层文件程序清单见附录1。 3.3 设计综合输出

最后通过ispDesignExpert Navigator软件将设计中的输入输出引脚定义到可编程逻辑器件XC9572的具体输入输出引脚上,完成设计的功能实现。生成的资源使用情况如表3-3所示。

表3-3 生成的资源使用情况表

宏单元使用率 乘积项使用率 寄存器使用率 管脚使用率 功能块输入率 23/72 (32%) 75/360 (21%) 14/72 (19%) 11/34 (32%) 31/144 (22%)

4放大电路选用

步进电机的驱动有多种方式,这里选择转矩特性好,电路工作稳定,成本低的斩波恒流驱动方法。

18

盐城工学院本科生毕业设计说明书(2007)

图4-1 斩波驱动电路原理图

斩波驱动电路的原理图如图4-1所示。它的工作原理是:脉冲分配器输出的脉冲作为输入信号,若为正脉冲,则VT1、VT2导通,由于U1电压较高,绕组L回路又没串联电阻,所以绕组中的电流i迅速上升,当绕组中的电流上升到额定值以上某个数值时,由于采样电阻Re的反馈作用,经整形、放大后送至VT1的基极,使VT1截止。接着绕组由U2低压供电,绕组中的电流立即下降,但刚降至额定值以下时,由于采样电阻Re的反馈作用,使整形电路无信号输出,此时高压前置放大电路又使VT1导通,电流又上升。如此反复进行,形成一个在额定电流值上下波动呈锯齿状的绕组电流波形,近似恒流,所以斩波电路也称斩波恒流驱动电路。锯齿波的频率可通过调整采样电阻Re和整形电路的电位器来调整。锯齿状绕组电流波形如图4-2所示。

图4-2 锯齿状电流波形图

该电路的采样电阻Re很小(一般为0.2Ω左右),能使系统的功耗下降很小,相应地就提高了效率。同时由于采样电阻Re的反馈作用,使绕组中的电流可以恒定在额定的数值上,而且不随步进电动机的转速而变化,从而保证在很大的频率范围内,步进电动机都能输出恒定的转矩。

19

基于CPLD的多功能脉冲分配器系统的设计

5步进电机的选用

步进电机的品种规格很多,而应用最广泛的、适用性最强的是磁阻式步进电机。磁阻式步进电机能够简单地做到高精度定位控制,而且加速性能优越,可做到瞬时起动、停止、正反转等快速的定位动作。同时在停止状态下(无脉冲波信号输入时),仍具有激磁保持力,可以不依靠机械式的刹车,就能做到停止位置的保持。这里把磁阻式步进电机选为应用步进电机。 5.1 磁阻式步进电机的工作原理

尽管步进电机的内部几何形状不完全相同,但不管是励磁式或反应式步进电机,其工作原理都是基于电磁力的吸引和排斥产生转矩,与同步电机原理一致,总能以其中的一种来描述其特性。

图5-1 磁阻式步进电机的工作原理示意图

图5-1是说明磁阻式步进电机工作原理的示意图。它的定子上有六个极,转子有四个极。定子磁极上有三相绕组,每组绕组由相互串联的两个线圈构成。一组绕组叫做一相。因此图5-1所示的电机为三相步进电机,直流电源通过开关I、II和III,驱动绕在定子上的通电绕组。状态(1),开关I闭合,A相通电。由于A相绕组受到激磁,空隙里出现如箭头所示的磁场。A相上的两个定子磁极与两个转子齿

20

盐城工学院本科生毕业设计说明书(2007)

对准,转子处于平衡状态。若再闭合开关II激磁B相,如状态(2)所示,B相的定子磁极以相同的方式产生磁场,在磁力线的张力作用下,产生逆时针方向的转矩。于是,转子沿着逆时针方向转过一个固定的角度,到达状态(3)。图中,转过的角度为15?。如果现在打开开关I,去掉A相的激磁,转子将再转过15?,到达状态(4)。因此转子的角位置可以用这种开关方式进行控制。若开关以某种时序转换,则转子就能以步进运动的方式连续旋转;若进一步使时序转换的速度可调,则平均速度也能用这种开关方式进行控制。

实际上,磁阻式步进电机的开关是晶体管,开关信号由数字集成电路或微机产生。通过前面的介绍可以看到,磁阻式步进电机是一种把开关激励的变化变换成精确的转子位置增量运动的执行机构。与能够实现类似功能的其他部件相比,使用磁阻式步进电机的控制系统有下面几个明显的优点:

(1)通常不需要反馈就能对位置或速度进行控制。 (2)位置误差不会累积。 (3)与数字设备兼容。

5.2 磁阻式步进电机按设计要求的工作方式

图5-2 A相通电定转子对齐情况

下面以三相磁阻式步进电机为例介绍一下磁阻式步进电机的工作方式。图5-2是国内常见的三相磁阻式步进电机的剖析图。电机定子的每两个相对的极组成一相,极上绕组反向串联,以此形成N-S极。电机的转子周围上均布40个小齿,故其齿距角?z?360?/40?9?。 5.2.1 三相六拍工作

最初以A相通电,转子齿与A相定子齿对齐,磁路如图5-3(a)所示。第二拍,

21

基于CPLD的多功能脉冲分配器系统的设计

A相继续通电,同时接通B相。由A、B两相各自建立的磁场合成以C?C'为轴线的合成磁场,其磁路分布如图5-3(b)所示。这时,转子齿既不对准A相,也不对准B相,而是对准A、B两极轴线的角等分线,使转子齿相对于定子齿转过1/6齿距,即1.5?。第三拍,A相切断,仅B相保持接通。这时,由B相建立的磁场与单三拍时B相通电的情况一样,磁路分布如图5-3(c)所示。转子齿相对于A相定子齿转过了3?。同理,第四拍保持B相通电,再接通C相,?。绕组励磁以A—AB—B—BC—C—CA—A时序(或反时序)转换6次,磁场旋转一周,转子前进一个齿矩,每次切换均使转子转动1.5?,故这种通电方式称为三相六拍工作方式。

图5-3 六拍分配方式的磁场图

22

盐城工学院本科生毕业设计说明书(2007)

5.2.2 双三拍工作

这种工作方式每次都有两相导通,两相绕组处在相同电压之下,以AB—BC—CA—AB(或反之)方式通电,故称为双三拍工作方式。以这种方式通电,转子齿所处的位置相当于六拍控制方式中去掉单三拍后的三个位置,具体磁路见图5-3(b)、(d)和(f)。它的步距角计算公式与单三拍时的公式相同。

由上述分析可知,要使磁阻式步进电机具有工作能力,最起码的条件是定子极分度角不能被齿距角整除,且应满足下列方程:

极分度角/齿距角= R?K?1m (5-1)

进一步简化得齿数 Z:

Z?q(mR?k) (5-2) 式中:m-----相数;

q-----每相的极数;

k-----?(m-1)的正整数;

R-----正整数,为0、1、2、3 ?;

按选定的相数和不同的极数,由上式(5-2)就可推算出转子齿数。

6 结 束 语

设计的脉冲分配器可以控制三相步进电机。通过MODE可以选择三相六拍和双三拍不同的工作方式;改变DIR控制的高低电平,使步进电机能够改变正、反转;同时可以根据分频器的三个控制端

a1、a2和a3的不同组合,选择相应的输出频率

脉冲来控制电机的不同转速。不同的模式选择可以适应不同的场合需要。

由于采用了可编程逻辑器件和VHDL语言,而CPLD芯片可以重复擦写,因此只需稍微改动程序,在无需改变电路的结构情况下就可以方便地构成四相、五相等各种步进电机的脉冲分配器;而稍改电路输出结构又能实现不同功能的转换,如:可使脉冲分配器输出多路脉冲以驱动多台步进电机。这种基于芯片的设计方法将是今后数字系统设计的主流。

另外,所设计的系统也存在一定的缺陷,如状态机设计的程序语言在仿真过程中存在一定的延时现象;分频功能只限于1—8分频,使步进电机转速范围有限;驱动放大电路的电磁噪音相对较大等一些问题。因此需要进一步改进和完善,特别是对于程序设计方面的加工尤为重要,同时对硬件的完善也是十分必要的。设计系统整体性能的提高,使步进电机能够更加方便、精确、灵活的运行工作。

23

基于CPLD的多功能脉冲分配器系统的设计

参考文献

[1] 孙涵芳.可编程逻辑器件PAL和GAL[M].北京:北京航空航天出版社,1990. [2] 冯昭逢.数字电路的逻辑设计[M].长沙:湖南科学技术出版社,1983. [3] 王鸿钰.步进电机控制技术入门[M].上海:上海同济大学出版社,1990.

[4] 张昌凡.可编程逻辑器件及VHDL设计技术[M].广州:华南理工大学出版社,2001. [5] 朱明程.XILINX数字系统现场集成技术[M].南京:东南大学出版社,2001. [6] 刘淑荣.基于VHDL语言的数字电路设计[J].长春:长春工程学院学报,2002. [7] 庞卫子.用VHDL设计新型步进电机脉冲分配器[J].北京:机床电器,2003. [8] 徐爱卿.可编程逻辑器件PAL和GAL[M].北京:北京航空航天出版社,1990. [9] 齐怀印.高级逻辑器件与设计[M].北京:北京电子工业出版社,1996.

[10] 侯伯亭. VHDL硬件描述语言与数字逻辑电路设计(修订版)[M].西安:西安电子科学大学

出版社,1999.

[11] 林明权. VHDL数字控制系统设计范例[M].北京:电子工业出版社,2002. [12] 于东海.用VHDL设计的步进电机脉冲分配器[J].北京:电机电器技术,2003. [13] 吴亮红.基于CPLD的可控步进电机脉冲分配器设计[J].北京:控制工程,2004. [14] 洪维华.一种新型步进电机脉冲分配器的研究[J].北京:微电机,2004. [15] 潘松.EDA技术实用教程[M].北京:科学出版社,2005.

24

盐城工学院本科生毕业设计说明书(2007)

致 谢

四年的大学生活转眼即逝,这段美好的求学生涯将是我人生最难忘的经历。 首先要感谢指导老师成开友副教授,正是在他的精心指导下,使我的设计工作得以顺利完成。在整个设计过程中,成老师在各方面给予了我无尽的关心、帮助和教诲。从设计的选题、设计的研究到设计说明书的撰写,以及最后的修改和完善,无不凝聚着老师的心血和汗水。成老师严谨的治学态度和实事求是的工作作风使我终身受益。在此向一直以来关心和帮助我的成老师表示衷心的感谢。

同时感谢给予我帮助的各位老师。

最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们。

25

韩 清 2007-06-14

基于CPLD的多功能脉冲分配器系统的设计

附 录

附录1 顶层文件程序清单

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL; entity top_level is

port (cp : in std_logic;

a1, a2, a3 : in std_logic; rst : in std_logic; dir : in std_logic; ex : in std_logic; mode : in std_logic;

outA, outB, outC : out std_logic); end top_level;

architecture rt1_top_level of top_level is signal clk_out : std_logic; component divider

port (cp : in std_logic; a1 : in std_logic; a2 : in std_logic; a3 : in std_logic; rst : in std_logic;

clk_out : out std_logic); end component;

component double3and6 port (cp : in std_logic; dir : in std_logic; ex : in std_logic; mode : in std_logic;

outA, outB, outC : out std_logic); end component;

signal clk_T : std_logic; begin

u1 : divider port map (cp => cp, a1 => a1, a2 => a2, a3 => a3,

26

盐城工学院本科生毕业设计说明书(2007)

rst => rst,

clk_out => clk_T); u2 : double3and6 port map (cp => clk_T, dir => dir, ex => ex,

mode => mode, outA => outA, outB => outB, end rt1_top_level;

outC => outC); 27

基于CPLD的多功能脉冲分配器系统的设计

附录2 分频程序清单 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL; entity divider is

port(cp: in std_logic;

a1,a2,a3: in std_logic; rst: in std_logic;

clk_out: out std_logic); end divider;

architecture a of divider is

signal count:std_logic_vector(1 downto 0); signal mode:std_logic_vector(2 downto 0); signal clk_temp:std_logic;

signal cnt1,cnt2:integer range 0 to 2; signal cnt3,cnt4:integer range 0 to 4; signal cnt5,cnt6:integer range 0 to 6;

signal clk1,clk2,clk3,clk4,clk5,clk6:std_logic;

signal clk_out1,clk_out2,clk_out3,clk_out4,clk_outT,clk_outTT:std_logic; begin

mode <= a3&a2&a1;

process(cp, count, mode, clk_temp) begin

if(cp'event and cp = '1') then if mode = \ if (count = \ count <= (others=>'0'); clk_temp <= not clk_temp; end if; end if;

if mode = \ if (count = \ count <= (others=>'0'); clk_temp <= not clk_temp; else

count <= count + 1; end if; end if;

28

盐城工学院本科生毕业设计说明书(2007)

if mode = \ if (count = \ count <= (others=>'0'); clk_temp <= not clk_temp; else

count <= count + 1; end if; end if;

if mode = \ if (count = \ count <= (others=>'0'); clk_temp <= not clk_temp; else

count <= count + 1; end if; end if; end if; end process;

clk_out1 <= clk_temp;

process(cp, mode,clk1,cnt1) begin

if(cp'event and cp = '1') then if mode = \ if(cnt1 < 2) then cnt1 <= cnt1 + 1; else

cnt1 <= 0; end if;

if(cnt1 < 1) then clk1 <= '1'; else

clk1 <= '0'; end if; end if; end if; end process;

process(cp, mode,clk2,cnt2) begin

if(cp'event and cp = '0') then if mode = \

29

基于CPLD的多功能脉冲分配器系统的设计

if(cnt2 < 2) then cnt2 <= cnt2 + 1; else

cnt2 <= 0; end if;

if(cnt2 < 1) then clk2 <= '1'; else

clk2 <= '0'; end if; end if; end if; end process;

clk_out2 <= clk1 or clk2; process(cp, mode,clk3,cnt3) begin

if(cp'event and cp = '1') then if mode = \ if(cnt3 < 4) then cnt3 <= cnt3 + 1; else

cnt3 <= 0; end if;

if(cnt3 < 2) then clk3 <= '1'; else

clk3 <= '0'; end if; end if; end if; end process;

process(cp, mode,clk4,cnt4) begin

if(cp'event and cp = '0') then if mode = \ if(cnt4 < 4) then cnt4 <= cnt4 + 1; else

cnt4 <= 0; end if;

30

盐城工学院本科生毕业设计说明书(2007)

if(cnt4 < 2) then clk4 <= '1'; else

clk4 <= '0'; end if; end if; end if; end process;

clk_out3 <= clk3 or clk4; process(cp, mode,clk5,cnt5) begin

if(cp'event and cp = '1') then if mode = \ if(cnt5 < 6) then cnt5 <= cnt5 + 1; else

cnt5 <= 0; end if;

if(cnt5 < 3) then clk5 <= '1'; else

clk5 <= '0'; end if; end if; end if; end process;

process(cp, mode,clk6,cnt6) begin

if(cp'event and cp = '0') then if mode = \ if(cnt6 < 6) then cnt6 <= cnt6 + 1; else

cnt6 <= 0; end if;

if(cnt6 < 3) then clk6 <= '1'; else

clk6 <= '0'; end if;

31

基于CPLD的多功能脉冲分配器系统的设计

end if; end if; end process;

clk_out4 <= clk5 or clk6;

process(cp,rst,mode,clk_outT,clk_outTT,clk_out1, clk_out2,clk_out3,clk_out4) begin

if rst = '1' then

clk_outT <= '0'; else

clk_outT <= clk_outTT; end if;

if mode = \ clk_outTT <= cp; elsif mode = \ clk_outTT <= clk_out1; elsif mode = \ clk_outTT <= clk_out2; elsif mode = \ clk_outTT <= clk_out1; elsif mode = \ clk_outTT <= clk_out3; elsif mode = \ clk_outTT <= clk_out1; elsif mode = \ clk_outTT <= clk_out4; elsif mode = \ clk_outTT <= clk_out1; end if; end process;

clk_out <= clk_outT;

end a;

32

盐城工学院本科生毕业设计说明书(2007)

附录3 脉冲分配程序清单

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL; entity double3and6 is

port (cp : in std_logic; dir : in std_logic; ex : in std_logic; mode : in std_logic;

outA, outB, outC : out std_logic); end double3and6;

architecture rtl_double3and6 of double3and6 is

type statetype is (state0, state_A, state_AB, state_B, state_BC, state_C, state_AC); signal present_state, next_state :statetype; signal out_A, out_B, out_C : std_logic;

signal trans_value : std_logic_vector (1 downto 0); begin

trans_value <= mode & dir; state_colcked : process (cp, ex) begin

if ex = '1' then

present_state <= state0; elsif cp'event and cp = '1' then present_state <= next_state; end if;

end process state_colcked;

state_comb : process (present_state, next_state, trans_value) begin

case present_state is

when state0 => out_A <= '0'; out_B <= '0'; out_C <= '0'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0;

33

基于CPLD的多功能脉冲分配器系统的设计

end case;

when state_A => out_A <= '1'; out_B <= '0'; out_C <= '0'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0; end case;

when state_AB => out_A <= '1'; out_B <= '1'; out_C <= '0'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0; end case;

when state_B => out_A <= '0'; out_B <= '1'; out_C <= '0'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0; end case;

when state_BC => out_A <= '0'; out_B <= '1'; out_C <= '1'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0;

34

盐城工学院本科生毕业设计说明书(2007)

end case;

when state_C => out_A <= '0'; out_B <= '0'; out_C <= '1'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0; end case;

when state_AC => out_A <= '1'; out_B <= '0'; out_C <= '1'; case trans_value is

when \ when \ when \ when \ when others => next_state <= state0; end case;

when others => next_state <= state0;

end case;

end process state_comb;

process (cp, out_A, out_B, out_C) begin

if cp' event and cp = '1' then outA <=out_A; outB <=out_B; outC <=out_C; end if; end process; end rtl_double3and6;

35

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

Top