电梯控制器设计终结版.docx
《电梯控制器设计终结版.docx》由会员分享,可在线阅读,更多相关《电梯控制器设计终结版.docx(22页珍藏版)》请在冰豆网上搜索。
电梯控制器设计终结版
河南机电高等专科学校
《可编程逻辑器件原理与应用》
课程设计报告
电梯控制器的设计
专业班级:
医电131
学号:
130411116
姓名:
徐长伟
时间:
2015年6月
成绩:
电梯控制器的设计
医电XX级X班XXX任课老师:
石新峰
摘要:
随着社会的发展,电梯的使用越来越普遍,已从原来只在商业大厦、宾馆使用,过渡到在办公楼、居民楼等场所使用,并且对电梯功能的要求也不断提高,相应地其控制方式也在不停地发生变化。
对于电梯的控制,传统的方法是使用继电器—接触器控制系统进行控制,随着技术的不断发展,微型计算机在电梯控制上的应用日益广泛,现在已进入全微机化控制的时代。
随着经济建设的持续高速发展,我国电梯需求量越来越大,电梯生产已成为我国一门极具前景的新兴产业。
针对我国电梯行业的现状,本设计以电子设计自动化EDA技术中的高速集成电路硬件描述语言VHDL编写6层电梯控制程序,实验平台为Altera公司的QuartusII程序。
关键词:
电梯控制、EDA、VHDL、QuartusII
目录
一、概述2
1.1方案确定2
1.2设计依据2
二、设计要求2
三、总体构思2
3.1构思2
3.2总体设计2
四、硬件电路设计2
4.1模块电路图2
4.2模块设计分析2
五、软件设计2
六、下载及调试2
七、总结与展望2
参考文献2
附件程序2
一、概述
人和土地资源短缺的矛盾日趋激化,我国地少人多的国情,注定了我们必须合理解决人与土地的矛盾。
兴建高层建筑是其中的有效措施之一,随之楼层电梯业便应运而生。
随着我国城镇化程度的加大,电梯市场越来越繁华,人们对电梯的要求越来越高。
如何更安全、更快捷地到达目的楼层,也就成为了人们对电梯的最为根本的要求。
因此,本设计就六层电梯控制器设计为例,结合EDA技术,对电梯控制进行设计。
1.1方案确定
目前用电梯控制的方案有三种:
EDA技术在电梯控制的应用、单片机技术在电梯控制的应用、PLC技术在电梯控制的应用。
EDA技术不是某一学科的分支,或某种新的技能技术,它是一们综合性学科,融合多学科于一体,打破了软件和硬件间的壁垒,使计算机的软件与硬件实现、设计效率和产品性能合二为一,它代表了电子设计技术和应用技术的发展方向。
VHDL具有与具体硬件电路无关和设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化结构化设计方面,表现了强大的生命力和应用潜力。
EDA使得设计者的工作仅限于利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
正因EDA在设计控制系统中的这些特点,在电梯控制电路上采用EDA技术进行开发,越来越受到人们的重视。
对于符合市场需求的大规模系统,要达到高效、高速完成,必须有多人甚至多个开发组共同并行工作才能实现。
对于用EDA技术完成的一个确定的设计,可以利用相应的工具平台进来逻辑综合和优化,完成设计任务。
基于EDA技术的VHDL语言对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
这为电子设计的入门者提供了便捷的帮助。
相信在不远的将来,我国相关的专业技术人员使用EDA技术进行工程设计,就像现在使用计算器一样,虽然大部分人不能开办集成电路制造厂,但是却能快速、经济地制造(设计)自己的专用集成电路或集成电子系统。
所以本设计采用EDA技术实现对电梯的控制。
1.2设计依据
现代电子设计技术的核心是EDA技术。
基于EDA技术开发的实现六层电梯自动控制与目前主流的利用可编程逻辑控制器实现电梯控制紧密相连。
硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。
使用VHDL语言进行程序设计,在QuartusII软件上对程序进行编译、仿真。
在QuartusII平台上开发具有易学易懂、控制灵活方便、抗干扰能力强、运行稳定可靠等优点。
1.2.1EDA
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。
这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。
1.2.2VHDL
VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)语言于1983年由美国国防部发起创建,由电工和电子工程师协会(theinstituteofelectricalandelectronicsengineer)进一步发展并在1987年作为“IEEE1076”发布。
从此,VHDL成为硬件描述语言的业界标准之一。
VHDL作为一个规范语言和建模语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
VHDL具有与具体硬件电路无关和设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化结构化设计方面,表现了强大的生命力和应用潜力。
应用VHDL进行系统设计具有:
功能强大、可移植性、独立性、可操作性、灵活性等特点。
一个完整的VHDL程序是以下五部分组成的:
库(LIBRARY)、程序包(PACKAGE)、实体(ENTITY)、构造体(ARCHITECTUR)、电路的具体描述配置(CONFIGURATION)。
1.2.3QuartusII
Altera公司的QuartusII软件提供了可编程片上系统(SOPC)设计的一个综合开发环境。
QuartusII开发工具人机界面友好、易于使用、性能优良,并自带编译、仿真功能。
QuartusII软件支持VHDL和Verilog硬件描述语言的设计输入、基于图形的设计输入方式以及集成系统级设计工具。
QuartusII软件可以将设计、综合、布局和布线以及系统的验证全部都整合到一个无缝的环境之中,其中也包括和第三方EDA工具的接口。
QuartusII设计软件根据设计者需要提供了一个完整的多平台开发环境,它包含整个FPGA和CPLD设计阶段的解决方案。
在实际应用设计中,对程序原理性及可执行性的验证主要集中在程序修改阶段,尤其在处理的数据复杂、繁多时,QuartusII自带的波形输入仿真就很难实现程序的验证,而且输出的数据不能方便的以波形图示直观的呈现,给程序设计者在校验程序阶段带来了很多的不便。
再有,在很多数字电路设计中,考虑成本的问题,FPGA实现的往往是设计的核心部分,而很多的外围电路如A/D转换器、D/A转换器等仍然使用传统的接口芯片来实现。
而QuartusII设计只是针对数字信号,并不支持模拟量的输入。
而仅仅为了便于程序的验证而用FPGA实现这些外围电路,不但会大大延长程序的开发周期,更会增大开发的成本。
而MATLAB具有强大的运算功能,可以容易的实现A/D、D/A转换等外围电路功能,并能以波形形式将结果直观地呈现,极大地方便了程序设计人员设计应用系统。
二、设计要求
使用FPGA完场6层的电梯控制系统。
可以使用状态机实现。
要求指示电梯所在楼层位置等其他必要的信号。
通过仿真结果验证其正确性,并在开发板上进行硬件测试。
电梯运行规则:
上升时,响应比当前位置高的上楼要求,由下往上逐个执行;如果楼层有下楼请求,直接升到由此请求的最高层,然后进入下降模式。
进入下降模式后,只响应比当前位置低的下楼请求,由上到下逐个执行。
每1秒上升或者下降1层。
有信号灯指示电梯处于上升或者下降状态,并有数码管显示电梯到达层数。
每一层有信号灯指示该层电梯门状态,有两个按键分别响应上升或下降的求。
每一层电梯内部有乘客到达楼层的停站请求开关及其显示。
电梯到达有停站请求的楼层后,电梯门打开,指示灯亮,4秒后电梯门关闭,指示灯灭,直至执行完。
最后停在发出最后一个请求的楼层。
电梯的初始位置为一层,处于开门状态。
三、总体构思
3.1构思
除了顶层和底层外,各楼层均设有上下请求开关,顶层和底层分别设有下降和上升请求开关,电梯内设有乘客到达层次的请求开关。
电梯每1s上升或下降一层,电梯到达有停站请求的楼层后,经过1s后电梯门打开,开门指示灯亮,开门5s后电梯指示灯灭,电梯继续运行,直至运行完最后一个请求后停靠在当前层。
以上是我们所应实现的基本功能。
通过分析以及参考图书馆的有关书籍,参照一些网上的程序,最后总结出了电梯正常运行的七个状态:
上升、下降、上升的过程中途停止、下降的过程中途停止、开门、关门、等待状态。
电梯在上述七个状态间的转移是通过三段式状态机来实现的,各状态间的转移大体与生活中的电梯运转一致,有如下的基本原则:
方向为第一优先准则,电梯在运转时先响应同方向上的请求,只有当同方向上的请求响应完后,才能转而响应不同方向上的请求。
初始化状态为1楼等待门是关闭的。
3.2总体设计
这里采用了七个状态实现了有限状态机。
图3-2电梯状态转换图
以上是两种基本的电梯状态转换图:
黑线:
WAITTOUPTOUPSTOPTOOPENDOORTOCLOSEDOORTOWAIT
粉红线:
WAITTODOWNTODOWNSTOPTOOPENDOORTOCLOSEDOORTOWAIT
四、硬件电路设计
4.1模块电路图
4.1.1电梯主控制器模块
图4-1-1电梯控制模块
端口说明:
call_down_2,call_down_3,call_down_4,call_down_5,call_down_6则分别为2-6楼的下行请求信号;request_1,request_2,request_3,request_4,request_5,request_6则分别为电梯内部的停靠1-6楼的请求。
上述各端口均为有请求时,输入为高电平,否则为低电平;clk分别为状态转移时钟,reset为复位信号。
OutputPort:
PosOut输出当前电梯所在的楼层,DoorFlag为开门标志,UpDnFlag为电梯上下标志,LiftState输出当前电梯的状态.
PosOut取值可
6'b000001,6'b000010,6'b000100,6'001000,6'b010000,6'b100000分别代表电梯处在1,2,3,4,5,6楼。
这样编码的话,有利于后面的比较判断。
DoorFlag取值可为1'b0,1'b1,分别代表当前门是关闭和当前门是打开的。
UpDnFlag取值可为2'b00,2'b01,2'b10,分别代表当前电梯是上升的,下降的和静止的。
LiftState7'b0000001,7'b0000010,7'b0000100,7'b0001000,7'b0010000,7'b0100000,7'b1000000,分别表示电梯处于等待模式、上升模式、下降模式、上升停止,下降停止、开门和关门等7个状态。
4.1.2分频模块
图4-1-2分频模块
端口说明:
Inputports:
cp_50M;
outputports:
cp_1;
4.1.3电梯状态仲裁器
图4-1-3状态仲裁器
端口说明:
Inputports:
elevator_state,count_in;
Outputports:
open_enable,stop_enable,up_enable,down_enable,close_enable;
4.1.4LCD驱动模块
图4-1-4驱动模块
端口说明:
Inputports:
inputopen_enable,stop_enable,up_enable,down_enable,close_enable;
inputCLOCK_50;//50MHz
inputKEY;
outputports:
inout[7:
0]LCD_DATA;//LCDDatabus8bits
outputLCD_ON;//LCDPowerON/OFF
outputLCD_BLON;//LCDBackLightON/OFF
outputLCD_RW;//LCDRead/WriteSelect,0=Write,1=Read
outputLCD_EN;//LCDEnable
outputLCD_RS;//LCDCommand/DataSelect,0=Command,1=Data
4.2模块设计分析
4.2.1电梯主控制器模块
此段智能电梯控制器由三个重要部分组成的。
1.信号并置部分:
完成对5路向上请求、5路向下请求、6路内部请求的信号并置,化繁为简。
2.三段式有限状态机部分:
在有请求的情况下,电梯控制器还要根据电梯的当前状态和当前的楼层去判断电梯的下一步该如何运作。
3.计数器部分:
完成电梯的开门、关门的时间管理。
4.2.2分频模块
这段分频器完成对50Mhz的1分频操作。
采用传统的“一半就翻转”的计数技巧。
4.2.3电梯状态仲裁器
完成电梯信号到LCD控制的信号转换。
其中也采用了“电梯主控制器”中的信号并置的思想。
这一点可以在我的程序中十分清楚的看到,在此我不再赘述。
4.2.4LCD驱动模块
这个模块我是采用“拿来主义”的。
因为是DE2板子提供的源程序,所以编写起来还算比较轻松。
就只加了一个“根据不同的输入产生不同的输出”的模块。
中途还遇到了字符型液晶不能更新的问题,不过在同学的帮助下,最终还是解决了。
4.2.5数码管译码模块、数码管时间译码模块
以上两个模块一起讲比较合适,它们都是采用了同样的译码原则,只不过条件不一样而已。
我们可以针对不同的输入根据自己的意愿把它译成同样的数码显示。
六、下载及调试
1.当电梯处于初始状态时,电梯在高层有向下的请求时:
图6-1初始态
2.LCD的显示由于数据太多,所以单独显示如下:
图6-2-1显示itisstatic..
随后会显示itisstatic..
图6-3-2显示doorisrising..
以上的字符发送到液晶显示模块之后,可以显示“doorisrising..”
随后会显示:
图6-2-3显示itisstatic..
可以显示“itisstatic..”
图6-2-4显示doorisopening..
以上的字符发送到液晶显示模块之后,可以显示“doorisopening..”
随后会显示:
图6-2-5显示itisclosing..
以上的字符发送到液晶显示模块之后,可以显示“itisclosing..”
最后会显示下列字符,电梯重新回到初始等待状态:
图6-2-6显示itisstatic..
以上可以显示“itisstatic..”
说明:
由于LCD显示波形会占用比较多的空间,所以以上仅以在高层有向下的请求为例来说明,电梯的状态完全可以通过LCD来正确地显示出来。
鉴于此,下面的波形将不展示LCD显示部分的波形图。
3.当电梯停在6楼处于等待状态时,在1楼和2楼同时有向上的请求时:
图6-3等待状态
4.当电梯停在1楼处于等待状态时,在6楼和5楼同时有向下的请求时:
图6-4等待状态
5.当电梯停在6楼时,有在5楼的向下的请求时,电梯应该先到五楼,电梯内部请求到1楼,如果电梯在下降的过程中,有在2楼的向上的请求时,电梯应该先响应内部请求,然后响应外部请求:
图6-5状态响应
七、总结与展望
电梯控制器系统设计已经全部完成,基本实现了预期效果,实现了电梯按预定运行规则上升、下降、载客等功能,并设计了提前关门功能,使电梯运行更便捷,设计了关门延时功能、超载报警功能、故障报警功能,使电梯运行更加安全更加可靠。
在本设计中,因为考虑了扩展性,所以在信号定义的时候就使用了二进制的向量,而不是整数。
在设计方法上也做了特殊的设计,所以使得扩展性较好。
如果要实现n层电梯的控制,首先在端口的地方就要加入所有的按键,而指示灯只要把向量中的6改成n就可以了。
在本设计过程中还需要改进的地方有,电梯运行规则的优化(如设计闲时忙时控制规则)、电梯运行速度的控制、设计更多的报警功能等。
电梯控制系统的设计中体现了VHDL覆盖面是如此的广,描述能力强,是一个多层次的硬件描述语言及运行速度快,使用方便,便于修改,设计简单等特点。
本设计在实用方面和参考方面具有一定的价值。
参考文献
[1]王伟.VerilogHDL程序设计与应用.人民邮电出版社
[2]夏宇闻数字系统设计:
Verilog实现.高等教育出版社
[3]王金明.数字系统设计与VerilogHDL.电子工业出版社
[4]李彦宏.XX
附件程序
电梯主控制器模块
moduleelevator_controller(
//inputports:
cp_50M,clk,reset,forbid,
call_up_1,call_up_2,call_up_3,call_up_4,call_up_5,
call_down_2,call_down_3,call_down_4,call_down_5,call_down_6,
request_1,request_2,request_3,request_4,request_5,request_6,
//outputports:
out,LiftState,over_alarm,count_out,count);
//outputports:
output[6:
0]out;//输出楼层
output[6:
0]LiftState;//输出电梯状态
outputover_alarm;//出错
output[6:
0]count_out;//计数器输出,便于我控制开关门的状态显示
output[2:
0]count;//计数器
//inputports:
inputcp_50M;
inputclk,reset,call_up_1,call_up_2,call_up_3,call_up_4,call_up_5,call_down_2,call_down_3,call_down_4,call_down_5,call_down_6,request_1,request_2,request_3,request_4,request_5,request_6;
inputforbid;
wireover_alarm;
wire[6:
0]out;
wire[6:
0]count_out;
reg[5:
0]pos,PosOut;
reg[2:
0]count;regDoorFlag;
reg[1:
0]UpDnFlag;
reg[6:
0]LiftState,NextState;
wirereal_clk;
reg[5:
0]up_all,down_all,request_all;
parameterWAIT=7'b0000001,UP=7'b0000010,DOWN=7'b0000100,UPSTOP=7'b0001000,DOWNSTOP=7'b0010000,OPENDOOR=7'b0100000,CLOSEDOOR=7'b1000000;
parameterFLOOR1=6'b000001,FLOOR2=6'b000010,FLOOR3=6'b000100,FLOOR4=6'b001000,FLOOR5=6'b010000,FLOOR6=6'b100000;
parameterTRUE=1'b1,FALSE=1'b0;
parameterOPEN=1'b1,CLOSED=1'b0;
parameterUPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;
assignreal_clk=(clk&(~forbid));
always@(call_up_1orcall_up_2orcall_up_3orcall_up_4orcall_up_5)
up_all={1'b0,call_up_5,call_up_4,call_up_3,call_up_2,call_up_1};
always@(call_down_2orcall_down_3orcall_down_4orcall_down_5orcall_down_6)
down_all={call_down_6,call_down_5,call_down_4,call_down_3,call_down_2,1'b0};
always@(request_1orrequest_2orrequest_3orrequest_4orrequest_5orrequest_6)
request_all={request_6,request_5,request_4,request_3,request_2,request_1};
always@(posedgereal_clkorposedgereset)
if(reset)
count<=0;
elseif((NextState==OPENDOOR)&&(count<5))
count<=count+1;
else
count<=0;
display_decodeh1(cp_50M,PosOut,out,over_alarm);
display_decode_counth2(cp_50M,count,count_out);
always@(posedgereal_clkorposedgereset)
if(reset)
begin
LiftState<=WAIT;
end
else
LiftState<=NextState;
always@(LiftStateorup_allordown_allorrequest_allorposorcountorUpDnFlag)
case(LiftState)
WAIT:
begin
if(request_all>0)
begin
if((request_all&pos)>0)
NextState=OPENDOOR;
elseif(request_all>pos)
NextState=UP;else
NextState=DOWN;
end