免费预览已结束,剩余30页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA的交通灯控制系统摘 要:针对现实中越来越严重的城市交通拥堵现象,提出了一种城市十字路口交通信号灯控制与FPGA实现的新方法。利用超高速硬件描述语言VHDL设计十字路口交通信号灯控制器,实现主干道和支干道的交通控制功能,实时监测每个路口的车辆通行情况,以此更改主干道与支干道的交通灯状态,提高十字路口的车辆通行效率,最后通过硬件测试实现具体功能。关键词:VHDL FPGA 交通灯控制1、 概述1.1 设计要求:(1)设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。(2)红、绿、黄发光二极管作信号灯。(3)主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。(4)主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。(5)在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。1.2 课题分析(1)主支道路分4种行车状况,无无、无有、有无、有有,此信号从传感器输出信号得到,作为系统的输入,在本系统中用拨片开关模拟状态输入。(2)主支道路有4种亮灯情况:主绿支红、主黄支红、支绿主红、支黄主红。(3)只要支路无车通行,则一直为主绿支红状态,只有支路有车通过才会进入支绿主红状态。(4)系统可以根据行车情况智能进入相应亮灯情况,提高了十字路口的通车效率。(5)用6个发光二极管作为主道路绿黄红三灯显示输出和支道路绿黄红三灯显示输出;用4个数码管分别作为主支道路倒计时显示输出。2、 系统方案设计2.1 整体模块设计2.1.1整体设计思路整体设计思路为:交通灯控制系统主要包括两个模块,即交通灯控制模块和倒计时显示模块。首先利用教学实验箱提供的1HZ时钟信号,实现计数功能,1s计数一次,同时设定主干道、支干道的交通灯的具体亮灯时间,并将计数结果传给倒计时模块,以实现倒计时模块显示的时间与交通灯的状态相对应。在交通灯控制过程中,用状态机来实现,设定主干道、支干道的行车检测信号,用以进行状态变换。每进入一个状态就开始计数,该状态结束则清零,在下个状态开始时重新计数,实现每个状态亮灯时间不同的需求。2.1.2 整体设计框架根据系统要求可知:输入信号为系统时钟,主支道路行车情况模拟输入。输出信号为主支道路红绿黄显示信号、倒计时显示。2.2 交通灯状态转换模块设计由原理分析可知系统需要在4种亮灯状态之间切换,所以需要设计一个状态转换控制模块,而倒计时显示则来自内部的计数,所以状态转换模块内部包含了计数模块,又因为二极管模拟红绿灯显示是和亮灯状态紧密相关的,所以相应的二极管控制整合在状态转换控制模块内部。故在状态转换模块内部包含3个子模块,分别为计数模块、状态转换控制模块、二极管实现模块。最后因为数码管动态显示模块需要根据亮灯状态决定输出,所以本模块还需增加计数输出以及状态输出信号。该模块计数采用1hz的时钟脉冲,以期实现交通灯的秒数设置。状态循环控制:S0:主干道绿灯支干道红灯45sS1:主干道黄灯支干道红灯5sS2:主干道红灯支干道绿灯25sS3:主干道红灯支干道黄灯5s2.3 数码管倒计时显示模块设计由于此模块采用了数码管的动态显示原理,所以代码量较多,单独分为一个模块,又因为动态显示倒计时间是与亮灯状态紧密相关的,所以必须从交通灯状态控制模块获取相关的状态输入,引出状态输出信号,以供本模块使用。又因为动态显示需要较高的时钟频率,所以本模块的时钟信号采用系统输入信号,而非之前计数的1hz时钟。4位数码管的前两位显示支干道的亮灯时间,后两位显示主干道的亮灯时间。3、 硬件设计3.1总体设计框图由clk1hz输入,用来计数,道路行车检测由pass_state1,pass_state0控制,pass_state1为主干道行车检测,pass_state0为支干道行车检测。1为有车通行,0为无车通行,输出为数码管的位选信号和段选信号,以及6个二极管控制信号。3.2交通灯状态转换模块输入计数时钟和行车控制,输出主干道以及支干道红绿黄三灯的控制信号,最重要的是将此时的计数时间输出给倒计时模块,并将4个状态的状态输出信号给倒计时模块,实现在对应的状态下显示对应的时间。3.3数码管倒计时显示模块为了实现数码管动态扫描,此模块的时钟使用较高频率,输入上级电路的计数输出和状态输出,给出位选以及段选信号的控制。4、 硬件测试4.1 引脚分配Pin_31hz时钟输入,用于状态控制模块Pin_3324khz时钟输入,用于数码管动态扫描Pin_4K1 支干道行车模拟输入Pin_5K2 主干道行车模拟输入Pin_6,Pin_8,Pin_10数码管位选信号Pin_11,Pin_12,Pin_13,Pin_14,Pin_15,Pin_30,Pin_31数码管段选信号Pin_34R1主干道红灯Pin_35Y1 主干道黄灯Pin_36G1 主干道绿灯Pin_37R2 支干道红灯Pin_39Y2 支干道黄灯Pin_40G2 支干道绿灯4.2 仿真结果交通灯显示:倒计时显示:S1状态(支红主黄):S0状态(支红主绿)5、 总结基本实现了设计所需的功能,能根据道路行车情况实现交通灯的智能控制,并将红绿灯通行的时间通过数码管直观显示出来,较好的完成了十字路口交通情况的模拟。6、 附录6.1 顶层模块源程序LIBRARY IEEE; -自动交通灯控制系统顶层描述USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TRAFFIC_LIGHT_CONTROL ISPORT ( CLK1hz,CLK1khz : IN STD_LOGIC; -信号时钟输入PASS_STATE : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -主支通道的通车情况,低位为支通道高位为主通道,0为无车1为有车ALIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -主干道红绿黄灯控制信号BLIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -支干道红绿黄灯控制信号SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -输出数码管位选信号LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) -输出数码管段选信号);END ENTITY TRAFFIC_LIGHT_CONTROL;ARCHITECTURE behav OF TRAFFIC_LIGHT_CONTROL ISCOMPONENT STATE_CONTROLPORT ( CLK1 : IN STD_LOGIC; -1Hz时钟信号输入PASS_STATE_IN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -主支通道的通车情况,低位为支通道高位为主通道,0为无车1为有车A_LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -主干道红绿黄灯控制信号B_LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -支干道红绿黄灯控制信号CNTOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); -已计数时间输出STATEOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) -状态输出,传递给数码显示模块);END COMPONENT;COMPONENT DISPLAYPORT ( CLK2 : IN STD_LOGIC; -1KHz时钟信号输入CNTIN : IN STD_LOGIC_VECTOR(5 DOWNTO 0); -亮灯已过时间输入STATEIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -状态输入LED7SOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -数码管段选信号输出SELOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) -数码管位选信号输出);END COMPONENT;SIGNAL MSTATE : STD_LOGIC_VECTOR(1 DOWNTO 0); -中间信号传递通车状态SIGNAL MCNT : STD_LOGIC_VECTOR(5 DOWNTO 0); -中间信号传递亮灯已计数时间BEGIN -例化语句U1: STATE_CONTROL PORT MAP (CLK1=CLK1hz,PASS_STATE_IN=PASS_STATE,B_LIGHT=BLIGHT, A_LIGHT=ALIGHT, CNTOUT=MCNT, STATEOUT=MSTATE);U2: DISPLAY PORT MAP(CLK2=CLK1khz,CNTIN=MCNT,STATEIN=MSTATE,LED7SOUT=LED7S,SELOUT=SEL);END ARCHITECTURE behav;6.2 交通灯状态转换模块源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY STATE_CONTROL ISGENERIC ( GREENA_CNT:INTEGER:=45; -主通道绿灯亮的时间45s YELLOWA_CNT:INTEGER:=5; -主通道黄灯亮的时间5s GREENB_CNT:INTEGER:=25; -支通道绿灯亮的时间25s YELLOWB_CNT:INTEGER:=5);-支通道黄灯亮的时间5sPORT ( CLK1 : IN STD_LOGIC; -1Hz时钟信号输入PASS_STATE_IN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -主支通道的通车情况,低位为支通道高位为主通道,0为无车1为有车A_LIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -主干道红绿黄灯控制信号B_LIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -支干道红绿黄灯控制信号CNTOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); -已计数时间输出STATEOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) -剩余时间输出显示);END ENTITY STATE_CONTROL;ARCHITECTURE behav OF STATE_CONTROL ISTYPE STATES IS (ST0,ST1,ST2,ST3); -4个状态分别为【主绿支红45s、主黄支红5s、支绿主红25s、支黄主红5s、】SIGNAL STATE : STATES:=ST0; -初始化状态为状态0SIGNAL CNT_EN : STD_LOGIC:=0; -计数使能控制信号,初始不计数SIGNAL CNT : STD_LOGIC_VECTOR(5 DOWNTO 0):=000001; -因为初始不计数,但已过一个周期,所以初值为1BEGINPROCESS(CLK1)BEGINIF CLK1EVENT AND CLK1 = 0 THENIF (CNT_EN=1) THEN -计数模块CNT=CNT+1;ELSECNTIF (CNT=GREENA_CNT) THEN -主绿支红若计数满45s则根据主支通道的通车情况决定转入下一个状态CASE PASS_STATE_IN ISWHEN 00 = STATE STATE STATE STATE NULL;END CASE;ELSESTATE -主黄支红若计数满5s则根据主支通道的通车情况决定转入下一个状态IF (CNT=YELLOWA_CNT) THENCASE PASS_STATE_IN ISWHEN 00 = STATE STATE STATE STATE NULL;END CASE;ELSESTATE -支绿主红若计数满25s则根据主支通道的通车情况决定转入下一个状态IF (CNT=GREENB_CNT) THENCASE PASS_STATE_IN ISWHEN 00 = STATE STATE STATE STATE NULL;END CASE;ELSESTATE -支黄主红若计数满5s则根据主支通道的通车情况决定转入下一个状态IF (CNT=YELLOWA_CNT) THENCASE PASS_STATE_IN ISWHEN 00 = STATE STATE STATE STATE NULL;END CASE;ELSESTATE=ST3; -若计数未满则为原来状态END IF;END CASE;END IF;CNTOUT -状态0时主绿支红A_LIGHT=010;B_LIGHT=100;CNT_EN=1;STATEOUT=00; -将当前状态传递给数码管显示模块,以供后续使用IF (CNT=GREENA_CNT) THEN CNT_EN -状态1时主黄支红A_LIGHT=001;B_LIGHT=100;CNT_EN=1;STATEOUT=01; -将当前状态传递给数码管显示模块,以供后续使用IF (CNT=YELLOWA_CNT) THEN CNT_EN -状态2时支绿主红A_LIGHT=100;B_LIGHT=010;CNT_EN=1;STATEOUT=10; -将当前状态传递给数码管显示模块,以供后续使用IF (CNT=GREENB_CNT) THEN CNT_EN -状态3时支黄主红 A_LIGHT=100;B_LIGHT=001;CNT_EN=1;STATEOUT=11; -将当前状态传递给数码管显示模块,以供后续使用IF (CNT=YELLOWB_CNT) THEN CNT_EN BITSEL:=001; SELOUT BITSEL:=010; SELOUT BITSEL:=011; SELOUT BITSEL:=000; SELOUT NULL;END CASE;END IF;-动态显示模块-CASE STATEIN ISWHEN 00 = -主绿支红状态 OKCASE BITSEL ISWHEN 000 = -主绿支红状态 点亮支干道十位数字 OKCASE CNTIN ISWHEN 000001 = LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT NULL;END CASE;WHEN 001 = -主绿支红状态 点亮支干道个位数字 OKCASE CNTIN ISWHEN 000001 = LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT NULL;END CASE;WHEN 010 = -主绿支红状态 点亮主干道十位数字 OKCASE CNTIN ISWHEN 000000 = LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT NULL;END CASE;WHEN 011 = -主绿支红状态 点亮主干道个位数字 OKCASE CNTIN ISWHEN 000000 = LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT NULL;END CASE;WHEN OTHERS = NULL;END CASE;-WHEN 01 = -主黄支红状态 OKCASE BITSEL ISWHEN 000 = -主黄支红状态 点亮支干道十位数字CASE CNTIN ISWHEN 000001 = LED7SOUT LED7SOUT LED7SOUT LED7SOUT LED7SOUT NULL;END CASE;WHEN 001 = -主
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备租赁劳务合同范本
- 施耐德外包合同范本
- 义工工作合约协议书
- 欧洲铁路工程合同范本
- 旅行社与景区协议书
- 2025年食品质量安全风险监测试题及答案
- 二手车置换合同范本
- 2026-2031年中国农村社会养老保险行业市场分析与发展前景研究报告
- 消防安全班会题库及答案
- 铺面整幢出售合同范本
- 室内装修工程监理实施细则
- 个体工商户设立章程模板及编写指南
- 化工自动化仪表培训课件
- DB15T 1969-2020 绵羊人工授精及同期发情技术操作规程
- 产房医院感染管理培训
- 晕倒紧急救护方法
- 辽宁移动笔试题目及答案
- 注塑厂生产安全培训课件
- 广东深圳光明区光明街道办事处一般类岗位专干招聘笔试真题2024
- 秋冬季安全行车培训
- 配电运检培训课件
评论
0/150
提交评论