1 引言
Max+PlusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,它可独立完成简单VHDL程序的编译。然而,自动电梯控制程序是一个复杂的状态机描述,Max+PlusⅡ无法独立完成该程序的综合编译。Synplify Pro是 Synplicity 公司针对复杂可编程逻辑设计的 FPGA 综合工具,它带来了无与伦比的电路性能和最有效的可编程设计的资源利用率,所独有的对电路的调试与优化功能和极快的运算速度使之成为了业界倍受欢迎的的综合工具。Synplify pro所特有的FSM综合器可以自动识别有限状态机并根据约束条件选择最佳的编码方式。通过Max+PlusⅡ中的接口,把Synplify pro 用于对电梯控制程序的综合与优化,可大大提高设计效率,仿真和实验结果证实了该方法的有效性。
2 系统设计
2.1 系统的整体设计
在电梯控制系统的设计中,核心是电梯运行的状态控制器的设计。为突出状态之间的转换关系,令电梯以同一速率升降。主要需要考虑:(1)电梯的人工手动控制;(2)电梯的运行状态显示;(3)电梯的安全性控制;(4)电梯的策略控制设计。
电梯状态控制器部分用状态机来实现。基本模型如下:(1) 每一层电梯的入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关;(2)设有电梯所处位置指示装置以及电梯运行模式(上升或下降)指示装置;(3)电梯初始状态为第一层开门,电梯每一秒升(降)一层楼;(4)设计一个异步的置位端口,用于在系统不正常的时候回到初始状态;(5)电梯到达有停站请求楼层,经过1 秒电梯门打开,开门4 秒后,电梯门关闭(开门指示灯熄灭),电梯继续运行,直至执行完最后一个请求信号后停留在当前楼层;(6)能记忆电梯内外的所有请求信号,并按照电梯运行规则按顺序响应,每个请求信号保留至执行完后消除;(7)电梯运行规则:当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升至有下楼请求的最高楼层,然后进入下降模式。当电梯处于下降模式的时候与上升模式相反。
整个电梯控制系统将由一片CPLD来实现。外围的电路主要包括:分频器,七段数码显示模块、发光二极管显示模块,以及按键开关模块。
各模块的功能:电梯状态控制模块,是整个系统设计的核心,完成电梯的状态控制;显示模块,主要是将系统信息显示出来,判断电梯运行是否正常;分频器模块,由4MHZ的原始频率分频得到系统所需要的频率;按键开关模块,消除由于机械按键输入的误操作和防抖动。
图1 电梯的结构图
2.2 电梯状态控制器的设计
2.2.1 设计思路
(1)电梯输入输出端口设计。输入端口包括:一个异步的置位端口,用于在系统不正常的时候回到初始状态;在电梯外部的升降的请求端口,一层不需要有下降请求,最高层不需要上升请求,中间层上升、下降请求端口都应具备;在电梯内部的各层停留的请求端口;一个用于驱动电梯的上升下降以及开门关门等动作时钟输入端口以及一个时钟频率比电梯高得多的按键时钟输入端口。而响应的输出端口包括:升降请求信号响应端口,有请求信号以后,该输出端口的输出逻辑“1”,被响应后则恢复到逻辑“0”;电梯内部的各层停留响应端口;在电梯外部指示电梯的位置端口;电梯开门关门的状态指示端口以及电梯升降指示端口。
(2)电梯控制器的实现通过状态机实现,将电梯等待的每秒钟以及开门关门都看成一个独立的状态。由于电梯每一秒升(降)一层,所以就可以通过一个统一的1 秒为周期的时钟来触发状态机。由此,状态机设置了10 个状态,分别是“stopon1(电梯停留在1 层)”、“dooropen(开门)”、 “doorclose(关门)”、“doorwait1(开门等待第1 秒)”、“doorwait2(开门等待第2 秒)”、“doorwait3(开门等待第3 秒)”、“doorwait3(开门等待第4 秒)”、“up(上升)”、“down(下降)”和“stop(停止)”状态。每个状态之间的转换条件由设计要求决定。
2.2.2程序设计
在构造体的设计中,设计了两个进程相互配合,一个是状态机进程,另外一个是信号灯控制进程。状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出来的“up(上升)”和“down(下降)”信号来控制的。
在状态机进程中,在电梯处于上升状态时,通过对信号灯来判断,决定下一个状态是继续上升还是停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态时继续下降还是停止;在电梯停止状态中,判断是最为复杂的,通过对信号灯的判断,决定电梯是上升、下降还是停止。
在信号灯控制进程中,由于使用了专用的按键时钟,频率较高,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏,按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程的判断条件,而up和down信号逻辑‘1’使得相应的信号灯熄灭。
2.3显示模块的设计
采用动态显示模式,循环点亮三个数码管,在扫描频率大于人眼睛的视觉暂留频率(24HZ)以上,就可以达到点亮单个七段数码管显示器,却能像有3个数码管同时点亮的视觉效果。
将楼层上升、下降以及楼层停止的信号用七段数码管显示出来,电梯上升、下降、停止输出的信号用3位二进制数表示,通过七段译码器将电梯状态控制器输出的3位二进制数译码为七段数码管的输入所需要的7位二进制数。最简的真值表如表2.3所示.相应的译码程序以及多路选择显示程序从略。
2.4分频器的设计
分频器是将输入的4MHZ信号分频为1Hz的信号,提供给状态机作为输入信号,另外分频器分频到4000HZ给动态显示模块以及按键模块作为扫描信号。根据设计的需要设计了三个分频器。
2.5 输入端口设计
在状态机的设计中,针对CPLD的容量,以三层电梯运行为例,定义了8个按键输入端。分别是:(1) 异步置位按键、(2)1层上升请求按键、(3) 2层上升请求按键、(4) 2层下降请求按键、(5) 3层下降请求按键 、(6)电梯1层停止请求按键、(7)电梯2层停止请求按键、(8)电梯3层停止请求按键。
3 设计结果及分析
3.1 电梯状态控制器的Synplify综合
使用Synplify pro对用VHDL语言编制的有限状态机的状态变化控制程序进行综合,经过综合之后的“RTL”(寄存器传输级)方式的电路原理图如图2所示。
图2 Synplify pro 综合后的状态转移图
3.2 仿真
综合编译完成后,值reset信号高电平有效,置为0,选择liftclk时钟信号为1HZ、buttonclk信号时钟为4000HZ。配置适当的输入信号,得到如图3的仿真结果。
原先电梯停留在第一层,电梯外第三层有下降请求,电梯上升到三层,乘客进入电梯以后要求下降一层,此时,电梯二层有下降请求,接着又有上升请求,电梯首先在第二层停留,然后下降到一层,随后再在响应第二层上升请求,上升到二层,乘客进入电梯以后要求上升到三层,所以电梯最后停留的位置是三层。
图3 三层电梯的仿真波形图四
3.3 实验结果
在完整的系统设计中使用 Max+Plus II完成VHDL描述和原理图的层次设计。在底层设计中,用VHDL分别实现每一个模块的功能,将每个模块生成可供Max+Plus II调用的器件符号,再将这些器件符号连接在一起构成整个系统原理图,如图4所示。
图4 系统电路原理图
整个系统设计完成后,经过编译生成.pof文件,仿真成功后,下载到EPM7128SLC84-15芯片中。根据管脚分配图对已有的硬件电路进行连线,实验电路如图5所示。
图5 实验电路图
3.4 结果分析
通过对实际的硬件测试,数码管正确显示了楼层,发光二极管响应显示了电梯的状态,通过对不同初始状态的测试,发现除了由按键抖动带来的部分误操作外,电梯的状态转换完全符合电梯运行规则。说明这种设计方法是有效的。
由于很容易通过编程改变CPLD器件的控制功能,而且电梯运行的基本状态变换规律是不随楼层数变化的,因此,只需要改变相应的输入、输出端口设计就可满足不同楼层数的设计需要。
4 结束语
本次设计基于自顶向下的设计方法,用vhdl实现了电梯各状态之间的转换程序控制。在Max+Plus II环境下通过使用Synplify Pro 软件特有的综合功能,从对软件程序的编译、仿真到可编程逻辑芯片的功能实现都进行了优化,大大提高了设计效率。这种方法可广泛用于各种复杂状态机控制的设计之中。