您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 基于FPGA的交通灯控制器设计(VHDl代码全-各个模块均调试通过)
******本科毕业论文--2.3FPGA主控实现方案设计结合已有的PLC实现和单片机应用实现的经验,并吸收两种设计的优势之处,再根据交通灯控制系统的设计要求和FPGA模块化功能实现,确定了以下方案,因每个方向相对的信号灯状态及倒计时显示器的显示完全一致,根据设计要求和系统所具有的功能,交通灯控制器系统框图如图2-6所示。图2-6交通灯控制器系统框图确定的方案中,系统具有复位功能,能使系统重新开始计时;在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的,但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制。为此主体包括系统复位,手动/自动,红绿灯切换,主控模块,显示器,报警器。具体主控部分用FPGA来实现。图2-7交通灯通行示意图结合实现方案,主要有东西、南北、南北左拐,东西左拐,跟手动控制5种工作方式,具体由M2~M0设定,具体如表2-1。表2-1交通灯工作方式表ABFPGA系统复位手动/自动红绿灯切换主控模块显示器报警器******本科毕业论文--方式M2(0:自动,1:手动)M1(0:A向,1:B向)M0(O:直行,1:左拐)100020013010401151**当出现特殊情况时,可选择方式1到方式4中的任何一种方式,停止正常运行,进入特殊运行状态。此时交通灯按工作方式显示,计时电路停止计时,计时时间闪烁显示。当系统总复位时,控制电路和计时电路复位,信号灯全部熄灭。3各功能模块的设计与实现3.1总体设计思路3.1.1系统组成框图结合设计任务要求和确定的实现方案,假设某个十字路口是由一条主干道和一条次干道回合而成,在每个方向设置红绿黄3种信号灯,红灯亮禁止通行,绿灯亮允许通行。黄灯亮允许行驶中车辆有时间停考到禁止线以外。按照自顶向下的层次化设计方法,整个系统可分为4个模块,系统时序发生电路、红绿灯计数时间选择模块、定时控制电路、红绿灯信号译码电路。其系统组成方框图如图3-1所示。******本科毕业论文--图3-1交通灯控制器系统组成框图在自动控制模块时,绿灯亮为55秒,黄灯亮为5秒,红灯亮为60秒。其外部硬件电路方面包括:两组红绿灯(配合十字路口的双向指挥控制)、两级七段显示器(配合绿灯倒计时显示)、一组手动与自动控制开关(针对交通警察指挥交通控制使用)。3.1.2交通灯的状态转换图图3-2主干道状态转换FPGA时序发生模块(1kHz输入时钟)红绿灯计数时间选择模块红绿灯信号译码模块定时控制电路系统复位手动/自动红绿灯切换红东黄西绿向红南黄北绿向倒计时显示S0绿灯S1黄灯S2红灯S3红灯S0红灯S3黄灯S2绿灯S1红灯******本科毕业论文--图3-3支干道状态转换由上面的两个干道的状态转换图可知,两个方向的先设计成并列的,即都是按照倒计时信号进行状态跳转,然后再加入两者之间的限制关系和SIGNAL信号。交通灯的控制过程可以分为四个阶段,对应的输出有四种状态,分别为S0,S1,S2,S3,四个阶段的灯亮状态如表3-2。表3-2四个阶段的灯亮状态表状态灯亮情况格雷码S0状态主干道绿灯亮,支干道红灯亮00S1状态主干道黄灯亮,支干道红灯亮01S2状态主干道红灯亮,支干道绿灯亮11S3状态主干道红灯亮,支干道黄灯亮10对于上述的S0和S2状态要加以说明:首先,当主干道方向55秒计时结束时,若支干道方向无车时,这时控制器应继续运行在S0状态,再运行55秒,等到下一次计时结束时再行判断;当主干道55秒计时结束,若支干道方向有车,则按照状态转换图进行跳转。同理,支干道也执行相同的处理。其次,当支干道开始绿灯亮时,规定必须保持支干道方向一直有车时,支干道方向的绿灯才能继续维持,否则在计数未结束但支干道无车时,执行从S2状态跳转到S3状态;若支干道有车一直维持到55秒计数结束,那么也要执行状态转换。3.2功能模块设置及实现结合前面的系统设计框图和状态设置,把主控部分分为主控制模块,55秒倒计时模块,5秒倒计时模块,倒计时时间选择驱动模块,倒计时时间选择模块,1KHz时钟信号模块,1Hz计数时钟信号模块,倒计时时间数据多路选择模块,动态显示驱动模块,显示数据多路选择模块,显示数据译码模块。系统采用的是系统级层次设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片FPGA芯片实现,首先用VHDL语言编写各个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图将各个功能模******本科毕业论文--块连接起来。下面分别来介绍各个功能模块的实现和调试过程。3.2.1主控制模块该模块主要完成根据外部输入信号Reset、SW控制输出,用于控制交通灯的信号Red1,Red2,Yellow1,Yellow2,Green1,Green2。这中间包含了必要的内部模块之间的信号EN_in(来自倒计时时间选择驱动模块)。其源代码见附录1,其仿真结果与编译后的结果如图3-4,3-5所示。EN_in[1..0]SW1RSTRed1Red2Yellow1Yellow2Green1Green2controlinst图3-4主控模块图3-5仿真结果从图3-5可以简单地检查主控模块设计的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.255秒倒计时模块该模块主要完成55秒的倒计时,控制红灯的点亮时间。实际中在1分钟内还要有绿到黄灯的转换以提醒车辆与行人,所以选择了55秒作为绿灯的点亮时间。其源代码见附录1,其仿真结果与编译后的结果如图3-6,3-7所示。******本科毕业论文--图3-655秒倒计时模块图3-7仿真结果从图3-7可以简单地检查55秒倒计时模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.35秒倒计时模块该模块主要完成5秒的倒计时,控制黄灯的点亮时间。实际中在1分钟内还要有红到黄灯的转换以提醒车辆与行人,所以选择了55秒作为红灯的点亮时间后,黄灯的点亮时间必定为5秒。其源代码见附录1,其仿真结果与编译后的结果如图3-8,3-9所示。图3-85秒倒计时模块******本科毕业论文--图3-9仿真结果从图3-9可以简单地检查5秒倒计时模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.4倒计时时间选择驱动模块该模块只要完成倒计时时间长短选择的功能,输入信号来自两个倒计时模块,当倒计数完成是产生一个脉冲用于驱动此模块产生00,01,10,11序列来驱动倒计时时间选择模块。其源代码见附录1,其编译后的结果如图3-10所示。EN_in1EN_in0sdata[1..0]scaninst图3-10倒计时时间选择驱动模块3.2.5倒计时时间选择模块该模块主要完成55秒倒计时与5秒倒计时之间的选择功能,在实际中因为存在着红灯到黄灯再转换为绿灯的这样一个变化过程,而红黄绿灯的点亮时间不相同,一般是绿黄两灯的点亮时间刚好等于红灯,其中,绿灯亮55秒,黄灯亮5秒,红灯亮60秒。其源代码见附录1,其仿真结果与编译后的结果如图3-11,3-12所示。******本科毕业论文--图3-11倒计时时间选择模块图3-12仿真结果从图3-12可以简单地检查倒计时时间选择模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.61KHz时钟信号模块该模块主要完成从开发实验板上10MHz的全局时钟信号经过分频得到1KHz的时钟信号,即完成一个10000分频的分频器。分频器的设计是时序设计的比较基础的知识,在实际系统中用得很多,设计过程与计数器的设计很类似。其源代码见附录1,其编译后的结果如图3-13所示。clk_inclk_outfdiv1khzinst图3-131KHz时钟信号模块3.2.71Hz计数时钟信号模块该模块主要完成从模块1KHz中的1KHz时钟信号经过分频得到1Hz的计数时钟信号,即完成一个1000分频的分频器。设计过程与模块6的设计过程基本相同。其源代码见附录1,其编译后的结果如图3-14所示。clk_inclk_outfdiv1hzinst图3-141Hz计数时钟信号模块******本科毕业论文--3.2.8倒计时时间数据多路选择模块该模块主要完成两组不同倒计时时间数据的选择输出到后续显示模块中。其源代码见附录1,其仿真结果与编译后的结果如图3-15,3-16所示。D_IN3[3..0]D_IN2[3..0]D_IN1[3..0]D_IN0[3..0]SEL[1..0]D_OUT1[3..0]D_OUT0[3..0]datamuxinst图3-15倒计时时间数据多路选择模块图3-16仿真结果从图3-16可以简单地检查倒计时时间数据多路选择模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.9动态显示驱动模块该模块主要完成倒计时数码管的动态显示。动态显示即分时显示,但是时间间隔的选择既要保证人眼看起来是同时显示,即不会出现两位数字的断续显示,又要保证不会覆盖显示数字,即不会出现上个数字与下个数字之间的显示过快使得人眼来不及分辨。其源代码见附录1,其仿真结果与编译后的结果如图3-17,3-18所示。CLKD_OUT[1..0]dispselectinst图3-17动态显示驱动模块******本科毕业论文--图3-18仿真模块从图3-18可以简单地检查动态显示驱动模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.10显示数据多路选择模块该模块主要完成数码管显示数据的分时选择,以实现分时动态显示。其源代码见附录1,其仿真结果与编译后的结果如图3-19,3-20所示。SEL[1..0]D_IN1[3..0]D_IN0[3..0]D_OUT[3..0]dispmuxinst图3-19显示数据多路选择模块图3-20仿真结果从图3-20可以简单地检查显示数据多路选择模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.11显示数据译码模块该模块主要完成4位BCD码到8位数码管显示数据的译码。译码后的8位数据分别对应数码管的数据段A、B、C、D、E、F、G、DP。其源代码见附录1,其仿真结果于编译后的结果如图3-21,3-22所示。******本科毕业论文--data_in[3..0]data_out[7..0]dispdecoderinst图3-21显示数据译码模块图3-22仿真结果从图3-22可以简单地检查显示数据译码模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。******本科毕业论文--4总体调试与结果说明4.1顶层电路在设计完各个模块后,需要将各个模块有机地组合成一个整体,最后来实现系统的功能在数字频率计的设计中,同时采用了电路原理图的设计以及VerilogHDL语言来编写的顶层电路。电路原理图见图4-1,具体源代码见附录1,仿真图如图4-2所示。图4-1总系统电路图******本科毕业论文--图4-2仿真结果说明:当ga为高电平时表示a方向绿灯亮,同时rb为高电平表示b方向红灯亮;经过55秒,ga变为低电平表示,rb不变,ya变为高电平表示a方向绿灯灭黄灯亮,b方向仍为红灯;经过5秒,gb变为高电平表示b方向绿灯亮,ra为高电平表示a方向红灯亮;再经过5秒,gb变为低电平,ra不变,yb变为高电平表示b方向绿灯灭黄灯亮a方向仍为红灯。4.2过程调试******本科毕业论文--4.3硬件仿真效果图4-31方向绿灯亮图4-3表示1方向绿灯亮,2方向红灯亮的过程。图4-42方向绿灯亮图4-4表示2方向绿灯亮,1方向红灯亮。从DE2调试结果来看,整个设计结果基本符合设计要求。******本科毕业论文--5总结和展望通过本次课题的研究,利用FPGA技术实现交通灯控制系统主控模块功能,是对传统交通灯控制
本文标题:基于FPGA的交通灯控制器设计(VHDl代码全-各个模块均调试通过)
链接地址:https://www.777doc.com/doc-1730410 .html