基于EDA技术基础的交通灯设计论文

上传人:沈*** 文档编号:146483868 上传时间:2022-08-31 格式:DOC 页数:19 大小:323KB
返回 下载 相关 举报
基于EDA技术基础的交通灯设计论文_第1页
第1页 / 共19页
基于EDA技术基础的交通灯设计论文_第2页
第2页 / 共19页
基于EDA技术基础的交通灯设计论文_第3页
第3页 / 共19页
点击查看更多>>
资源描述
基于EDA技术的交通灯设计 班 级: 姓 名: 学 号: 指导教师: 1、绪论1.1课程设计背景 随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全球化的问题。城市交通基础设施供给滞后于高速机动化增长需求,道路堵塞日趋加重,交通事故频繁,环境污染加剧等问题普遍存在。目前,全国大中城市普遍存在着道路拥挤、车辆堵塞、交通秩序混乱的现象,交通事故频发,这给人民的生命财产安全带来了极大的损失。如何解决城市交通问题已成为全社会关注的焦点和大众的迫切呼声。探究城市交通发展中存在问题的原因,无论是从宏观上还是从微观上分析,其根本原因在于城市交通系统的管理机制不适应。城市交通控制系统(UTC ,Urban Traffic Control System)是现代城市智能交通系统(IDJ ,Intelligent transport system)的组成之一,主要用于城市道路交通的控制与管理。城市平交路口实现交通信号控制是城市交通管理现代化的基本标志之一,是提高交通管理效能的重要技术手段。路口信号控制器是控制交叉路口交通信号的设备,它是交通信号控制的重要组成部分。各种交通控制方案,最终都要由路口信号控制器来实现。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,EDA技术的发展和应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域的重要性日益突出。利用EDA技术设计交通灯来完成这个需求就显的更加迫切,同样也是非常的实用和合理。1.2 课程设计目a.掌握十字路口交通灯控制的设计原理,并能够运用VHDL编程语言编写出实验程序,进一步对所学的EDA知识进行掌握与实际应用。b.学会在MAX+plus 软件环境中仿真,熟悉软件的基本操作和运行环境。c.锻炼自己获取信息的能力,以及能够独立自主的思考和解决问题的能力。2、系统分析与总体方案2.1系统分析 通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿、左转),四个灯能够按顺序依次亮灭。而且要求绿灯亮转红灯亮或者转左转灯亮之前要先转黄灯亮5秒,左转灯亮转红灯亮之前也要先转黄灯亮5秒,红灯亮可以直接转绿灯或左转灯亮(四种灯的循环顺序如图2.1所示)。还要求四种灯的点亮时间能够以倒计时的形式显示出来。可以用VHDL语言合理设计系统功能,使红黄绿左转灯的转换有一个准确的时间间隔和转换顺序。绿灯黄灯左转灯黄灯红灯图2.1 四种灯的循环顺序2.2 方案比较实现路口交通灯的方法很多,可以用标准逻辑器件、可变程序控制器和单片机等方案来实现。若用单片机来实现的话,模型可以由电源电路、单片机主控电路、无限收发控制电路和显示电路四部分组成。在电源电路中,需要用到+5V的直流稳压电源,无限收发控制电路和显示电路应由编码芯片和数据发射模块两部分组成,主控电路的主要元件为AT89C51。硬件设计完成后还要利用计算机软件经行软件部分的设计才能够实现相应的功能。虽然利用单片机系统设计的交通灯控制器相对来说比较稳定,能够完成较多功能的实现,但这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改和系统设计与调试的困难。相反,使用基于FPGA的方法具有周期短、使用灵活、易于修改等明显的优点。而且,随着FPGA器件,设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用FPGA来设计。未来使用FPGA器件设计的产品将出现在各个领域。因此此次的交通灯控制器将基于FPGA的设计方案来实现所需要的功能。 2.3 设计的总体方案 根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图3.1所示:CLK时钟分频模块交通灯控制及计时模块扫描显示模块LED显示数码管位码数码管段码图2.2 系统的框图3、硬件电路设计3.1分频器设计 分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电路。具体实物模块如图: 图3.1 分频器模块3.2 状态控制电路设计状态控制器的作用是根据计数器的计数值控制各方向上发光二极管的亮、灭,当计时时间到达,状态控制器就响应,自动跳转到下一个状态。此外,当检测到特殊情况(EMI =1)发生时,无条件点亮红灯的二极管(急救灯按下EMI=1,则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。急救灯未按下或者按下后恢复,则继续计时(计时通过计数器ct),同时恢复东西南北原来灯的状态)。具体实物模块如图:图3.2控制电路模块3.3计数器设计这里需要的计数器的计数范围为0-80。计到80后,下一个时钟沿回复到0,开始下一轮计数。此外,当检测到特殊情况(EMI =1)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。图3.3计数器模块3.4译码显示电路设计根据状态控制器所控制的状态和计数器的计时时间,选择当前状态下的显示器,使显示器输出当前状态下的数码管亮、灭指令,其中数码管的显示采用动态扫描显示。具体实物模块如图:图3.4译码显示电路模块4、实验程序设计一个完整的VHDL语言程序通常包括实体(Entity)、构造体(Architecture)、配置、包集合(Package)和库(Library)5个部分组成。下面结合实际的程序来加以说明。4.1实体定义:library IEEE;use IEEE.std_logic_1164.all;entity traffic_light is port(clk : in std_logic; - 时钟频率为250KHz. start : in std_logic; - 交通灯控制:1 开, 0 关. EMI : in std_logic; - 急救灯控制,1 所有红灯亮. ew_rled : out std_logic; -东西红灯控制,0 开, 1 关. ew_gled : out std_logic; - 东西绿灯控制,0 开, 1 关. ew_yled : out std_logic; - 东西黄灯控制,0 开, 1 关. ew_turnled: out std_logic; - 东西左转灯控制,0 开, 1 关 sn_rled : out std_logic; - 南北红灯控制,0 开, 1 关 sn_gled : out std_logic; - 南北绿灯控制,0开, 1关 sn_yled : out std_logic; - 南北黄灯控制,0 开, 1 关 sn_turnled: out std_logic; - 南北左转灯控制,0 开, 1 关 L : out std_logic_vector(2 downto 0); -显示器选取 dled : out std_logic_vector(7 downto 0); -显示器数据输出end traffic_light;4.2译码显示: architecture control of traffic_light is TYPE eastwest IS (ew_red,ew_green,ew_yellow0,ew_yellow1,ew_turnl); TYPE southnorth IS (sn_red,sn_green,sn_yellow0,sn_yellow1,sn_turnl); signal ew_state: eastwest; signal sn_state: southnorth; begin process(clk) function display(s:integer range 0 to 9) return std_logic_vector is variable result:std_logic_vector(7 downto 0); begin cases is when 0 = result:=XFC;-0 when 1 = result:=X60;-1 when 2 = result:=XDA;-2 when 3 = result:=XF2;-3 when 4 = result:=X66;-4 when 5 = result:=XB6;-5 when 6 = result:=XBE;-6 when 7 = result:=XE0;-7 when 8 = result:=XFE;-8 when 9 = result:=XF6;-9 when others = null; end case; return result;end display; 4.3状态转换: variable cnt:integer range 0 to 7; variable ct:integer range 0 to 5; variable ew_secondH,sn_secondH: integer range 0 to 8; variable ew_secondL,sn_secondL: integer range 0 to 9; begin if start=0 then 初始化 dled=X00; ew_state=ew_red; sn_state=sn_green; ew_secondH:=8; ew_secondL:=0; sn_secondH:=5; sn_secondL:=0; ew_rled=0; ew_gled=1; ew_yled=1;ew_turnled=1; sn_rled=1; sn_gled=0; sn_yled=1;sn_turnled=1; elsif clkevent and clk=1 then - clk rising edge detection cnt:=cnt+1; if EMI=1 then ew_rled=0; ew_gled=1; ew_yled=1;ew_turnled=1; sn_rled=0; sn_gled=1; sn_yled=1;sn_turnled ew_rled=0; ew_gled=1; ew_yled=1;ew_turnled ew_rled=1; ew_gled=0; ew_yled=1; ew_turnled ew_rled=1; ew_gled=1; ew_yled=0;ew_turnled ew_rled=1; ew_gled=1; ew_yled=0;ew_turnled ew_turnled=0;ew_rled=1; ew_gled=1; ew_yled ew_rled=0; ew_gled=1; ew_yled=1; ew_turnled sn_rled=0; sn_gled=1; sn_yled=1; sn_turnled sn_rled=1; sn_gled=0; sn_yled=1;sn_turnled sn_rled=1; sn_gled=1; sn_yled=0;sn_turnled sn_rled=1; sn_gled=1; sn_yled=0;sn_turnled sn_turnled=0;sn_rled=1; sn_gled=1; sn_yled sn_rled=0; sn_gled=1; sn_yled=1;sn_turnled ew_state ew_state ew_stateew_stateew_state ew_state sn_state sn_state sn_statesn_statesn_state sn_state L=000; dled L=001; dled L=010; dled L=011; dled L=100; dled L=101; dled L=110; dled L=111; dled result:=XFC;-0 when 1 = result:=X60;-1 when 2 = result:=XDA;-2 when 3 = result:=XF2;-3 when 4 = result:=X66;-4 when 5 = result:=XB6;-5 when 6 = result:=XBE;-6 when 7 = result:=XE0;-7 when 8 = result:=XFE;-8 when 9 = result:=XF6;-9 when others = null; end case; return result;end display; variable cnt:integer range 0 to 7; variable ct:integer range 0 to 5; variable ew_secondH,sn_secondH: integer range 0 to 8; variable ew_secondL,sn_secondL: integer range 0 to 9; begin if start=0 then 初始化 dled=X00; ew_state=ew_red; sn_state=sn_green; ew_secondH:=8; ew_secondL:=0; sn_secondH:=5; sn_secondL:=0; ew_rled=0; ew_gled=1; ew_yled=1;ew_turnled=1; sn_rled=1; sn_gled=0; sn_yled=1;sn_turnled=1; elsif clkevent and clk=1 then - clk rising edge detection cnt:=cnt+1; if EMI=1 then ew_rled=0; ew_gled=1; ew_yled=1;ew_turnled=1; sn_rled=0; sn_gled=1; sn_yled=1;sn_turnled ew_rled=0; ew_gled=1; ew_yled=1;ew_turnled ew_rled=1; ew_gled=0; ew_yled=1; ew_turnled ew_rled=1; ew_gled=1; ew_yled=0;ew_turnled ew_rled=1; ew_gled=1; ew_yled=0;ew_turnled ew_turnled=0;ew_rled=1; ew_gled=1; ew_yled ew_rled=0; ew_gled=1; ew_yled=1; ew_turnled sn_rled=0; sn_gled=1; sn_yled=1; sn_turnled sn_rled=1; sn_gled=0; sn_yled=1;sn_turnled sn_rled=1; sn_gled=1; sn_yled=0;sn_turnled sn_rled=1; sn_gled=1; sn_yled=0;sn_turnled sn_turnled=0;sn_rled=1; sn_gled=1; sn_yled sn_rled=0; sn_gled=1; sn_yled=1;sn_turnled ew_state ew_state ew_stateew_stateew_state ew_state sn_state sn_state sn_statesn_statesn_state sn_state L=000; dled L=001; dled L=010; dled L=011; dled L=100; dled L=101; dled L=110; dled L=111; dled=display(sn_secondL); end case; end if; end process;end control;
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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