1、2019/6/12,1,计算机EDA设计实验教程,实验十二 电梯控制器,北航计算机学院 艾明晶,2019/6/12,2,内容概要,实验目的 实验要求 预备知识 电梯控制器工作原理 输入、输出信号 设计思路 进行仿真 引脚锁定、编程下载及在线调试 (选做)功能扩展 实验报告,2019/6/12,3,实验目的,了解控制系统的一般工作方式。 熟悉从根据基本的行为模型或功能要求建立逻辑模型到进一步完成全部系统的整个设计过程,并掌握其中的设计思路与方法。 了解电梯调度算法的思想及应用。,2019/6/12,4,实验要求,设计一个电梯控制器,使之按电梯的调度算法控制电梯完成4个楼层的载客服务。 功能要求
2、电梯分为“运行”模式和“下班”模式 “运行”模式:当电梯工开始上班时,先用钥匙打开电梯门口的开关锁,使电梯及电梯控制器通电,则power变为“1”,电梯进入“运行”模式。再按一下1楼电梯门口的按钮,则电梯门打开,楼层显示status为1。 “下班”模式:电梯运行一天后,当电梯工要下班时,先将电梯内开关admin切换到“有司机”模式(高电平);按一下cmd1按钮,使电梯下行到1楼,暂停,门会自动打开,并一直开着,同时不会再响应任何呼叫请求;然后电梯工用钥匙将电梯门口的开关锁锁住,则电梯“运行”模式将切换到“下班”模式,电梯门自动关闭,电源切断。,2019/6/12,5,当电梯处于运行模式时,又分
3、为“有司机”模式和“无司机”模式 “有司机”模式:当电梯门打开后,门会一直开着,必须由电梯工按一下关门按钮“close”,电梯门才会关闭,然后电梯才会响应呼叫信号,上行或下行。无自动关门功能,也就没有提前关门和延迟关门的情况。 “无司机”模式:无须电梯工操纵,电梯可无人驾驶自动运行;电梯门打开后等待3s则门会自动关闭,然后电梯响应呼叫信号,上行或下行。在“无司机”模式下,有自动关门功能,也有提前关门和延迟关门的功能。,2019/6/12,6,搭便车 若乘客在某楼层按下某方向呼叫按钮后,当电梯在以相应方向运行并经过该楼层时应暂停,自动开门。 直接响应 如果电梯事先在某一楼层停留不动,当有乘客在另
4、一楼层按下某方向呼叫按钮后,则电梯直接来到呼叫者所在楼层让乘客进入。,2019/6/12,7,提前关门和延迟关门功能 在“无司机”模式下,在电梯暂停、开门的头3s内,乘客可按一下提前关门按钮“close”,使电梯门提前关闭,1s后电梯继续运行;或按住延迟关门按钮“open”,使电梯门一直处于开门状态,一旦松开此按钮,则电梯门自动关门,1s后电梯继续运行 电梯从一个楼层运行到相邻楼层的时间为2s 遵循电梯的调度算法 电梯在一次运行中,要在到达这一运行方向上请求到达的最后一个楼层之后才改变运行方向。这样能够在不按照时间顺序对各个命令和呼叫排队的情况下较快地满足所有乘客的要求,同时运行效率(负载率)
5、较高,不必频繁改变运行方向。,2019/6/12,8,显示功能 电梯内控制面板上显示区域的数码管和位于各楼层电梯门口的数码管,当电梯运动时稳定显示电梯刚经过的楼层号;到达某层后控制面板上的数码管和该楼层电梯门口的数码管闪烁显示当前所在楼层号(关门1秒后不再闪烁)。 位于每楼层电梯门口和电梯内控制面板上显示区域的米字型显示器,当电梯上升时显示为上升,当电梯下降时显示为下降 。,2019/6/12,9,预备知识,控制系统的一般模型 被控系统的状态 状态机与控制数字逻辑电路的控制系统 逻辑模型的建立,2019/6/12,10,电梯控制器工作原理,与电梯控制和显示有关的输入、输出设备 每层电梯门口有:
6、 按钮和/或按钮 米字型显示器 数码管 电梯内有一个控制面板,上面有: 楼层选择按钮14 开门按钮“open”和关门按钮“close” 有一个米字型显示器 还有一个数码管,电梯内控制面板示意图,2019/6/12,11,上班和下班 选择运行模式 若选择“无司机”运行模式 电梯最初停在1层 当电梯到达目的地 当电梯一直停在某层时 一直开门(或称为延迟关门) 提前关门 有反方向的呼叫信号时 电梯内外的(或)箭头何时点亮 当有乘客呼叫时,电梯内控制面板上对应该楼层数字点亮,表示该层有呼叫请求,2019/6/12,12,若选择“有司机”运行模式 “有司机”模式下,没有自动关门功能,也就没有提前关门和延
7、迟关门(则不会用到open按钮)的情况。,注意电梯的运行方向不是由电梯工人工控制的,它是根据电梯的调度算法自动实现的。 电梯工的主要工作是操作电梯门的关闭,一旦门关闭,则电梯按调度算法上行或下行。,2019/6/12,13,输入、输出信号,输入信号 clk_1KHz:用作simulator电梯模拟子模块的输入时钟; clk_10Hz:用作display显示子模块的输入时钟; power:选择电梯为“运行”模式或“下班”模式 ; admin:选择电梯运行模式“有司机”或“无司机” ; ipt0:9:10个按钮输入信号(为脉冲信号); close_n:关门按钮; open_n:开门按钮 。,注意只
8、有在“无司机”运行模式下,存在提前关门、延迟关门的情况 ; 在“有司机”运行模式下,不存在提前关门、延迟关门的情况。,2019/6/12,14,输出信号 eleIn3:0:电梯内面板上显示楼层号的数码管; floor13:0:电梯外1层处面板上显示楼层号的数码管; floor23:0:电梯外2层处面板上显示楼层号的数码管; floor33:0:电梯外3层处面板上显示楼层号的数码管; floor43:0:电梯外4层处面板上显示楼层号的数码管;,2019/6/12,15,dirup,dirdown:电梯上升、下降指示信号; ctrl_up,ctrl_down:电梯上升、下降控制信号;ask_sto
9、p :令电梯停止的请求信号(电平信号); stop:当电梯到达某层时或静止在某层时令电梯停止的控制信号(电平信号) ;open_door:开电梯门控制信号(电平信号);,提示:assign stop=ask_stop,提示:assign open_door= power,提示:ctrlup=dirup,2019/6/12,16,close_door:关电梯门控制信号(电平信号);opt9:0:10个按钮的输出状态(电平信号); powerout:显示电梯的电源状态信号; adminout:显示当前电梯处于何种模式。,提示:无论是在“有司机”或“无司机”运行模式下,close_door为1的时间
10、都为1s。,2019/6/12,17,设计思路,1. 总体设计思路 整个电路由6个子模块组成 button_clr_ctrl按钮清零控制子模块; corecontrol核心控制子模块; simulator电梯模拟子模块; display信息显示子模块; 时钟分频子模块(clockdiv100.v和clkdiv10.v); 附加模块not10.v调整按钮信号均为高电平有效模式 。,2019/6/12,18,顶层图形设计文件 elevator.bdf,2019/6/12,19,顶层图形设计文件 elevator.bdf(续),2019/6/12,20,各子模块的功能,button_clr_ctrl
11、按钮清零控制子模块 用于10个按钮信号的存储和清零控制。 corecontrol核心控制子模块 主要实现电梯的调度算法,产生令电梯上行、下行和停止的控制信号。 simulator电梯模拟子模块 提供对电梯在不同工作模式下的运行状态模拟和控制输出。 display楼层号显示子模块 用于显示楼层号。 附加模块not10.v 用于调整10个按钮信号均为高电平有效模式。,2019/6/12,21,2. 各子模块的设计,(1)button_clr_ctrl按钮清零控制子模块 功能:用于10个按钮信号的存储和清零控制。在电梯“运行”模式下,一旦来了某个有效脉冲按钮信号ipt,则对应输出opt为高电平(即将
12、脉冲信号转换为电平信号)。当电梯到达该层时响应了该层的按钮信号,并关门1s后则应清除此信号,此时使按钮清零控制信号c90中的相应位为高,使输出opt变低。 在一个always块中,采用for循环语句和if-else if语句即可实现功能。,2019/6/12,22,(2)corecontrol核心控制子模块,功能:实现电梯的调度算法,产生令电梯上行、下行和停止的控制信号。即根据当前楼层和按钮信号产生电梯的运行方向指示信号、运行方向控制信号及请求电梯停止信号、控制电梯停止信号。,关键子模块!,2019/6/12,23,(2)corecontrol核心控制子模块 (续1),程序包括5大部分: (a
13、)将10个按钮的输出信号赋给物理含义明确的中间变量 (b)根据当前10个按钮的输出状态及所在楼层,判断是否有up、down或ask_stop请求。 实际上就是对输入信号进行逻辑化简本程序的关键所在! 当处于2层时,ask_stop=ds0,规律:当电梯处于某楼层时,只有高于该层的按钮信号,产生请求电梯上行信号up。只有低于该层的按钮信号,产生请求电梯下行信号down。只有本层的按钮信号,产生请求电梯停止信号ask_stop(只有当呼叫按钮信号与刚才的运行方向一致,或者上行过程只有一个下行呼叫按钮信号,或者下行过程中只有一个上行呼叫按钮信号时,才产生ask_stop)。,2019/6/12,24
14、,(2)corecontrol核心控制子模块(续2),(c)根据电梯的上行和下行请求up、down,对电梯进行统一调度,产生dirup或dirdown。 用if语句实现,共5种情况 (d)根据请求停止信号和电梯当前的运行状态,产生令电梯停止不动的控制信号assign stop=ask_stop,2019/6/12,25,(3)simulator电梯模拟子模块,功能:根据电梯当前运行方向,控制电梯的具体运行状态并输出楼层显示;根据令电梯停止的控制信号,产生开、关电梯门控制信号,关门1s后产生按钮清零控制信号。 该子模块用状态机实现楼层之间的具体变化,并输出当前楼层信息status2:0给核心控制
15、子模块和显示子模块,输出运行时间计数器的值run_cnt4:0给核心控制子模块,输出10个按钮的清零控制信号c9:0给按钮清零控制子模块。,关键子模块!,2019/6/12,26,(3)simulator电梯模拟子模块(续1),程序包括两大部分:/* -1.产生开电梯门控制信号 -*/assign open_door=powerend,第1级if语句,2019/6/12,27,(3)simulator电梯模拟子模块(续2),else /以下操作均是在“运行”模式下beginif(status=0) begin status=1;close_door=0; end /(1)初始化几个变量值,假设
16、电梯初始化时在一楼。/(2)如果电梯上升,且没有停止控制信号,则经过2s,电梯到达高一层。if(dirup=1)&(stop=0)/(3)如果电梯下降,且没有停止控制信号,则经过2s,电梯到达低一层。else if(dirdown=1)&(stop=0) ,第2级if语句,2019/6/12,28,(3)simulator电梯模拟子模块(续3),/*(4)只要有stop信号,则电梯必须在该层停留,并进入开、关门步骤。*/else if(stop) begin/*在无司机模式下,当开门达到3s时*/if(!admin /并自动关门end,第3级if语句,2019/6/12,29,(3)simul
17、ator电梯模拟子模块(续4),/* 启动手动关门程序。有司机模式下想要关门与无司机模式下提前关门操作相同,都必须按下close按钮。*/ else if(close_door=0) end,2019/6/12,30,(3)simulator电梯模拟子模块(续5),/* 在不满足上述所有条件的情况下,cnt加1计数,并对清零控制信号进行复位*/else begin cnt=cnt+1b1;/开门或关门时间计数c=10h000;end/(5)若电梯处于静止状态else begin cnt=0;run_cnt=0;c=0; endendend,2019/6/12,31,(4)display楼层号显
18、示子模块,功能:显示楼层号。 当电梯暂停在某层时,电梯内面板上和相应楼层处的数码管以每秒1次的频率闪烁显示楼层号(关门1秒后不再闪烁);其它情况下,电梯内面板上和各楼层处的数码管稳定显示电梯经过的当前楼层号。,2019/6/12,32,(5)附加模块not10.v,功能:调整10个按钮信号均为高电平有效模式。 因为1 8键是正脉冲有效,而9 10键是负脉冲有效,需要将910键调整为高电平有效模式。 只需一条assign语句即可实现。,2019/6/12,33,进行仿真(之一),对各子模块进行功能仿真 用ModelSim测试所有子模块,为保证中文注释不被破坏,在ModelSim中只对源文件和测试
19、文件进行编译、加载和仿真这3项工作。 如果仿真后发现源文件或测试文件需要修改,则切换到Quartus ,对源文件或测试文件进行相应修改,保存。 再切回到ModelSim,执行编译、重新仿真即可。 及时保存仿真波形结果!,2019/6/12,34,(1)button_clr_ctrl按钮清零控制子模块,模仿电梯实际运行情况,在不同时刻,分别设置按钮信号和按钮清零信号。 观察按钮状态opt9:0是否随按钮信号ipt9:0的变化而变化 。 观察当c9:0中某位信号有效时,opt9:0的相应位是否变为“0” 。,2019/6/12,35,opt存储ipt的状态,当c0=1时,清除f1_up信号,使op
20、t0=0; 当c3=1时,清除f3_up信号,使opt3=0,2019/6/12,36,设定不同的楼层号和按钮信号opt9:0,观察电梯的运行方向指示信号(dirup、dirdown)、运行方向控制信号(ctrlup、ctrldown)以及请求电梯停止信号ask_stop和令电梯停止的控制信号stop是否正确。 技巧:在测试文件的开头采用了宏定义语句,将表达式opt0=1定义为字符串f1_up,将表达式opt0=0定义为字符串nf1_up,然后在变量的初始化中直接引用已定义的宏名。,(2)corecontrol核心控制子模块,2019/6/12,37,test_corecontrol.wlf,
21、f1_up,f2_up,暂停,暂停,上行,按下f1_up,电梯暂停;按下f2_up,电梯上行;当到达2层, 暂停;按下cmd3、cmd4,电梯继续上行;当到达3层,暂停; 此时有人按下f1_up、按下f2_up,电梯继续上行到4层。,2019/6/12,38,当上行到4层时,响应cmd4,暂停,然后响应f1_up和 f2_up,下行;到达3层时,不停;到达2层时,暂停;下 行到1层,暂停;又有cmd2信号,则电梯上行到2层,暂停。,2019/6/12,39,根据电梯控制器的工作原理,考虑到电梯运行的各种情况,正确地模拟和控制电梯的运行。 设置电梯为“运行”模式,选择电梯运行模式为“有司机”模式
22、,假设按一下f1_up,电梯要上行; 切换为“无司机”模式,测试延迟关门情况; 切换为“有司机”模式,当按下cmd1,电梯自动下行到1层后,然后切换到“下班”模式。,(3)simulator电梯模拟子模块,注意观察:当电梯运行到达某层时open_door的变化;在开门和关门期间,计数器cnt的计数值的变化;当按一下close时,close_door的变化,维持“1”多长时间?在电梯运行期间,运行时间计数器run_cnt的计数值的变化。,2019/6/12,40,test_simulator.wlf,(a)“有司机”模式下自动开门,2019/6/12,41,(b)“有司机”模式下手动关门,201
23、9/6/12,42,(c)“无司机”模式下延迟关门 (cnt保持为29,open_door一直为1),2019/6/12,43,(d)切换为“下班”模式,断电,则关门,2019/6/12,44,(4) display_显示子模块,分别设置不同的楼层号和令电梯停止不动的控制信号stopin 观察当电梯暂停在某层时,电梯内面板上和该楼层电梯门口的数码管是否闪烁显示相应的楼层号; 当电梯运行时,各楼层电梯门口的数码管是否稳定显示电梯当前经过的楼层号。,2019/6/12,45,test_display.wlf,闪烁显示,稳定显示,2019/6/12,46,进行仿真(之二),采用Quartus 软件对
24、顶层图形文件elevator.bdf进行时序仿真 Grid Size=1ms,Tclk=1ms,End Time=70s。 注意在波形中添加必要的中文注释! (1)仿真 “有司机”模式下的运行情况 (2)仿真“无司机”模式下的运行情况 (3)测试“下班”模式下的情况,2019/6/12,47,引脚锁定、编程下载及在线调试,引脚锁定,编译 编程下载 实验箱设置 将实验箱右下角“时钟频率选择”区域的Clock5跳线跳到1024Hz。 将实验箱左上角跳线JDSP跳到上面两个插针(ENAB)的位置,以选择数码管独立显示模式。 实验箱电路结构采用模式3。,2019/6/12,48,在线调试 下载后的初始
25、状态 模拟上班模式中的“有司机”模式 模拟上班模式中的“无司机”模式 测试只有一个请求的情况; 验证延迟关门功能; 验证搭便车的情况; 验证不顺路(如上行期间有下行请求)的情况; 验证立即关门功能 。,说明: 由于键9键14未经过按钮消抖电路,所以有时需要按多次,直到对应的LED指示灯亮即可。 本控制器未设置复位功能,若要重新开始测试,则需重新下载一次。,2019/6/12,49,功能扩展,增加电梯的楼层数目。 使电梯只在某些楼层停留。 增加电梯强制控制功能,允许电梯由电梯管理员强行控制,不论当前电梯还有什么任务都直接运行到管理员指定的地方。 实现电梯根据负载调度,假设电梯上有负载传感器,电梯
26、满载时不理会呼叫,先完成现有命令,直到有空余运载能力再参照原定算法,优先调度被忽略呼叫,同时应该向呼叫者表明不响应呼叫是因为满载。 实现双连电梯控制,双连电梯是指两部并列电梯共用一个呼叫按钮,按照距离近者优先和根据负载调度的原则调度。,2019/6/12,50,实验报告,总结实验中的逻辑建模过程、实现过程和调试过程,包括所建立的模型、实现的电路以及调试中遇到的问题和解决方法。 电梯算法常在操作系统的磁头调度算法中应用,这有什么好处? 磁头调度算法:在硬盘读写过程中要向硬盘发出命令,控制磁头运动到不同的磁道上方进行读写以完成任务。通常同一时刻有很多对不同磁道的读写请求等待完成,这就需要一种较好的算法以提高完成任务的效率。 对照仿真波形,详细分析电梯控制器的工作过程。,