ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:240.16KB ,
资源ID:3980888      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3980888.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于VHDL语言的三层电梯控制器设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于VHDL语言的三层电梯控制器设计.docx

1、基于VHDL语言的三层电梯控制器设计基于VHDL语言的三层电梯控制器设计(实验报告)谭传试(07影像工程 113200*) 李国波(07影像工程 113200*)指导老师 刘娅琴1 引言电梯控制器是控制电梯按顾客要求自动上下的装置。本文采用VHDL语言来设计实用三层电梯控制器,其代码具有良好的可读性和易理解性,源程序经 A1tera公司的MAX+plus II软件仿真,目标器件选用CPLD器件。通过对三层电梯控制器的设计,可以发现本设计有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。2 三层电梯控制器将实现的功能 (1)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开

2、关。 (2)设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。 (3)电梯每秒升(降)一层楼。 (4)电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至执行完最后一个请求信号后停留在当前层。 (5)能记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。 (6)电梯运行规则当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请 求,则直接升到由下楼请求的最高层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反。

3、 (7)电梯初始状态为一层开门状态。3 三层电梯控制器的设计思路 电梯控制器采用状态机来实现,思路比较清晰。可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在第1层”、“开门”、“关门”、 “开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止状态”。各个状态之间的转换条件可由上面的设计要求所决定。4 三层电梯控制器的综合设计41 三层电梯控制器的实体设计 首先考虑输入端口,一个异

4、步复位端口reset,用于在系统不正常时回到初始状态;在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,三层是最高层,不需要有上升请求,二层则上升、下降请求端口都有;在电梯的内部,应该设有各层停留的请求端口:一个电梯时钟输入端口,该输入时钟以1秒为周 期,用于驱动电梯的升降及开门关门等动作;另有一个按键时钟输入端口,时钟频率比电梯时钟高。 其次是输出端口,有升降请求信号以后,就得有一个输出端口来指示请求是否被响应,有请求信号以后,该输出端口输出逻辑l。被响应以后则恢复逻辑 0;同样,在电梯内部也应该有这样的输出端口来显示各层停留是否被响应;在电梯外部,需要一个端口来指示电梯现在所

5、处的位置;电梯开门关门的状态也能 用一个输出端口来指示;为了观察电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。42 三层电梯控制器的结构体设计 首先说明一下状态。状态机设置了lO个状态,分别是电梯停留在l层(stoponl)、开门(dooropen)、关门(doorclose)、开门等待 第1秒(doorwaitl)、开门等待第2秒(doorwait2)、开门等待第3秒(doorwait3)、开门等待第4秒(doorwait4)、 上升(up)、下降(down)和停止(stop)。在实体说明定义完端口之后,在结构体architecture和begin之间需要有如下的定义语 句,

6、来定义状态机。 TYPE lift_state IS (stoponl,dooropen,doorclose,doorwaitl,doorwait2,doorwai t3,door。wai t4,up,down,s top): SIGNAL mylift:lift_s两个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。状态机进程中的很多判断条件是以信号灯进程 产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。 在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是

7、停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状 态是继续下降还是停止;在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。 在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。按键后产生的点亮 的信号灯(逻辑值为1)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑l使得相应的信号灯熄灭。43 三层电梯控制器VHDL设计 三层电梯控制器的VHDL描述模块流程如图所示。三层电梯控制器的源代码(见附录)可知:三层电梯控制器VHDL语言描述(1)本程序设计调

8、用了IEEE库,IEEE库是VHDL设计中最为常用的库,它包含有IEEE标准的程序包和其他一些支持工业标准的程序包。本设计采用了STD_LOGIC_1164、STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED程序包。(2)以关键词ENTITY引导,END ENTITY threeflift结尾的语句部分,称为实体。VHDL的实体描述了电路器件的外部情况及各信号端口的基本性质。本设计定义了关于三层电梯控制器用到的 各类时钟、异步复位按键、信号灯指示、电梯的请求。端口模式主要就是IN、BUFFER、OUT端口。及定义了各端口信号的数据类型,主要是 STD_LOGIC(标准逻辑位数

9、据类型)、INTEGER(整数类型)、STD_LOGIC_VECTOR(标准逻辑矢量数据类型)。这些都满足上面调 用的IEEE库中的程序包。 (3)以关键词ARCHITECTURE引导,END ARCHITECTUREa结尾的语句部分,称为结构体。结构体负责描述电路器件的内部逻辑功能或电路结构。本设计定义了lO个状态。描述了在三层电梯中 出现的各种可能的情况作为控制电梯的主要进程。信号灯控制作为辅助进程。44 三层电梯控制器的模块三层电梯控制器模块5 三层电梯控制器的仿真模块各按键说明:buttonclk:按键时钟liftclk:电梯时钟reset:异步复位按键f1upbutton:第一层上升

10、请求按钮f2upbutton:第二层上升请求按钮f2dnbutton:第二层下降请求按钮f3dnbutton:第三层下降请求按钮fuplight:电梯外部上升请求指示灯fdnlight:电梯外部下降请求指示灯stop1buttons,top2button,stop3button电梯内部请求按键stoplight:电梯内部各层请求指示灯position:电梯位置指示doorlight:电梯门开关指示灯usdig:电梯升降指示模块(一): 下图所示仿真的是在第二层电梯外部有上升请求,也就是f2upbuttton信号的一个脉冲,可以看到电梯从一层上升到二层,position信号由1变到2,doorl

11、ight信号1表示开门,0表示关门。当乘客进入电梯以后,在电梯内部要求上升到第三层,也就是stop3button产生一个 脉冲,电梯上升到第3层,开门4秒以后关门,停留在第三层,position最后的值为3。在仿真图中看不到buttonclk,只显示为一条黑色的线, 是因为采用了频率较大的时钟。再看fuplight信号灯,当二层有上升请求的时候,它的值由0变到2。(注意fuplight和fdnlight是3位的二进制向量,这里的2代表 “010”,表示二层有请求;“100”也就是4,表示三层有请求)。当电梯停留到第二层以后,表明该请求被响一直都为O。模块(二):下图是有下降请求的情况,它是上图

12、的继续,当电梯停留在第三层的时候,在电梯外第二层有下降请求,这时候fdnlight信号灯由0变为2,说明第二层有下降请求。电梯下降到第二层,响应了下降请求,所以fdnlight信号灯清0。这时候,在电梯内部没有停留在哪层的请求,所以电梯就停留在第二层,position信号的值保持在2。模块(三):同时有上升和下降请求信号时,电梯的运行情况如下图所示。图中仿真的情况是,原先电梯停留在第一层,这时候电梯外第三层有下降请求,电梯上升到第三层,乘客进入电梯以后要求下降到一层,与此同时,在电梯外第二层有上升请求,电梯首先要响应下降请求然后再响应这个上升请求,所以电梯得先下降到一层,然后再上升到第二层来。

13、从仿真的波形看,电梯的位置变化和想象是一致的。电梯的运行情况完全正确。最后乘客在电梯内部要求上升到三层,所以电梯最后的停留位置为三层。模块(四):下图所示的仿真,原先电梯停留在第一层,电梯外第三层有下降请求,电梯上升到三层,乘客 进入电梯以后要求下降到一层,此时,二层有下降请求,接着又有上升请求,电梯首先在二层停留。然后下降到一层。随后要响应二层上升请求,上升到二层,乘客 进入电梯以后要求上升到三层,所以电梯最后的停留位置在三层。6 设计的扩展性 在本设计中,因为考虑了扩展性,所以在信号定义的时候就使用了二进制的向量,而不是整数。在设计方法上也做了特殊的设计,所以使得扩展性较好。如果要实现 n

14、层电梯的控制,首先在端口的地方就要加入所有的按键,而指示灯只要把向量中的3改成n就可以了。同时需要在按键控制进程里加入其他按键触发指示灯的语 句。在电梯的升降状态将3改成n,在电梯的开门状态中将2改成n-1,在关门状态,将position=3改成position=n,关键是修改 position=2的部分,如果按照每层罗列,将十分烦琐,所以得寻求各层判断条件的共性,解决方法之一就是,新建一个全局向量one为std_logic_vector(n downto 3)应改写成0,然后和stoplight与fuplight向量比较,如果有更高层次的请求,那么stoplight或fuplight向量,如

15、果 stoplight和fuplight向量都小于one向量,表示没有更高层次的内部上升请求,此时将fdnlight向量和one向量比较,如果大于,则表示高层有下降要求,电梯得上升。如果没有任何请求信号,则电梯停止,否则电梯下降。如此就可以大大简化程序,但是要注意的是one向量必须实时更新, 以作为判断依据,可以另外写一个进程,用buttonclk来触发。7 总结通过这次EDA课程设计实验,我们更加理解了VHDL语言语言在日常生活中的应用。由于近段时间段考试较多,故不能对此程序进行进一步改进,代码还是有较多的缺陷,例如缺少提前关门按键等,实验过程中,总会出现一些问题,例如编译错误,波形仿真跟理

16、论值不符,这些都是由于代码编写中出现的小问题,由于不够仔细而缺少一些必要部分,经过仔细检查后都逐一改正过来了。最后在硬件下载的时候,因为此程序应用的是LED管而不是数码管,在实验箱中难以直观地体会到电梯实际运行的步骤,该VHDL代码还有待进一步改正。参考文献:朱正伟 EDA技术及应用 2005年10月第1版附录:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY threeflift IS PORT(buttonclk:IN ST

17、D_LOGIC; liftclk:IN STD_LOGIC; reset:IN STD_LOGIC; f1upbutton:IN STD_LOGIC; f2upbutton:IN STD_LOGIC; f2dnbutton:IN STD_LOGIC; f3dnbutton:IN STD_LOGIC; fuplight:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1); fdnlight:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1); stop1button,stop2button,stop3button:IN STD_LOGIC; stoplig

18、ht:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1); position:BUFFER INTEGER RANGE 1 TO 3; doorlight:OUT STD_LOGIC; udsig:BUFFER STD_LOGIC);END threeflift;ARCHITECTURE a OF threeflift ISTYPE lift_state IS(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,doorwait4,up,down,stop);SIGNAL mylift:lift_state;SI

19、GNAL clearup:STD_LOGIC;SIGNAL cleardn:STD_LOGIC;BEGINctrlift:PROCESS(reset,liftclk)VARIABLE pos:INTEGER RANGE 3 DOWNTO 1; BEGIN IF reset=1 THEN mylift=stopon1; clearup=0; cleardn doorlight=1; position=1;pos:=1; mylift mylift clearup=0; cleardn=0; mylift mylift mylift doorlight=0; IF udsig=0 THEN IF

20、position=3 THEN IF stoplight=000 AND fuplight=000 AND fdnlight=000 THEN udsig=1; mylift=doorclose; ELSE udsig=1;mylift=down; END IF; ELSIF position=2 THEN IF stoplight=000 AND fuplight=000 AND fdnlight=000 THEN udsig=0; mylift=doorclose; ELSIF stoplight(3)=1 OR (stoplight(3)=0 AND fdnlight(3)=1) THE

21、N udsig=0; mylift=up; ELSE udsig=1;mylift=down; END IF; ELSIF position=1 THEN IF stoplight=000 AND fuplight=000 AND fdnlight=000 THEN udsig=0; mylift=doorclose; ELSE udsig=0;mylift=up; END IF; END IF; ELSIF udsig=1 THEN IF position=1 THEN IF stoplight=000 AND fuplight=000 AND fdnlight=000 THEN udsig

22、=0; mylift=doorclose; ELSE udsig=0; mylift=up; END IF; ELSIF position=2 THEN IF stoplight=000 AND fuplight=000 AND fdnlight=000 THEN udsig=1; mylift=doorclose; ELSIF stoplight(1)=1 OR (stoplight(1)=0 AND fuplight(1)=1) THEN udsig=1; mylift=down; ELSE udsig=0;mylift=up; END IF; ELSIF position=3 THEN

23、IF stoplight=000 AND fuplight=000 AND fdnlight=000 THEN udsig=1; mylift=doorclose; ELSE udsig=1;mylift position=position+1; pos:=pos+1; IF pos3 AND (stoplight(pos)=1 OR fuplight(pos)=1) THEN mylift=stop; ELSIF pos=3 AND (stoplight(pos)=1 OR fdnlight (pos)=1) THEN mylift=stop; ELSE mylift position1 A

24、ND (stoplight(pos)=1 OR fdnlight(pos)=1) THEN mylift=stop; ELSIF pos=1 AND (stoplight(pos)=1 OR fuplight(pos)=1) THEN mylift=stop; ELSE mylift mylift doorlight=1; IF udsig=0 THEN IF position=2 AND (stoplight(position)=1 OR fuplight(position)=1) THEN clearup=1; ELSE clearup=1; cleardn=2 AND (stopligh

25、t(position)=1 OR fdnlight(position)=1) THEN cleardn=1; ELSE clearup=1;cleardn=1; END IF; END IF; mylift=doorwait1; END CASE; END IF;END IF;END PROCESS ctrlift;ctrlight:PROCESS(reset,buttonclk)BEGIN IF reset=1 THEN stoplight=000;fuplight=000;fdnlight=000; ELSE IF buttonclkEVENT AND buttonclk=1 THEN I

26、F clearup=1 THEN stoplight(position)=0;fuplight(position)=0; ELSE IF f1upbutton=1 THEN fuplight(1)=1; ELSIF f2upbutton=1 THEN fuplight(2)=1; END IF; END IF; IF cleardn=1 THEN stoplight(position)=0;fdnlight(position)=0; ELSE IF f2dnbutton=1 THEN fdnlight(2)=1; ELSIF f3dnbutton=1 THEN fdnlight(3)=1; END IF; END IF; IF stop1button=1 THEN stoplight(1)=1; ELSIF stop2button=1 THEN stoplight(2)=1; ELSIF stop3button=1 THEN stoplight(3)=1; END IF; END IF; END IF;END PROCESS ctrlight;END ARCHITECTURE a;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1