《数字逻辑》实验报告
实验名称 | 项目三 电梯控制器设计 | |||||
一、实验目的 设计一个多楼层的电梯控制器系统,并能在开发板上模拟电梯运行状态。可以利用按键作为呼叫按键,数码管显示电梯运行时电梯所在楼层,led灯显示楼层叫梯状态。 | ||||||
二、实验项目内容 本项目设计并完成了1.电梯的模拟逻辑控制 2.将电梯的运行状态显示在数码管上,包含电梯此时的运行状态(上升、下降与暂停)与当前电梯所处楼层;以及LED灯显示楼层叫梯状态 | ||||||
三、实验设计 参考信息楼电梯设计,电梯由内部与外部控制信号驱动,外部控制信号包含上升与下降,本设计中额外增添停止按钮;内部控制信号包含电梯的具体目标楼层。 故取四位拨码开关模拟目的地为不同楼层的信号,由此模拟为高度为4楼的电梯控制器;取三位按键模拟控制电梯上升、下降与暂停运行状态的按键;其中模拟按键需要进行消抖处理。 状态转移图为: s,u,d分别代表此时电梯 | ||||||
四、实验过程或算法(关键步骤、核心代码注解等) 文件结构 顶层文件串联起对应的模块,消抖模块用于消除按键抖动,lift模块用于实现电梯的运行状态转换与楼层移动,并输出电梯此时的运行状态;show模块在数码管中显示电梯此时运行状态。 顶层文件: Key表示三个控制电梯运行状态的信号,自高到低位分别为up,down与stop,通过消抖模块消抖后传入电梯模拟模块中;floor_call表示4个不同楼层里的叫楼情况,若呼叫电梯(或目的地为该楼),则相应位上的信号为1.并直接在led灯上显示出来。 按键消抖模块: 思路为设置多个信号记录按键的输入信号,如果在一定的时间内,检测到信号都相同,那么就可以认为按键在这一段时间内保持稳定,也就是稳定,认为可以使用此时记录的信号 信号声明:clk为系统时钟,rst为复位信号,call与call_real分别代表实际按键输入的信号以及最后输出的认为是按键稳定后的信号 此部分负责分频,产生一些短暂的延迟,在这些延迟后进行取样。 此部分设置三个寄存器,用来连续记录,目的就是实现检测输入的值是否稳定 最后输出就是,如果三个寄存器寄存的值都相同,那么就可以认为按键已经稳定 模拟电梯模块: 信号声明: Clk为时钟信号,reset为复位信号,up,down,stop为电梯控制信号;状态声明中,s表示电梯此时运行状态为停止,u表示此时状态为上升,d表示此时状态为下降(之所以设置为4位是与floor信号统一,为了方便后续数码管显示此时电梯运行状态),floor为位宽为4的信号,采用独热编码,只保留1位为1,表示电梯此时停留在相应位的楼层上。 分频,模拟电梯实际运行速度。 判断是否可上行或下行。 电梯状态转移逻辑: 即复位时调回停止状态;处于停止状态时,根据控制使能信号进行状态变化;处于上升状态时,若当前楼层被呼叫,则进入停止状态,直到相应位上拨码开关关闭,即停止继续呼叫该层才会继续电梯移动,当到达最高层且该层无人呼叫时,则自动进入下降状态,回到第一层的位置;处于下降状态时与上升状态时基本一致,只是当处于最底层(1楼)时,不再进入上升状态,而是保持停止。 楼层转移逻辑: 在dclk分频时钟上升沿触发,即经历一段时间后改变楼层状态;复位时,回归第一楼;移动取决于电梯此时运行状态,采用移位的方式进行操作,可以保持floor寄存器中始终存在一位1。 Show模块: | ||||||
五、实验过程中遇到的问题及解决情况(主要问题及解决情况) 如何完成电梯控制的逻辑设计? 解决情况:完全解决。 如何在数码管中显示电梯此时的运行状态(包含运行状况与当前楼层)? 解决情况:完全解决。 如何让电梯在闲置时自动进入最底层待机? 解决情况:完全解决。 | ||||||
六、实验结果及分析和(或)源程序调试过程 生成电路图为: 最终实现效果为, 图示为呼叫楼层(或目的)楼层为3楼与4楼,此时电梯运行状态为U即向上UP,当到达三楼时保持S停止状态,直至三楼的拨码关闭并控制电梯继续向上才会运动。 R2为复位开关, V17~W17从左至右为叫楼(或目的地)楼层信号;数码管最左侧显示当前电梯运行状况,为D(0)时,表示为DOWN,即下降,为U时,表示为UP,为S(5)时,表示为STOP;最右侧显示为当前电梯所在楼层。按钮自上至下表示为UP,STOP,DOWN等控制信号。 当电梯到达所在楼层后,需要将该楼层的拨码开关关闭,以停止对该楼层的持续呼叫;之后按按钮对电梯进行继续控制,当达到最高层后自动进入下降状态,若无继续呼叫,则最终停留在最底层。 楼层间的转换大约需要1~2秒。 七、小组分工情况说明 本实验全部由贾轲20220669完成
| ||||||