厦门大学电子工程系FPGA生产实习报告题目全自动电梯控制器专业电子工程班级04电子学生姓名aka学生学号指导教师黄龙杨老师2007年7月26日目录第一部分摘要第二部分设计要求第三部分方案论证与系统分析第四部分模块设计第五部分系统仿真第六部分总结一、摘要:本问从设计电梯控制器系统分析入手,并进行了电路设计、综合和仿真。主要分为5个模块,一是显示模块;一是门的开关控制模块;一个是电梯内部的楼层选择模块,一是外部的选择模块,还有一个总的控制模块。用于协调各部分的工作。关键词:VHDL;控制器;FPGA;电梯二、设计要求:(1)每层门外有上、下请求按钮(第一层只有上,第八层只有下),内有选择到达楼层按钮。有升、降以及正运行到哪层的指示。(2)能记忆内外所有请求信号。按照运行规则逐个响应,执行完毕清除该请求信号。(3)电梯运行规则:上升时,只响应电梯所在楼层以上的上楼请求,逐个响应完以后运行到下降请求的最高楼层,开始下降。下降时,只响应电梯所在楼层以下的下楼请求。逐个响应完以后运行到有上升请求的最低层。然后上升。执行完所有请求后停在最后响应的楼层。(4)以外面光电传感器感应信号来判断电梯到达哪个楼层,到达某层数码管显示该层,一直等到到达新的层显示更新。如果要响应某层请求,到达该层1秒后开门,开门灯亮,默认开门10秒后关门,开门灯灭,然后继续运行。如果内部提前按关门按钮则立即关门,若内部一直按开门按钮则直到松开该按钮再关门。(5)开机时电梯停在一层,所有请求全清除。三、方案论证与系统分析:本实验可以采取多种方案,比如单片机实现,纯硬件打结等,但此次的方法-----采用可编程逻辑器件通过对器件内部的设计来实现系统功能,是一种基于芯片的设计方法.设计者可以根据需要定义器件内部逻辑和引出端,将电路板设计的大部分工作放在芯片的设计中进行,通过对芯片设计实现数字系统的逻辑功能.灵活的内部功能块组合,引出端定义等,可大大减轻电路设计和电路板设计和电路板设计的工作量和难度,有效的增强设计的灵活性,提高工作效率[1].同时采用可编程逻辑器件,设计人员在实验室可反复编程,修改错误,以期尽快开发开发产品,迅速占领市场。基于芯片的设计方法可以减少芯片的数量,缩小系统体积,降低能源消耗,提高系统的性能和可靠性。现在分析一下该系统的特点。该设计采用方向优先控制方式方案,方向优先控制是指电梯运行到某一楼层时先考虑这一楼层是否有请求:有,则停止;无,则继续前进。停下来后再启动时的步骤:考虑前方——上方或下方是否有请求:有,则继续前进;无,则停止;检测后方是否有请求,有请求则转向运行,无请求则维持停止状态。这种运作方式下,电梯对用户的请求响应率为100%,且响应的时间较短。电梯在维修停止状态的时候可以进入省电模式,又能节省大量电能。电梯方向有限控制方式控制器系统方框图如图1所示,电路图如图2所示。图1电梯控制器系统方框图,图2电梯控制器电路图。图1顶层原理图:四、模块设计1.电梯内部的楼层选择模块modulefloorselect(rst,n1,n2,n3,n4,n5,n6,n7,n8,clear1,clear2,clear3,clear4,clear5,clear6,clear7,clear8,floor,floorto,dup,ddown,start)output[7:0]floorto,ddown,dup;inputrst,n1,n2,n3,n4,n5,n6,n7,n8,clear1,clear2,clear3,clear4,clear5,clear6,clear7,clear8,start;input[7:0]floor;reg[7:0]floorto,dup,ddown;always@(rstorn1orclear1)beginif(!rst)floorto[0]=0;elseif(n1)floorto[0]=1;elseif(clear1==1&&start==0)floorto[0]=0;else;endalways@(rstorn2orclear2)beginif(!rst)floorto[1]=0;elseif(n2)floorto[1]=1;elseif(clear2==1&&start==0)floorto[1]=0;else;endalways@(rstorn3orclear3)beginif(!rst)floorto[2]=0;elseif(n3)floorto[2]=1;elseif(clear3==1&&start==0)floorto[2]=0;else;endalways@(rstorn4orclear4)beginif(!rst)floorto[3]=0;elseif(n4)floorto[3]=1;elseif(clear4==1&&start==0)floorto[3]=0;else;endalways@(rstorn5orclear5)beginif(!rst)floorto[4]=0;elseif(n5)floorto[4]=1;elseif(clear5==1&&start==0)floorto[4]=0;...