基于FPGA的交通灯课程设计报告

发布时间 : 星期一 文章基于FPGA的交通灯课程设计报告更新完毕开始阅读

电子技术课程设计报告

(3) 增加LED同步显示当前运行状态功能,即用LED显示信号灯状态; 功能增加了,可以说任务量也增加了不少。就最为关键的时间设置和显示方面,由于增加了两个左转方向的运行时间,虽然只是增加了两个状态,但是同时显示四个方向的等待和通行的倒计时,确实在开始设计时,我有些茫然,觉得无从下手。我花了很长时间在网上查阅实际中的交通灯到底是如何计时和运行的,也到学校周围的路口实地调查过几种十字路口交通灯的设置,慢慢的从实际设置需求中理清头绪,具体的设计思路将在后面的部分详细说明。

二、系统设计 2.1系统设计思路

前面讲到,基于状态机的方法可以轻松实现交通灯的控制,而状态转换利用Verilog中的case和循环语句很容易实现。我将四种状态的转换顺序设置为:主直→主左→次直→次左→主直→……(依次循环),每个状态在设置时间的基础上由倒计时进行状态的变换。以上都是比较容易实现的,也是很多经典的例子上有讲解过的,下面我着重说明下如何实现四个方向同时进行等待和通行的倒计时。

用四组数码管来显示主、次干道直行和左转倒计时,首先需要了解这四组数码管显示的规律,也就是显示计数的规律。在网上查阅资料的时候,通过观看一段视频,我茅塞顿开。这个视频展示的是基于51单片机实现的交通灯控制器的实物功能演示,它也是利用了四组数码管分别显示四个方向的倒计时。通过反复观看我发现,其实在四个方向中,一个是通行倒计时,另外三个是等待倒计时,而等待倒计时又是它之前状态通行时间之和,在显示的效果上就是总会有两组倒计时数值是相同的,即相邻状态的那两个是相同的,一个是正在通行,一个是等待上一状态通行的结束。这之后的两个状态显示的倒计时是累加上之前未通行状态的设置时间和正在通行状态的剩余时间之和。如图所示:

主干道直行主干道左转次干道直行次干道左转图1 状态转换图

2

电子技术课程设计报告

主直剩余时间主直剩余时间主左通行时间主直剩余时间主左通行时间次直通行时间主干道直行通行时间主干道左转等待时间次干道直行等待时间次干道左转等待时间图2 倒计时显示方式(以主干道正在通行为例)

2.2系统框架设计

通过以上分析,可以较为清晰地看出在系统设计状态转换和一些实现方式的设计思路,下面说明系统的框架整体设计思路。

整体框架思路为:首先将教学实验箱提供的50MHZ时钟信号分频,转换为可利用的1Hz CP信号,同时为了实现绿灯在1s内闪烁一次,再转换出一个2Hz的CP信号提供给需要闪烁的绿灯。然后是设置时间的功能模块,通过开关可以分别设置四个方向的运行时间,并将设置的时间传送到状态转换模块中。在状态转换功能模块中,通过前面传送来的设定通行时间进行倒计时和转换状态,并输出当前方向通行剩余时间和四向使能EN信号。在时间显示功能模块中,接收到前面的设置时间、剩余时间、使能信号,运用前面说明的现实方式的逻辑,计算出等待时间,在该向通行时显示剩余时间,在该向等待时显示等待时间,最终将时间信号输出到数码管显示模块;另外,由于数码管数量的限制,只能一次性显示8个(即四组),那么究竟是显示倒计时还是显示设置时间就需要一个开关信号来区分,于是设置一个输入信号来判别是否进入设置模式,并且只能在设置模式下设置时间。LED信号灯显示功能模块则将状态转换模块输出的EN使能信号和2Hz的CP信号以及当前剩余时间作为输入,根据状态点亮相应的LED信号灯。LED显示功能模块的原理和LED信号灯显示模块类似,也是根据同步状态EN使能信号,通过刷新字符的方式,改变和显示当前通行状态。最后,数码管显示功能模块是结合DE2教学开发板数码管的编码规则将BCD码转换为七段码,在译码后显示出来。

3

电子技术课程设计报告

分频 1Hz/2HzCP信号时间显示数码管显示四向时间设置设定时间运行时间状态转换EN使能信号LED信号灯显示LCD显示图3 系统框图

上图所示的系统框图只是大致说明系统的框架和流程,没有具体到每个模块的输入和输出,在前面的文字描述中有所说明,更加详细的设计说明将在后面模块功能说明的详细介绍。

2.3输入输出设计

根据功能需要,输入设计采用两个按键,模拟主干道、支干道有车过来。时钟信号输入为1MHz的时钟频率振荡器。输入设计采用4个数码管用于显示倒计时,8个LED灯作为交通信号。

2.4模块设计过程 2.4.1状态转换模块

该模块是控制器的核心部分,但是原理其实很简单,只是输入输出量很多,获取的信息多,处理后输出的信息也多。前文已说明了状态转换的思想是该控制器实现的主要思路,那么如何处理好这么多输入输出的关系就成为了重点需要解决的问题了。

输入部分的关键是四向设定通行时间的传入,这可以从时间设置模块的输出获取。这四个设定时间传入的时间需要选择好,即选择恰当的时机读取新的设置通行时间,因为设置时间的操作可能发生在任何运行时间,如果不能选择很好的时机来读入新的设置通行时间,可能造成逻辑上的混乱,致使状态不能按照正常的顺序进行转移,也给实际的交通信号控制造成了一定的影响。在这里,我选取了在每个状态运行结束的同时来读取新的设置通行时间,这样在任意状态时刻设置时间,将会在下一个状态

4

电子技术课程设计报告

到来时切换到新的通行时间上去运行,一方面不会使设置的效果延时太长,另一方面也不会出现如果恰巧在该方向上设置时间,那么该方向可能一直显示通行而不能正常转换状态的逻辑错误。

输出部分的关键是四个方向的EN使能信号和通行倒计时时间。根据所在的状态,可以对四个方向的EN使能信号进行赋值输出,用于控制信号灯显示和LED同步状态显示等。通行时间倒计时是为了数码管能够显示出通行剩余时间和等待通行时间,这个显示的方式在前文也有描述,这里不再赘述。通行剩余时间就是状态转换过程所依据的倒计时时间,在状态转换中需要根据各向通行时间在每个通行状态进行减计数倒计时,当计数到01时切换状态,而这个倒计时的时间正好是该方向通行的剩余时间,输出后经过显示方式的逻辑处理,就可以变成其它禁止方向的等待通行时间了。

2.4.2数码管显示模块

该功能模块同样建立在DE2底层函数调用基础上,实现4个数码管的时间显示。根据DE2教学开发板上数码管的七段编码规则,将输入时间的8位BCD码转换为七段码显示出来,我根据实际需要修改了底层函数,使得调用更加方便和集成化。

根据数码管七段的位置进行编码,每个段位的管子仍然是共阳极的,所以高电平实现熄灭管子,低电平实现点亮管子。小数点在物理上没有连接,所以无法使用。

图4 七段数码管的原理图和每段的标识位置

该功能在实现上,只要有输入就会有相应的输出,所以原理上比较简单,只要编码正确不会出现问题,所以不再赘述。

2.5模块描述 2.5.1主控制模块

说明:下面每个模块的源程序都在附录中

5

联系合同范文客服:xxxxx#qq.com(#替换为@)