SPOCEDA电梯控制器课程设计说明书

上传人:沈*** 文档编号:82418756 上传时间:2022-04-29 格式:DOC 页数:22 大小:235.50KB
返回 下载 相关 举报
SPOCEDA电梯控制器课程设计说明书_第1页
第1页 / 共22页
SPOCEDA电梯控制器课程设计说明书_第2页
第2页 / 共22页
SPOCEDA电梯控制器课程设计说明书_第3页
第3页 / 共22页
点击查看更多>>
资源描述
SPOC/EDA综合课程设计电梯控制器设计目录第一章 设计的性质与目的2第二章 设计任务与要求3第三章 方案选择与论证4第四章 设计原理54.1 原理图54.2 流程图54.3 结构框图64.4 程序描述6第五章部分时序仿真图155.1 电梯上锁155.2 电梯报警155.3 电梯超载155.4 电梯运行模拟165.5 电梯开门延时模拟185.6 电梯紧急开门19第七章 调试过程中出现的问题及解决措施20第八章 设计总结218.1 设计方案的优缺点比较218.2 心得体会22第一章 设计的性质与目的 SOPC/EDA综合课程设计是继EDA技术及应用和数字电子技术课程之后开出的实践环节教学。目的是训练学生综合运用学过的数字电子技术和EDA技术及应用的基本知识,培养独立设计比较复杂的数字逻辑系统的能力。设计工作建立在硬件和软件两个平台的基础上。硬件平台是可编程逻辑器件,所选的器件可保证在一片芯片上设计出题目要求的数字电路系统。软件平台是ALTERA公司的Quartus II。通过课程设计,学生要掌握使用EDA(电子设计自动化)工具设计数字逻辑的方法,包括设计输入、编译、软件仿真、下载和硬件仿真等全过程。第二章 设计任务与要求1.设计一个4层电梯全自动控制电路。2.电梯运行锁用一按钮代替(开锁上电),低电平可以运行,高电平不能运行。3.每层电梯入口处设有上行、下行请求按钮,电梯内设有乘客到达层次的停站要求开关,高电平有效。4.有电梯所处楼层指示灯和电梯上行、下行状态指示灯。5.电梯到达某一层时,该层指示灯亮,并一直保持到电梯到达另一层为止。电梯上行或下行时,相应状态指示灯亮。6.电梯接收到停站请求后,每层运行2秒,到达停站层,停留2秒后门自动打开,开门指示灯亮,开门6秒后电梯自动关门。7.能记忆电梯内、外的请求信号,并按照电梯的运行规则依次响应,请求信号保留至响应后撤除。8.人数超载或超重用一按钮代替,高电平有效,超载时电梯不能运行,并有相应指示。9.事故报警按钮高电平有效,事故报警不能运行,并有指示灯,信号保留至事故消除。10.增加手动开门、关门控制,并可调整开、关门时间。第三章 方案选择与论证电梯共有上升、下降、开门、关门、停止、一楼、二楼、三楼、四楼等几个状态,设计电梯就是要弄清楚这几个状态之间的相互转化关系,可以假设电梯开始时在一楼,如果二三四楼有请求(包括电梯要停在二楼或二楼有上升或下降请求或停在三楼或三楼有上升或下降请求或停在四楼、或四楼有下降请求),则电梯要上升,否则就停在一楼。当电梯在二楼时,如果三楼或四楼有请求(包括电梯停在三楼或三楼有上升或下降请求或停在四楼或四楼有下降请求),则电梯要上升,如果一楼有请求(包括停在一楼或一楼有上升请求),则电梯下降。当电梯在三楼时,如果四楼有请求(包括停在四楼或四楼有下降请求),则电梯要上升,如果一楼二楼有请求(包括停在一楼或二楼或一楼二楼有上升请求或二楼有下降请求),则电梯要下降,否则电梯就停在三楼。当电梯在四楼,如果一二三楼有请求(包括停在一二三楼或一二三楼有上升请求或二三楼有下降请求),则电梯下降,否则电梯停在四楼。当电梯上锁时,电梯处于非工作状态,所有指示灯全灭,当电梯超载时,超载灯亮,等电梯遇到紧急情况时,报警灯亮。因为电梯上升或下降是一个过程,这个过程持续两秒,电梯开关门要持续六秒,所以还必须设计一个计数器,计数器和主控制器共同组成电路的原理方案图,这是主控制器和计数器可以不用同一个时钟脉冲驱动,但要处理好两个元件的连接。当然如果主控制器是用秒脉冲驱动,可以把两个模块集成一个模块。第四章 设计原理4.1 原理图clk1clockalarmoverweightIt1It2It3It4Up1Up2Up3Down2Down3Down4opencloseLed1Led2Led3Led4upleddownled openled overweightledalarmled电 梯 控 制 器图4.1 电梯控制器的原理图4.2 流程图 LT1 LT2 LT4 LT3Lock or alarm or overweightLock or alarm or overweightLock or alarm or overweightLock or alarm or overweight图4.2 电梯控制器流程图4.3 结构框图图4.3 电梯控制器结构图4.4 程序描述library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity contrl is port(clk1,lock,alarm,overweight,It1,It2,It3,It4,up1,up2,up3,down2,down3,down4:in std_logic;-lock为电梯锁开关 alarm为警报器开关 overweight为超重开关 It1、It2、It3、It4分别表示电梯停在一二三四楼 up1表示一楼有向上请求 Up2表示二楼有向上请求 up3表示三楼有向上请求 down2表示二楼有向下的请求-down3表示三楼有向下请求 down4表示四楼有向下请求 quick,delay,dengwo:in std_logic;-分别表示快速关门 延长一段时间关门 不马上关门 led1,led2,led3,led4:out std_logic;-一二三四楼层的指示灯 alarmled,overweightled,upled,downled,dooropenled:out std_logic);-报警灯 超重灯 上行状态灯 下降状态灯 开门灯 end contrl;architecture xin of contrl istype state_type is(start,rukou,up,down,dooropen,stop,wait1,wait2,wait3,wait4,wait5,wait6,wait7,wait8,wait9,upwait1,upwait2,dnwait1,dnwait2);-start表示初始化状态 rukou表示程序执行状态 up上行状态 down下降状态 dooropen开门状态 stop停止运行状态-后面几个状态用来延时signal state:state_type:=start;signal stopcun: std_logic_vector(3 downto 0);-电梯停止楼层存储器signal upcun,downcun: std_logic_vector(2 downto 0);-上升请求存储器 下降请求存储器signal dd1,dd2,dd3: std_logic_vector(3 downto 0);-信号用来交换数据beginp1:process(clk1,lock,alarm,overweight)variable position: integer range 0 to 4;beginif lock=1 then led1=0;led2=0;led3=0;led4=0;alarmled=0;overweightled=0;dooropenled=0;upled=0;downled=0;-电梯上锁elsif alarm=1 then alarmled=1;-警报灯亮elsif overweight=1 then overweightled=1;-超重灯亮elsif rising_edge(clk1) then if up1=1 then upcun(0)=1; end if; if up2=1 then upcun(1)=1; end if; if up3=1 then upcun(2)=1; end if; if down4=1 then downcun(2)=1; end if; if down3=1 then downcun(1)=1; end if; if down2=1 then downcun(0)=1; end if; if It1=1 then stopcun(0)=1; end if; if It2=1 then stopcun(1)=1; end if; if It3=1 then stopcun(2)=1; end if; if It4=1 then stopcun(3)=1; end if;-将各种请求存入存储器 dd1=0& upcun;-将上升请求存储器扩展成四位 dd2=downcun & 0;-将下降请求扩展成四位 dd3 if dd3=0000 then state=start; elsif position=0 then led1=1;position:=position+1; state if position=1 then if stopcun(0)=1 or upcun(0)=1 then stopcun(0)=0;upcun(0)=0; state=dooropen; else state=up; end if;-电梯在一楼,如果当前层有请求,进入开门状态,同时清除请求,否则电梯上升 elsif position=2 then if stopcun(1)=1 or upcun(1)=1 or downcun(0)=1 then stopcun(1)=0 ; upcun(1)=0;downcun(0)=0;state0011 then state=up; elsif dd30010 then state=down; end if;-电梯在二楼,如果当前层有请求,进入开门状态,同时将请求清除,如果三四楼有请求,电梯上升,否则下降 elsif position=3 then if stopcun(2)=1 or upcun(2)=1 or downcun(1)=1 then stopcun(2)=0;upcun(2)=0 ;downcun(1)=0; state0111 then state=up; elsif dd30100 then state=down; end if;-电梯在三楼,如果当前层有请求,进入开门状态,同时将请求清除,如果四楼有请求,电梯上升,否则下降 elsif position=4 then if stopcun(3)=1 or downcun(2)=1 then stopcun(3)=0;downcun(2)=0;state=dooropen; else stateupled=1;statestateupled=0;position:=position+1;-到达新的楼层,上行指示灯灭 if position=1 then led1=1;led2=0;led3=0;led4=0;-一楼指示灯亮 elsif position=2 then led2=1;led1=0;led3=0;led4=0;-二楼指示灯亮 elsif position=3 then led3=1;led2=0;led1=0;led4=0;-三楼指示灯亮 elsif position=4 then led4=1;led1=0;led2=0;led3=0;-四楼指示灯亮 else led1=0;led2=0;led3=0;led40011 and stopcun(1)=0 and upcun(1)=0 and downcun(0)=0 then state0111 and stopcun(2)=0 and upcun(2)=0 and downcun(1)=0 then state=up;-如果在三楼且当前层没有请求,电梯继续上升 else state=dooropen;if position=4 then if downcun(2)=1 then downcun(2)=0;end if; if stopcun(3)=1 then stopcun(3)=0;end if; elsif position=3 then if downcun(1)=1 then downcun(1)=0; end if; if upcun(2)=1 then upcun(2)=0; end if; if stopcun(2)=1 then stopcun(2)=0;end if; elsif position=2 then if downcun(0)=1 then downcun(0)=0; end if; if upcun(1)=1 then upcun(1)=0; end if; if stopcun(1)=1 then stopcun(1)downled=1;statestatedownled=0;position:=position-1;-到达新的楼层,下降指示灯灭 if position=1 then led1=1;led2=0;led3=0;led4=0; elsif position=2 then led2=1;led1=0;led3=0;led4=0; elsif position=3 then led3=1;led2=0;led1=0;led4=0; elsif position=4 then led4=1;led2=0;led3=0;led1=0; else led1=0;led2=0;led3=0;led4=0; end if; if position=3 and dd30100 and stopcun(2)=0 and upcun(2)=0 and downcun(1)=0 then state=down;-电梯在三楼且当前层没有请求,电梯继续下降 elsif position=2 and dd30010 and stopcun(1)=0 and upcun(1)=0 and downcun(0)=0 then state=down;-电梯在二楼且当前层没有请求,电梯继续下降 else state=dooropen;if position=1 then if upcun(0)=1 then upcun(0)=0;end if; if stopcun(0)=1 then stopcun(0)=0;end if; elsif position=2 then if upcun(1)=1 then upcun(1)=0; end if; if downcun(0)=1 then downcun(0)=0; end if; if stopcun(1)=1 then stopcun(1)=0;end if; elsif position=3 then if upcun(2)=1 then upcun(2)=0;end if; if downcun(1)=1 then downcun(1)=0; end if; if stopcun(2)=1 then stopcun(2)statedooropenled=1; state if quick=1 then state=wait7;-快速关门,电梯开门后过三秒关门 elsif delay=1 then state=wait3;-延时关门,电梯开门后过九秒关门 else statestatestatestatestatestatestate dooropenled=0; if dengwo=1 then state0000 then state=rukou;-请求没有执行完毕,继续执行程序 else stateif position1 then stopcun(0)=1; state=rukou;-如果电梯不是停在一楼,将电梯返回到一楼 else led1=0;led2=0;led3=0;led4=0;alarmled=0; overweightled=0;dooropenled=0;upled=0;downled=0; position:=0;-电梯停止运行,进入上锁状态 end if;end case;end if;end process p1;end xin;第五章 部分时序仿真图5.1 电梯上锁电梯上锁,有请求也不执行;5.2 电梯报警当有紧急情况时,报警灯亮,有请求不会执行;5.3 电梯超载当电梯超载时,超载警报灯亮,有请求不执行5.4 电梯运行模拟这个图模拟的是多个请求时,电梯的运行情况。先是一楼有向上请求想到二楼去同时二楼有向上请求到四楼去,接着四楼有下降请求回到一楼,电梯运行情况是:电梯在一楼(一楼指示灯led1亮)时开门持续6秒(波形上可以看到开门灯亮),关门后,电梯向上运行(上行指示灯亮2秒),到二楼后(二楼指示灯led2亮),电梯开门(同样开门灯持续亮六秒),接着电梯继续上升,上行指示灯亮2秒,到三楼时,三楼指示灯led3亮,电梯继续向上运行,上行指示灯亮2秒,到达四楼时四楼指示灯亮,同时电梯门打开(开门灯亮6秒),关门后,电梯向下运行(下降指示灯亮2秒),到达三楼时三楼指示灯亮,电梯继续向下运行(下降指示灯亮2秒),到达2楼时二楼指示灯亮,电梯继续向下运行(下降指示灯亮两秒),到达一楼时,电梯门打开(开门灯亮),关门后没有其它请求,电梯停止运行。四楼有个向下的请求要到三楼去,二楼有个向下的请求要到一楼,电梯运行情况为:电梯开始时在一楼,一楼指示灯亮,电梯向上运行(上升指示灯亮2秒),到达二楼,二楼指示灯亮,电梯继续向上运行(上升指示灯亮2秒),到达三楼,三楼指示灯亮,电梯仍向上运行(上升指示灯亮2秒),到达四楼,四楼指示灯亮,电梯门打开(开门灯亮6秒),电梯关门后,电梯向下运行(下降指示灯亮2秒),到达三楼(三楼指示灯亮),电梯开门(开门指示灯亮6秒),电梯继续下降(下降指示灯亮2秒),到达二楼(二楼指示灯亮),电梯开门(开门指示灯亮6秒),电梯继续下降(下降指示灯亮2秒),到达一楼,电梯门打开,电梯运行结束。5.5 电梯开门延时模拟电梯受到一个不马上关门信号(dengwo=1),电梯关上的门重新打开,并延长一段时间门。5.6 电梯紧急开门在这幅波形图上,当第二次开门时有一个快速关门信号(quick=1)开门灯亮了四秒就灭了(电梯关门了),当第三次开门时收到一个延时信号(delay=1),开门灯亮了8秒才灭。注释:由于有的信号名字太长无法全部显示出来,现特意标示(每幅图都一样),信号的名称依次为:alarm alarmled clk1 delay dengwo dooropenled down2 down3 down4 downled It1 It2 It3 It4 led1 led2 led3 led4 lock overweight overweightled quick up1 up2 up3 upled 第七章 调试过程中出现的问题及解决措施Error:VHDL syntax error at contrl vhd(11)near text “if”:expecting “end”,or “(”or an identifier (“if” is a reserved keyword),or a parallel statement 这通常是警告你你写的程序在11行附近的if在后面没有end if 与之呼应。由于程序中用到判断条件的语句非常多,所以这个错误会经常出现。Error: VHDL error at haha.vhd(16): type of identifier haha does not agree with its usage as void type这是在警告你程序16行定义的haha的类型与其使用形式不对应,很可能是haha为变量,却被当作信号来赋值或者是haha为信号,却被当作变量使用。Error: VHDL syntax error at contrl.vhd(4) near text这表明程序第四行有错误,很可能知识用中文打了几个标点符号而已,这个要注意了,千万不要忽略了这个小错误,很可能你就是找不出来在那干着急。Error: VHDL syntax error at contrl.vhd(17) :variable “position” is used but not declared这个错误是因为你使用了变量variable 但是却在之前没有先进行定义,当然也可能是你定义了,但在使用时由于笔下误而打错了。还有一个值得注意的问题是在组合逻辑中不能使用if条件语句,而应该用when 语句来代替。还有问题就是在使用逻辑变量时,0和1一定要加上单引号,但对于整型变量却不用加单引号。错误一般提示都比较明显,很容易就可以改正过来,比较难改的是警告warning,因为错误一般都是语法造成的,只要学会了VHDL语言,掌握其使用方法就很容易改正错误,但警告不同,警告一般都是思维逻辑错误造成的,当然一般的警告不必管,但如果警告过多,比如超过10条以上你就得小心了,你需要把思路重新整理一下,看看有没有明显的逻辑错误,如果没有,在看看是哪个地方出毛病了,当把警告消除到10个以内基本就可以运行程序出现结果了。第八章 设计总结8.1 设计方案分析比较我设计的方案比较精简,因为我把电梯在四个楼层的请求做了一个综合,因为电梯在每个楼层都会收到来自各个楼层的不同请求(如是停还是上升或下降),我在程序中将所有请求综合起来,不用考虑当前电梯的状态是上升还是下降,只要当前层以上有请求,电梯就上升,只要当前层以下有请求,电梯就下降,否则就停在当前层。得益于这个设计,我的程序比别人少了近60来行。同时我将原方案中的两个模块(一个是主控制模块,另一个是计数模块)合在了一起,只用一个脉冲驱动,这样避免了模块之间的连接问题。是直观电路图简洁明了,电梯每执行一个请求后就将该请求清除,以免造成电梯重复执行请求,如电梯要在二楼停(开门使电梯内的人出来),同时二楼有向上或向下请求,电梯只需开一次们就行了。还有就是电梯可以通过按键delay和quick延长或缩短开门时间,正常情况是开门到关门持续6秒,延时这一情况可以持续8秒,快速关门时持续4秒,并且设有dengwo信号,可以根据实际情况在电梯关门后重新开门计数。但是有一个缺点是不能人为通过按键来随意调整开关门的具体时间(比如3秒关门),要随意调整开关门时间必须修改程序。8.2 心得体会在这学期短短的三周内,我学会了VHDL硬件编程语言,并在短时间内将所学的语言用于实践,这可以说是一个很大的收获,是对自我能力的一个极大的肯定。俗话说写程序容易,调试程序难,通过这次实践我真正体会到了这句话的深刻含义,尤其是对做电梯的同学来说,体会会更深一些,电梯本身并不复杂,就是那么几个状态,之所以难完全是因为电梯的模块较少,集成度比较高,主程序模块的代码非常长(平均大概是170行左右,高的可达250多行),这就给调试造成了极大的不方便,因为代码少,出现错误的概率也比较小。一旦程序代码较长,逻辑就很难理清,当然如果出现错误还好一点,最关键的是警告,如果警告没处理好,结果很可能就出不来,只能对着一大堆警告在那干着急,大呼“崩溃,悲剧”之类的话,我遇到过很多这种情况,几乎都快绝望了,但是一旦有了结果,那种高兴喜悦之情就会溢于言表,我亲眼目睹很多同学好不容易做出结果后那手舞足蹈的情景,即使内向的人也不例外。我想这次实践不仅使我们学科学知识这么简单,它还使我们明白了很多的道理,例如如何在绝望中寻找希望,阳光总在风雨后等等,我想对每一个同学而言,这番经历都将使其获益终生。最后感谢老师不辞劳苦的教诲和指导,祝老师一帆风顺。21
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!