基于fpga的六层电梯控制器-电子信息科学与技术eda技术项目设计报告内容摘要:

时钟分频模块: LIBRARY ieee。 USE。 use。 定义所用的标准库 ENTITY clkdiv IS 时钟分 频寄存器( CLKDIV) PORT( clk : in out std_logic。 系统时钟频率 clk_2hz: out std_logic。 2 分频脉冲(作为电梯控制时钟 clk_8hz: out std_logic 8 分频脉冲(作为按键处理时钟) )。 定义输入输出变量 end clkdiv。 ARCHITECTURE behave OF clkdiv IS signal t:std_logic_vector(7 downto 0)。 定义一个 8 位的 变量 begin process (clk) 时钟分频进程 begin if clk39。 event and clk=39。 139。 then 时钟脉冲上升沿有效 t = t + 1。 clk_8hz = t(1)。 变量 t 的第 1 位输出 2 分频 clk_2hz = t(4)。 变量 t 的第 3 位输出 8 分频 end if。 end process。 end behave。 源程序编写完成后,进行调试、运行并生成模块文件,确认没有错误之后进行功能仿 真、时序分析。 其模块原理图 51 如下: 图 51 时钟分频模块原理图 按键处理模块 按键处理模块的功能是把电梯外部与内部的按键信号进行处理,把处理好的按键信号送到电梯运行控制模块;根据电梯外部按键信号转化为电梯运行控制模块的外部请求信号,根据电梯内部的按键信号转化为电梯运行控制模块的电梯前往信号,根据电梯楼层信号及时清除电梯外部与内部按键信号。 其源代码编写如 下: 按键处理模块: library ieee。 use。 use。 use。 entity keypro is port ( clk: in std_logic。 按键时钟 reset: in std_logic。 异步置位按键 fup: in std_logic_vector(5 downto 1)。 上升请求按键(低电平有 fdn: in std_logic_vector(6 downto 2)。 下降请求按键(低电平有效 ) fuplight: out std_logic_vector (6 downto 1)。 电梯外部上升请求指示灯 fdnlight: out std_logic_vector (6 downto 1)。 电梯外部下降请求指示灯 st: in std_logic_vector (6 downto 1)。 电梯内部各层请求按键 stlight: out std_logic_vector (6 downto 1)。 电梯内部各层请求指示灯 position: in integer range 1 to 6。 电梯位置指示 clearup:in std_logic。 用于清除上升请求指示灯的信号 cleardn:in std_logic用于清除下降请求指示灯的信号 )。 end keypro。 architecture behave of keypro is控制按键信号灯进程 begin process(reset,clk) begin if reset = 39。 039。 then stlight = 000000。 fuplight = 000000。 fdnlight = 000000。 else if clk39。 event and clk=39。 139。 then 清除电梯当前外部上升请求信号和电梯内部前往该楼层信号 if clearup = 39。 139。 then stlight(position) = 39。 039。 fuplight(position) = 39。 039。 else fuplight =(not fup) amp。 39。 039。 stlight = not st。 end if。 清除电梯当前外部下降请求信号和电梯内部前往该楼层信号 if cleardn = 39。 139。 then stlight(position) = 39。 039。 fdnlight(position) = 39。 039。 else fdnlight = 39。 039。 amp。 (not fdn)。 stlight = not st。 end if。 end if。 end if。 end process。 end behave。 源程序编写完成后,进行编译、运行并生成模块文件,确认没有错误之后进行波形仿真、时序分析。 其模块原理图 52 如下: 图 52 按键处理模块原理图 电梯运行控制模块 电梯运行控制模块是此次设计的核心,电梯运行的模式和状的态控制效果完全取决于电梯控制模块,它的功能是在系统 2 分频时钟下,根据按键处理模块输出的信号,控制电梯上升与下降运行模式和状态,当电梯关门时输出相应的上升与下降清除信号,同时输出电梯当前所在楼层的数码管输出信号与电梯运行方向,本次是设计的 6 层电梯控制系统,在源程序中具体要体现一下功能: 1) 每层电梯(除 1 楼和 6 楼外, 1 楼只有上升请求按钮, 6 楼只有下降请求按钮)入口出设置有上升和下降请求按钮,电梯内部设有要到达楼层的请求按钮 16 楼。 2) 设有电梯所处位置数码管显示部分,电梯运行模式的 LED 显示部分。 3) 电梯能记忆电梯外部所有信号请求,并按照电梯运行规则进行顺序响应,每个电梯请求信号保留到电梯响应结束。 4) 电梯运行规则:当电梯上升时候,只响应比电梯所在楼层高的上楼信号,由下到上依次执行,直到最后一个上升请求信号执行 完毕,当电梯下降时候,只响应比电梯所在楼层低的下楼信号,由上到下依次执行,直到最后一下下降请求信号执行完毕。 电梯运行控制模块的源程序如下: 电梯运行控制模块: library ieee。 use。 use。 use。 entity elerun is port (clk:in std_logic。 电梯时钟 alarm:in std_logic。 reset:in std_logic。 异步置位按键 fuplight:in std_logic_vector (6 downto 1)。 电梯外部上升请求指示灯 fdnlight:in std_logic_vector (6 downto 1)。 电梯外部下降请求指示灯 stlight:in std_logic_vector (6 downto 1)。 电梯内部各层请求指示灯 position:out integer range 1 to 6。 电梯位置指示 doorlight:out std_logic。 电梯门开关指示灯 clearup:out std_logic。 用于清除上升请求指示灯的信号 cleardn:out std_logic。 用于清除下降请求指示灯的信号 yanshi:in std_logic。 tiqian:in std_logic。 udsig:buffer std_logic_vector(7 downto 0) 电梯升降指示 )。 end elerun。 architecture sixflift of elerun is type lift_state is (stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3, doorwait4,doorwait5,doorwait6,up,down,stop)。 signal mylift: lift_state。 signal pos: integer range 6 downto 1。 signal udflag :std_logic。 signal posreg :integer range 1 to 6。 signal one: std_logic_vector (6 downto 1)。 begin process(reset,clk) 控制电梯状态的进程 begin if (reset = 39。 139。 or alarm = 39。 139。 ) then mylift = stopon1。 clearup = 39。 139。 cleardn = 39。 139。 else if (clk 39。 event and clk = 39。 139。 ) then case mylift is when stopon1 = door。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。