基于FPGA的电梯控制器设计.doc_第1页
基于FPGA的电梯控制器设计.doc_第2页
基于FPGA的电梯控制器设计.doc_第3页
基于FPGA的电梯控制器设计.doc_第4页
基于FPGA的电梯控制器设计.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前言当今社会,随着城市建设的不断发展,高层建筑的不断增多,电梯作为高层建筑中垂直运行的交通工具已与人们的日常生活密不可分。目前电梯的控制普遍采用了两种方式,一是采用微机作为信号控制单元,完成电梯信号的采样、运行状态和功能的设定,实现电梯的自动调度和集选运行功能,拖动控制则由变频器来完成;第二种控制方式用可编程控制器取代微机实现信号控制。从控制方式和性质上来说,这两中方法并没有太大的区别。目前电梯控制系统主要有三种控制方式:继电路控制系统(“早期安装的电梯多位继电器控制系统”)、FPGA/CPLD的控制系统、微机控制系统。继电器控制系统由于故障率高、可靠性差、控制方式不灵活以及消耗功率大等缺点,目前已逐渐被淘汰,微机控制系统虽在智能控制方面有较强的功能,但也存在抗扰性差,系统设计复杂,一般维修人员难以掌握其维修技术等缺陷。而FPGA/CPLD控制系统由于运行可靠性高,使用维修方便,抗干扰性强,设计和调试周期较短等优点,倍受人们重视等优点,已经成为目前在电梯控制系统中使用最多的控制方式,目前也广泛用于传统继电器控制系统的技术改造。1.总体设计方案介绍1.1 利用FPGA/CPLD进行电梯控制器设计的一般流程通常归纳为以下7个步骤。第1步:设计输入。在传统设计中,设计人员是应该传统的原理图输入方法来开始设计的。自90年代初,Verilog、VHDL、AHDL等硬件描述语言的输入方法得到了广大工程设计人员的认可。第2步:前仿真。所设计的电路必须在布局线前验证,目的主要是在仿真时,验证电路功能是否有效。在ASIC设计中,这一步骤称为第一次Sign-Off。第3步:设计输入编译。设计输入之后就有一个从高层次系统行为设计向低层次门级逻辑电路的转化翻译过程,即把设计输入的某种或某几种数据格式(网表),以求达到与工艺无关。第4步:设计输入的优化。对于上述综合生成的网表,根据布尔方程功能等效的原则,用更小更快的综合结果替代一些复杂的单元,并与指定的库映射生成新的网表,这是硬件描述语言输入方式中减小电路规模的一条必由之路。第5步:布局布线。当初步的仿真被验证后,就开始布局布线。这一布局布线相对规划出ASIC和FPGA/CPLD的设计第6步:后仿真。设计人员需要利用在布局布线中获得的更精确的RC参数再次验证电路的功能和时序。在ASIC设计中,这一步骤称为第二次Sign-off。第7步:流片。布局布线和后仿真完成之后,当需要大批量生产该芯片时,就可以开始ASIC芯片的投产。1.3电梯控制器的系统设计方案本次试验基于FPGA电梯控制器的设计流程主要完成4层电梯控制器的设计,实现原理主要利用EDA层次设计思想,运用QuartusII软件的操作方法,首先完成两个模块的底层文件设计,此三个模块分别是主控制器(超重警告,到达下楼信号,外人请求信号)、分频器,最后分别用VHDL语言程序作出后,并打包成模块;利用原理图输入设计的方法将此三个模块做成整个控制器的设计。原理框图如图1-2图1-2 电梯方向优先控制方式控制系统方框图2.单元模块设计2.1 电梯控制系统的设计在此本组采用方案(二),控制器的功能模块如图2-1所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在的楼层数通过译码器译码从而在楼层显示器中显示。分控制器把有效的请求传给主控的楼层数。由于分控制器相对简单很多,所以主控制器是核心部分。图2-1 电梯控制器原理框图2.1.1电梯控制器系统一般要求1)每层电梯入口处设有上下请求开关各1个,电梯内设有乘客到达层次的数字开关。电梯当前所在的楼层位置用两位数码管显示,用两只发光二极管显示开门/关门状态,用发光二极管显示每层的上下请求状态。2)显示电梯当前所处位置和电梯上行、下行及开门、关门状态。3)电梯到达有停靠站请求的楼层后,电梯门就会自动打开门指示灯亮,开门6秒后,电梯门自动关闭(开门指示等灭)电梯继续运行。4)能记忆电梯内外的所有请求信号,并按照电梯运行的规则次第响应,即电梯上升时只能响应高层的呼唤的请求,下降时只响应低层的呼唤请求,每个请求信号保留到执行后撤出。5)当没有请求信号时,电梯停在一楼。6)电梯有超载提示。当电梯内部超载过电梯规定的人数或重量后,电梯会自动报警,提示电梯已超载。2.2电梯控制器系统组成及模块设计介绍2.2.1系统组成:该设计采用方向优先控制方式方案,方向优先控制是指电梯运行到某一楼层时先考虑这一楼层是否有请求:有,则停止;无,则继续前进。停下来后再启动时的步骤:考虑前方上方或下方是否有请求:有,则继续前进;无,则停止;检测后方是否有请求,有请求则转向运行,无请求则维持停止状态。2.2.2 模块设计(一)设计原理电梯升降原理是利用步进电机在控制器的驱动下旋转固定角度到达指定楼层的即:高度H=R楼层数N=HL式中L为单位楼层的高度;R为步进电机的转轴半径;为步进电机旋转的角度。(二)设计思想及设计方案解释 电梯升降控制的方法有多种,电机也是多种多样,步进电机能准确的旋转指定角度并具有锁死功能是一种理想的电梯驱动电机。本课程设计介绍的是用FPGA进行控制步进电机升降从而模拟出电梯的功能。本系统采用了多CPU协同操作,这样简化明晰了各个模块的功能,便于调试和维护。两个大的模块分别为:主控制器模块(电梯外控制模块,电梯内控制模块,中央运算模块),分频器模块。电梯内、外控制模块:完成对电梯外部4个楼层的按键识别,并点亮与用户按键对应的指示灯通知用语系统已经接收按键请求。当接收到请求后,该模块将向中央运算器发送请求楼层信号,便于中央运算处理。同时当电梯到达当前楼层时该模块还将熄灭相应的指示灯。中央运算模块:负责对电梯外控制模块,电梯内控制模块,传过来的信息进行分类收集,按照给定的算法做出相的计算和任务调度,并将运算结果交由步进电机控制模块,同时,中央运算模块将相应楼层送入液晶显示器显示。分频器模块:接受中央运算模块的楼层和方向数据旋转相应的转数后停止,发出作业完成信号等待中央运算模块的再次调度上下行时间控制:电梯的行驶速度设定为常数,上下行一层需时2秒。用计数器count2控制。上电锁控制:电梯有控制锁,用lock信号表示。开锁上电,锁上时电梯不能运行。电梯运行锁用一拨动开关代替,低电平上锁,高电平解锁。上电后初始化系统各按钮指示灯,内部变量。故障控制:电梯有重量限制,超重用一拨动开关代替,用overweight信号表示,在关门时检测,高电平有效,超载时电梯不能运行,直到超载信号被清除,电梯内设有超载灯;电梯内设有事故报警trouble按钮(通话器),用一拨动开关代替,用trouble信号表示,高电平有效,任何时候报警时电梯不能继续运行,保持当前状态不变,并有warning指示灯,信号保留至事故消除。电梯门控制:到达停靠层时电梯门自动打开,设有开关门LED指示开关门情况,用door表示。默认开门停留时间是6秒,电梯内设有手动开关门按钮,可以人为控制延长开门时间或立即关门。(三)设计方案总结1)外部数据高速采集模块设计有效的对外部信号采集、处理要求电梯控制器对外部请求信号的实时、准确采集准确、实时的捕捉楼层到达信号;有防止楼层到达信号、外部请求信号的误判。2)信号存储模块电梯控制器的请求输入信号有27个(电梯外有9个上升请求和9个下降请求的用户输入端口,电梯内有9个请求用户输入端口),由于系统对内、外请求没有设置优先级,各楼层的内、外请求信号被采集后可先进行运算,再存到存储器内。3)基于FPGA的中央处理模块中央数据处理模块是系统的核心,通过对存储的数据(含请求、到达楼层等信号)进行比较、判断以驱动系统状态的流转。电梯工作过程中共有9种状态:等待、上升、下降、开门、关门、停止、休眠、超载报警以及故障报警状态。一般情况下,电梯工作起始点是第一层,起始状态是等待状态,启动条件是收到上升请求。2.3模块设计程序硬件分析和软件分析2.3.1 电梯硬件控制模块外控制模块电梯外控制模块是负责收集电梯外部的人员按键和控制相应LED灯亮灭的模块,考虑到每一层楼都会有向上和向下两个运行方向,所以在4个楼层里一共需要4个按键和4个LED灯。而每个按键按下时会点亮亮对应的LED灯,当电梯到达该楼层时就熄灭该楼层对应运动方向的LED灯。当灯熄灭的时候就表示电梯已经执行了相应的操作了。考虑到系统I/O资源有限。其模块电路如图2-2所示:图2-2 电梯外硬件电路2.3.2 电梯硬件控制模块内控制模块电梯内控制模块是负责收集电梯内部的人员按键和控制相应LED灯亮灭的模块。它安装在电梯内部,一共需要4个按键和4个LED灯。而每个按键按下时会点亮亮对应的LED灯,当电梯到达该楼层时就熄灭该楼层的LED灯。考虑到系统I/O资源需求,4个按键值采用挂在PORTB口。其模块电路如图2-3所示:图2-3电梯内硬件电路2.3.3电梯硬件控制模块软件设计(一)主控制器的功能1)完成4个楼层多用户的载客服务控制。2)电梯运行时显示电梯的运行方向和所在的楼层。 3)当电梯到达选择的楼层时,电梯自动开门。 4)具有提前关电梯门和延时关电梯门的功能。 5)响应分控制器的有效请求,如果到达有请求的楼层,电梯自动开门。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity tenlift is port ( clk : in std_logic; -时钟信号overweight,close,quick,clr : in std_logic; -超载up1,up2,up3,up4,up5,up6,up7,up8,up9: in std_logic; -电梯外人的上升请求信号down2,down3,down4,down5,down6,down7,down8,down9,down10 : in std_logic; -电梯外人的下降请求信号a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 : in std_logic; -电梯内人的请求信号gate1,gate2,gate3,gate4,gate5,gate6,gate7,gate8,gate9,gate10 : in std_logic; -到达楼层信号door : out std_logic_vector(1 downto 0); -电梯门控制信号led_c_f : out std_logic_vector(6 downto 0); -电梯所在楼层显示led_o_u:out std_logic_vector(9 downto 0); -电梯外人上升请求信号显示led_o_d:out std_logic_vector(9 downto 0); -电梯外人下降请求信号显示led_i_a : out std_logic_vector(9 downto 0); -电梯内请求信号显示warning : out std_logic; -看门狗报警信号up_down,overweight_warning : out std_logic; -电梯运动方向显示,超载警告信号up,down : out std_logic ); -电机控制信号和电梯运动end ;architecture oo of tenlift issignal ina1,ina2,ina3,ina4,ina5,ina6,ina7,ina8,ina9,ina10:std_logic; -电梯内人请求信号寄存信号signal upo1,upo2,upo3,upo4,upo5,upo6,upo7,upo8,upo9:std_logic; -电梯外人上升请求信号寄存信号signal downo2,downo3,downo4,downo5,downo6,downo7,downo8,downo9,downo10:std_logic; -电梯外人下降请求信号寄存信号signal q:integer range 0 to 1; signal q1:integer range 0 to 6; signal q2:integer range 0 to 9; -看门狗计数器signal dd,cc_u,cc_d,dd_cc:std_logic_vector(9 downto 0); -电梯内外请求信号寄存器signal opendoor:std_logic; -开门信号signal updown:std_logic; -电梯运动方向信号寄存器signal en_up,en_dw:std_logic; -预上升、预下降使能信号begincom:process(clk)beginif clkevent and clk=1 then if clr=0 then q1=0;q2=0;warning=0; -清除故障报警 elsif overweight=0 then overweight_warning=1; q1=3 then door=10; else door=00;end if; elsif q=1 then q=0;overweight_warning=0;if q2=3 then warning=1; -故障报警elseif opendoor=1 then door=10;q1=0;q2=0;up=0;down=0; -开门操作elsif en_up=1 then if close=0 then door=10;q1=0;q2=q2+1; elsif quick=0 then q1=3; -提前关门elsif q1=6 then door=00;updown=1;up=3 then door=01;q1=q1+1; -电梯进入关门状态else q1=q1+1;door=00; end if;elsif en_dw=1 then -下降预操作if close=0 then door=10;q1=0;q2=q2+1; elsif quick=0 then q1=3; elsif q1=6 then door=00;updown=0;down=3 then door=01;q1=q1+1; else q1=q1+1;door=00; end if;end if; if gate1=0 then led_c_f=1001111; -电梯到达1楼,数码管显示1 if ina1=0 or upo1=0 then ina1=1; upo1=1;opendoor0000000001 then en_up=1; opendoor=0; -有上升请求,则电梯进入预备上升状态elsif dd_cc=0000000000 then opendoor=0; -无请求时,电梯停在1楼待机 end if; elsif gate2=0 then led_c_f=0100100; -电梯到达2楼,数码管显示2if updown=0 then if ina2=0 or upo2=0 then ina2=1; upo2=1; opendoor0000000011 then en_up=1; opendoor=0; -有上升请求,则电梯进入预备上升状态 elsif dd_cc0000000010 then en_dw=1; opendoor=0; -有下降请求,则电梯进入预备下降状态 end if; elsif ina2=0 or downo2=0 then ina2=1; downo2=1;opendoor=1; -电梯前一运动状态为下降,有当前层的请求,则电梯进入开门状态elsif dd_cc0000000010 then en_dw=1; opendoor0000000011 then en_up=1; opendoor=0; -有上升请求,则电梯进入预备上升状态 end if;elsif gate3=0 then led_c_f=0110000; -电梯到达3楼,数码管显示3 if updown=0 then if ina3=0 or upo3=0 then ina3=1; upo3=1;opendoor0000000111 then en_up=1; opendoor=0; elsif dd_cc0000000100 then en_dw=1; opendoor=0; end if;elsif ina3=0 or downo3=0 then ina3=1; downo3=1; opendoor=1; elsif dd_cc0000000100 then en_dw=1; opendoor0000000111 then en_up=1; opendoor=0; end if;elsif gate4=0 then led_c_f=0011001; -电梯到达4楼,数码管显示4 if updown=0 then if ina4=0 or upo4=0 then ina4=1; upo4=1; opendoor0000001111 then en_up=1; opendoor=0; elsif dd_cc0000001000 then en_dw=1; opendoor=0; end if;elsif ina4=0 or downo4=0 then ina4=1; downo4=1; opendoor=1; elsif dd_cc0000001000 then en_dw=1; opendoor0000001111 then en_up=1; opendoor=0; end if;elsif gate5=0 then led_c_f=0010010; -电梯到达5楼,数码管显示5 if updown=0 then if ina5=0 or upo5=0 then ina5=1; upo5=1;opendoor0000011111 then en_up=1; opendoor=0; elsif dd_cc0000010000 then en_dw=1; opendoor=0; end if;elsif ina5=0 or downo5=0 then ina5=1; downo5=1;opendoor=1; elsif dd_cc0000010000 then en_dw=1; opendoor0000011111 then en_up=1; opendoor=0; end if;elsif gate6=0 then led_c_f=0000010; -电梯到达6楼,数码管显示6if updown=0 then if ina6=0 or upo6=0 then ina6=1; upo6=1; opendoor0000111111 then en_up=1; opendoor=0; elsif dd_cc0000100000 then en_dw=1; opendoor=0; end if;elsif ina6=0 or downo6=0 then ina6=1; downo6=1; opendoor=1; elsif dd_cc0000100000 then en_dw=1; opendoor0000111111 then en_up=1; opendoor=0; end if;elsif gate7=0 then led_c_f=1111000; -电梯到达7楼,数码管显示7 if updown=0 then if ina7=0 or upo7=0 then ina7=1; upo7=1; opendoor0001111111 then en_up=1; opendoor=0; elsif dd_cc0001000000 then en_dw=1; opendoor=0; end if;elsif ina7=0 or downo7=0 then ina7=1; downo7=1; opendoor=1; elsif dd_cc0001000000 then en_dw=1; opendoor0001111111 then en_up=1; opendoor=0; end if;elsif gate8=0 then led_c_f=0000000; -电梯到达8楼,数码管显示8if updown=0 then if ina8=0 or upo8=0 then ina8=1; upo8=1; opendoor0011111111 then en_up=1; opendoor=0; elsif dd_cc0010000000 then en_dw=1; opendoor=0; end if;elsif ina8=0 or downo8=0 then ina8=1; downo8=1; opendoor=1; elsif dd_cc0010000000 then en_dw=1; opendoor0011111111 then en_up=1; opendoor=0; end if;elsif gate9=0 then led_c_f=0010000; -电梯到达9楼,数码管显示9if updown=0 then if ina9=0 or upo9=0 then ina9=1; upo9=1; opendoor0111111111 then en_up=1; opendoor=0; elsif dd_cc0100000000 then en_dw=1; opendoor=0; end if;elsif ina9=0 or downo9=0 then ina9=1; downo9=1; opendoor=1; elsif dd_cc0100000000 then en_dw=1; opendoor0111111111 then en_up=1; opendoor=0; end if;elsif gate10=0 then led_c_f=1000000;if updown=0 then -电梯到达10楼,数码管显示0 if ina10=0 or downo10=0 then ina10=1; downo10=1;opendoor=1; elsif dd_cc1000000000 then en_dw=1; opendoor=0; end if;else en_up=0;en_dw=0; -电梯进入上升或下降状态end if;end if;end if;else q=1;overweight_warning=0; -清除超载报警if a1=0 then ina1=a1; -对电梯内人请求信号进行检测和寄存 elsif a2=0 then ina2=a2;elsif a3=0 then ina3=a3;elsif a4=0 then ina4=a4;elsif a5=0 then ina5=a5;elsif a6=0 then ina6=a6;elsif a7=0 then ina7=a7;elsif a8=0 then ina8=a8;elsif a9=0 then ina9=a9;elsif a10=0 then ina10=a10;end if;if up1=0 then upo1=up1; elsif up2=0 then upo2=up2;elsif up3=0 then upo3=up3;elsif up4=0 then upo4=up4;elsif up5=0 then upo5=up5;elsif up6=0 then upo6=up6;elsif up7=0 then upo7=up7;elsif up8=0 then upo8=up8;elsif up9=0 then upo9=up9;end if; if down2=0 then downo2=down2; elsif down3=0 then downo3=down3;elsif down4=0 then downo4=down4;elsif down5=0 then downo5=down5;elsif down6=0 then downo6=down6;elsif down7=0 then downo7=down7;elsif down8=0 then downo8=down8;elsif down9=0 then downo9=down9;elsif down10=0 then downo10=down10;end if; dd=ina10&ina9&ina8&ina7&ina6&ina5&ina4&ina3&ina2&ina1; -电梯内人请求信号并置 cc_u=0&upo9&upo8&upo7&upo6&upo5&upo4&upo3&upo2&upo1; -电梯外人上升请求信号并置 cc_d=downo10&downo9&downo8&downo7&downo6&downo5&downo4&downo3&downo2&0; dd_cc=dd or cc_u or cc_d; end if; up_down=updown; led_i_a=dd; led_o_u=cc_u; led_o_d=cc_d; end if; end process; end oo;2.3.2 分频制器的功能:1)显示电梯的运行状态和所在的楼层。 2)显示乘客的上升和下降请求。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenping isport(clk50 : in std_logic;clk1: out std_logic);end ;architecture oo of fenping issignal c0 : std_logic;beginprocess(clk50,c0)variable num : integer range 0 to 2;beginif(rising_edge(clk50) thenif(num=2) thennum:=0;c0=not c0;elsenum:=num+1;end if;end if;clk1=c0;end process;end oo; 2.3.4系统误差分析为了防止在测量过程中测距仪的抖动而引起的测量误差,一般情况下应该测量几次而取其平均植。以上数据都是在固定测距仪的情况下所测得的。但是由于系统的分辨率为1us,系统引起的固定误差约为0.3mm,再加上本设计只转动角度,而没有考虑其它因素(如:摩擦等)的影响,所以在测量的时候给测量结果带来了一定的误差。从以上数据可见精度达到设计要求,并有实际使用价值。最后经过设计的基于PIC单片机的电梯升降系统参数如下:系统升降范围14楼。测量误差1cm。工作温度范围:常温。工作电压范围:510V。2.4顶层文件原理图及其各部件仿真2.4.1顶层文件原理图图2-3 原理图设计图2.4.2仿真波形图到达楼下信号仿真如图图2-4 楼下信号仿真图超重警告仿真如图图2-5 超重信号仿真图外人请求信号:注解:由

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论