基于FPGA的交通灯控制器设计报告.doc
《基于FPGA的交通灯控制器设计报告.doc》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯控制器设计报告.doc(19页珍藏版)》请在冰豆网上搜索。
电子技术课程设计报告
********大学
*******学年第二学期
电子技术基础课程设计
——交通灯控制器
院系:
***
学号:
***
姓名:
***
专业:
***
指导老师:
***
目录
目录 II
第1章绪论 -1-
1.1课程设计背景 -1-
1.2课程设计题目 -1-
1.3课题功能补充 -2-
第2章系统设计 -3-
2.1系统设计思路 -3-
2.2系统框架设计 -3-
2.3输入输出设计 -4-
2.4模块设计过程 -5-
2.4.1分频模块 -5-
2.4.2时间设置模块 -5-
2.4.3状态转换模块 -6-
2.4.4时间显示模块 -6-
2.4.5LED信号灯显示模块 -7-
2.4.6LCD同步显示模块 -7-
2.4.7数码管显示模块 -7-
2.5模块描述 -8-
2.5.1分频模块 -8-
2.5.2时间设置模块 -8-
2.5.3状态转换模块 -9-
2.5.4时间显示模块 -9-
2.5.5LED信号灯显示模块 -9-
2.5.6LCD同步显示模块 -10-
2.6.7数码管显示模块 -10-
2.6整体电路图 -11-
第3章系统仿真 -12-
3.1运行功能 -12-
3.2设置功能 -12-
3.3暂停/复位功能 -13-
3.4LCD屏显示功能 -14-
第4章实验总结 -15-
4.1心得体会 -15-
4.2待改进的问题 -16-
4.3结束语 -16-
-11-
电子技术课程设计报告
第1章绪论
1.1课程设计背景
经过两个学期的电子线路设计测试实验,我们从基础的模电、数电典型电路的设计和实现做起,从PSpice和MAXⅡ的设计与仿真,到面包板搭建电路的实践与测试,在不断的学习和积累中,了解了电子技术设计的基本过程和基础知识。
在本学期,我们迎来了电子技术课程设计,这是一次将理论付诸实践的宝贵机会,是提升我们运用电子技术设计手段实现实际问题的能力的良好机遇。
在选题阶段,我踌躇满志的和另一个同学选择了SD卡音乐播放器这个选做题,但是由于没有足够地去深入了解相关的技术问题,致使在开题时没有通过曾老师的验收,只能十分遗憾的选择了基础题,改做交通灯控制器了。
虽然有些遗憾,因为当初觉得自己有能力完成那样一个选做题,但是这也给了我一个深刻的教训,在机遇和挑战面前,再有信心也要做好充足的准备来证明你的实力。
另一方面给我的启示就是,尽管一个相同的题目前人做了很多工作,给我们提供了一个很好的平台,但是如果我们只是去读懂和使用它们,仅限在这样一个层次是远远不够了,要学会从前人的研究成果中寻找新的突破点,利用自己已掌握的知识或者所具备的能力,在原有的基础上实现更加丰富的功能,这才应该是我们做课程设计的最终目的。
仅仅看懂别人的设计思路和代码并不是能力的体现,而真正锻炼我们能力的是在充分掌握前人设计手段的基础上,融会贯通地使原有的设计更加结合实际,更加完善。
尽管没能做成选做题,但我对于这个交通灯控制器的设计还是兴趣十足。
毕竟我们是控制系的学生,在不久前也学习过利用PLC控制器实现智能交通灯的方法,感觉这个题目上手应该比较快。
加上前两个学期的积累,譬如数字钟的设计,就已经用到了分频、计数等等功能的设计模块,将它们移植过来加以改善,应该能够实现题目要求的基本功能了。
之后我查阅了一些相关设计论文,发现大多数基于FPGA利用Verilog进行设计的交通灯控制器的原理都是状态转换,于是该题目设计的主题思想——基于状态转换,就这样确定了。
1.2课程设计题目
设计一个十字路口交通信号灯的控制电路。
要求红、绿灯按照一定的要求亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。
要求主干道每次通行时间为TX秒,支干道每次通行时间为TY秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由X转换为Y时,X在通行时间只剩下5秒钟时,绿灯闪烁显示,Y仍为红灯。
可以对X、Y方向上的交通灯运行时间进行重新设置。
1.3课题功能补充
在原有题目功能要求的基础上,我对交通灯控制器的功能在设计方面进行了补
充,主要体现在:
(1)增加主、次干道左转红绿信号灯;
(2)增加主、次干道左转运行时间倒计时,并用数码管显示;
(3)增加LCD同步显示当前运行状态功能,即用LCD显示信号灯状态;
(4)增加主、次干道左转运行时间重新设置功能。
功能增加了,可以说任务量也增加了不少。
就最为关键的时间设置和显示方面,由于增加了两个左转方向的运行时间,虽然只是增加了两个状态,但是同时显示四个方向的等待和通行的倒计时,确实在开始设计时,我有些茫然,觉得无从下手。
我花了很长时间在网上查阅实际中的交通灯到底是如何计时和运行的,也到学校周围的路口实地调查过几种十字路口交通灯的设置,慢慢的从实际设置需求中理清头绪,具体的设计思路将在后面的部分详细说明。
第2章系统设计
2.1系统设计思路
前面讲到,基于状态机的方法可以轻松实现交通灯的控制,而状态转换利用Verilog中的case和循环语句很容易实现。
我将四种状态的转换顺序设置为:
主直→主左→次直→次左→主直→……(依次循环),每个状态在设置时间的基础上由倒计时进行状态的变换。
以上都是比较容易实现的,也是很多经典的例子上有讲解过的,下面我着重说明下如何实现四个方向同时进行等待和通行的倒计时。
用四组数码管来显示主、次干道直行和左转倒计时,首先需要了解这四组数码管显示的规律,也就是显示计数的规律。
在网上查阅资料的时候,通过观看一段视频,我茅塞顿开。
这个视频展示的是基于51单片机实现的交通灯控制器的实物功能演示,它也是利用了四组数码管分别显示四个方向的倒计时。
通过反复观看我发现,其实在四个方向中,一个是通行倒计时,另外三个是等待倒计时,而等待倒计时又是它之前状态通行时间之和,在显示的效果上就是总会有两组倒计时数值是相同的,即相邻状态的那两个是相同的,一个是正在通行,一个是等待上一状态通行的结束。
这之后的两个状态显示的倒计时是累加上之前未通行状态的设置时间和正在通行状态的剩余时间之和。
如图所示:
图1状态转换图
图2倒计时显示方式(以主干道正在通行为例)
2.2系统框架设计
通过以上分析,可以较为清晰地看出在系统设计状态转换和一些实现方式的设计思路,下面说明系统的框架整体设计思路。
整体框架思路为:
首先将DE2教学实验板提供的50MHZ时钟信号分频,转换为可利用的1HzCP信号,同时为了实现绿灯在1s内闪烁一次,再转换出一个2Hz的CP信号提供给需要闪烁的绿灯。
然后是设置时间的功能模块,通过开关可以分别设置四个方向的运行时间,并将设置的时间传送到状态转换模块中。
在状态转换功能模块中,通过前面传送来的设定通行时间进行倒计时和转换状态,并输出当前方向通行剩余时间和四向使能EN信号。
在时间显示功能模块中,接收到前面的设置时间、剩余时间、使能信号,运用前面说明的现实方式的逻辑,计算出等待时间,在该向通行时显示剩余时间,在该向等待时显示等待时间,最终将时间信号输出到数码管显示模块;另外,由于数码管数量的限制,只能一次性显示8个(即四组),那么究竟是显示倒计时还是显示设置时间就需要一个开关信号来区分,于是设置一个输入信号来判别是否进入设置模式,并且只能在设置模式下设置时间。
LED信号灯显示功能模块则将状态转换模块输出的EN使能信号和2Hz的CP信号以及当前剩余时间作为输入,根据状态点亮相应的LED信号灯。
LCD显示功能模块的原理和LED信号灯显示模块类似,也是根据同步状态EN使能信号,通过刷新字符的方式,改变和显示当前通行状态。
最后,数码管显示功能模块是结合DE2教学开发板数码管的编码规则将BCD码转换为七段码,在译码后显示出来。
图3系统框图
上图所示的系统框图只是大致说明系统的框架和流程,没有具体到每个模块的输入和输出,在前面的文字描述中有所说明,更加详细的设计说明将在后面模块功能说明的详细介绍。
2.3输入输出设计
根据功能需要,输入设计采用拨动开关,共10个。
其中,设置四向时间用8个,另外两个分别用于暂停和复位,即分频的nCR和状态装换的nCR输入。
时钟信号输入为50MHz的时钟频率振荡器。
(在这里补充说明一点,DE2教学开发板的按键弹起为高电平,按下为低电平,我在实验中发现不适合作为设置开关,所以没有采用;其实拨动开关更能在测试时较好地显示状态和反应问题,便于寻找错误点。
)
输入设计采用8个数码管用于显示倒计时,8个LED灯作为交通信号灯,LCD屏同步显示运行状态。
图4输入输出设计
50MHz晶振
LCD屏显示
数码管显示
时间设置开关
暂停/复位/模式开关
LED信号灯
2.4模块设计过程
2.4.1分频模块
该模块实现的是对50MHz晶振时钟信号的分频功能,采用传统的“一半就翻转”的计数技巧,这一功能在很多资料上都能查找到相关代码,就不再赘述。
为了实现绿灯在1s内闪烁一次,需要一个2Hz的CP信号,这里一次性产生两种信号:
1Hz和2Hz,便于之后模块的使用。
2Hz的CP信号产生实际就是在1Hz分频的基础上,改变每次移位的位数,使每次移位为1Hz的两倍,这样产生信号的周期就缩短了一倍,自然形成了2Hz的CP信号。
2.4.2时间设置模块
该模块的位置靠前,主要是实现对四个方向通行时间的设置,其设置的结果,最为此后模块的输入,故置于前端。
该模块根据时间设置拨动开关的情况,采用累加计数方式设定通行时间,为了便于置数,采用十位、个位分别置数的方式,即十位和个位在设置拨动开关有效时,按照从0到9的顺序累加,到9又返0(当然与程序中设置的初始时间有关)。
每次先读取十位是否需要置数,如果需要,开始进行十位的置数累加;如果没有十位置数请求,则读取个位置数开关信号,开始个位置数累加。
注意:
不能同时对两位进行置数,这在实际中也避免了操作错误的出现。
关于置数累加所需的CP信号,可以采用高于1Hz的时钟信号,这样可以提高置数效率;但是我在实际操作调试的过程中发觉,由于拨动开关没有去抖功能,如果CP信号的频率过快,容易产生错误的时间跳变,增加了控制的准确性,反而影响了设置时间的效率,于是我仍旧采用了1Hz的CP信号作为该模块的时钟信号输入。
为了防止在正常运行情况下没有显示设置时间就可以通过拨动开关进行置数,这里设置了模式信号,即只能在数码管显示为设置时间的时候,才能通过拨动开关进行置数操作,否则开关操作无效。
2.4.3状态转换模块
该模块是控制器的核心部分,但是原理其实很简单,只是输入输出量很多,获取的信息多,处理后输出的信息也多。
前文已说明了状态转换的思想是该控制器实现的主要思路,那么如何处理好这么多输入输出的关系就成为了重点需要解决的问题了。
输入部分的关键是四向设定通行时间的传入,这可以从时间设置模块的输出获取。
这四个设定时间传入的时间需要选择好,即选择恰当的时机读取新的设置通行时间,因为设置时间的操作可能发生在任何运行时间,如果不能选择很好的时机来读入新的设置通行时间,可能造成逻辑上的混乱,致使状态不能按照正常的顺序进行转移,也给实际的交通信号控制造成了一定的影响。
在这里,我选取了在每个状态运行结束的同时来读取新的设置通行时间,这样在任意状态时刻设置时间,将会在下一个状态到来时切换到新的通行时间上去运行,一方面不会使设置的效果延时太长,另一方面也不会出现如果恰巧在该方向上设置时间,那么该方向可能一直显示通行而不能正常转换状态的逻辑错误。
输出部分的关键是四个方向的EN使能信号和通行倒计