基于FPGA的交通灯控制器设计报告.doc

上传人:h**** 文档编号:101516 上传时间:2018-07-06 格式:DOC 页数:71 大小:2.50MB
下载 相关 举报
基于FPGA的交通灯控制器设计报告.doc_第1页
第1页 / 共71页
基于FPGA的交通灯控制器设计报告.doc_第2页
第2页 / 共71页
基于FPGA的交通灯控制器设计报告.doc_第3页
第3页 / 共71页
基于FPGA的交通灯控制器设计报告.doc_第4页
第4页 / 共71页
基于FPGA的交通灯控制器设计报告.doc_第5页
第5页 / 共71页
点击查看更多>>
资源描述

1、电子技术课程设计报告 I *大学 *学年第二学期 电子技术基础课程设计 交通灯控制器 院 系 :* 学 号 :* 姓 名 :* 专 业 :* 指导老师 : * 电子技术课程设计报告 II 目 录 目 录 . 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

2、 时间设置模块 . - 5 - 2.4.3 状态转换模块 . - 6 - 2.4.4 时间显示模块 . - 6 - 2.4.5 LED 信号灯显示模块 . - 7 - 2.4.6 LCD 同步显示模块 . - 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.5 LED 信号灯显示模块 . - 9 - 2.5.6 LCD 同步显示模块 . - 10 - 2.6.7 数码管显示模块 . -

3、10 - 2.6 整体电路图 .- 11 - 第 3 章 系统仿真 . - 12 - 3.1 运行功能 . - 12 - 3.2 设置功能 . - 12 - 3.3 暂停 /复位功能 . - 13 - 3.4 LCD 屏显示功能 . - 14 - 电子技术课程设计报告 III 第 4 章 实验总结 . - 15 - 4.1 心得体会 . - 15 - 4.2 待改进的问题 . - 16 - 4.3 结束语 . - 16 - 电子技术课程设计报告 - 1 - 第 1 章 绪论 1.1 课程设计背景 经过两个学期的电子线路设计测试实验,我们从基础的 模电、数电 典型电路的设计和实现做起,从 PSp

4、ice 和 MAX 的设计与仿真,到面包板搭建电路的实践 与测试,在不断的学习和积累中,了解了电子技术设计的基本过程和基础知识 。在本学期,我们迎来了电子技术课程设计,这是一次将理论付诸实践的宝贵机会,是提升我们运用电子技术设计手段实现实际问题的能力的良好机遇。 在选题阶段,我踌躇满志的和另一个同学选择了 SD 卡音乐播放器这个选做题,但是由于没有足够地去深入了解相关的技术问题,致使在开题时没有通过曾老师的验收,只能十分遗憾的选择了基础题,改做交通灯控制器了。虽然有些遗憾,因为当初觉得自己有能力完成那样一个选做题,但是这也给了我一个深刻的教训,在机遇和挑战面前,再有信心 也要做好充足的准备来证

5、明你的实力。另一方面给我的启示就是,尽管一个相同的题目前人做了很多工作,给我们提供了一个很好的平台,但是如果我们只是去读懂和使用它们,仅限在这样一个层次是远远不够了,要学会从前人的研究成果中寻找新的突破点,利用自己已掌握的知识或者所具备的能力,在原有的基础上实现更加丰富的功能 ,这才应该是我们做课程设计的最终目的。仅仅看懂别人的设计思路和代码并不是能力的体现,而真正锻炼我们能力的是在充分掌握前人设计手段的基础上,融会贯通地使原有的设计更加结合实际,更加完善。 尽管没能做成选做题,但我对于 这个交通灯控制器的设计还是兴趣十足。毕竟我们是控制系的学生,在不久前也学习过利用 PLC 控制器实现智能交

6、通灯的方法,感觉这个题目上手应该比较快。加上前两个学期的积累,譬如数字钟的设计,就已经用到了分频、计数等等功能的设计模块,将它们移植过来加以改善,应该能够实现题目要求的基本功能了。 之后我查阅了一些相关设计论文,发现大多数基于 FPGA 利用 Verilog 进行设计的交通灯控制器的原理都是状态转换, 于是该题目设计的主题思想 基于状态转换,就这样确定了。 1.2 课程设计题目 设计一个十字路口交通信号灯的控制电路。 要求红、绿灯按照一定的要求亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。 要求主干道每次通行时间为 TX 秒,支干道每次通行时间为 TY 秒。每次变换运行车道前绿

7、灯闪烁,持续时间为 5 秒。即车道要由 X 转换为 Y 时, X 在通行时间只剩下 5 秒钟时,绿灯闪烁显示, Y 仍为红灯。 可以对 X、 Y 方向上的交通灯运行时间进行重新设置。 电子技术课程设计报告 - 2 - 1.3 课题 功能 补充 在原有题目功能要求的基础上,我对交通灯控制器的功能在设计方面进行了补 充 ,主要体现在 : ( 1) 增加主、次干道左转红绿信号灯; ( 2) 增加主、次干道左转运行时间倒计时,并用数码管显示 ; ( 3) 增加 LCD 同步显示当前运行状态功能,即用 LCD 显示信号灯状态; ( 4) 增加主、次干道 左转运行时间重新设置功能。 功能增加了,可以说任务

8、量也增加了不少。就最为关键的时间设置和显示方面,由于增加了两个左转方向的运行时间,虽然只是增加了两个状态,但是同时显示四个方向的等待和通行的倒计时,确实在开始设计时,我有些茫然,觉得无从下手。我花了很长时间在网上查阅实际中的交通灯到底是如何计时和运行的,也到学校周围的路口实地调查过几种十字路口交通灯的设置,慢慢的从实际设置需求中理清头绪,具体的设计思路将在后面的部分详细说明。 电子技术课程设计报告 - 3 - 第 2 章 系统设计 2.1 系统 设计思路 前面讲到,基于状态机的方法可以轻松实现交通灯的控制,而状态转换利用Verilog 中的 case 和循环语句很容易实现。我将四种状态的转换顺

9、序设置为:主直 主左 次直 次左 主直 (依次循环),每个状态在设置时间的基础上由倒计时进行状态的变换。以上都是比较容易实现的,也是很多经典的例子上有讲解过的,下面我着重说明下如何实现四个方向同时进行等待和通行的倒计时。 用四组数码管来显示 主、次干道直行和左转倒计时,首先需要了解这四组数码管显示的规律,也就是显示计数的规律。在网上查 阅资料的时候,通过观看一段视频,我茅塞顿开。这个视频展示的是基于 51 单片机实现的交通灯控制器的实物功能演示,它也是利用了四组数码管分别显示四个方向的倒计时。通过反复观看我发现,其实在四个方向中,一个是通行倒计时,另外三个是等待倒计时,而等待倒计时又是它之前状

10、态通行时间之和,在显示的效果上就是总会有两组倒计时数值是相同的,即相邻状态的那两个是相同的,一个是正在通行,一个是等待上一状态通行的结束。这之后的两个状态显示的倒计时是累加上之前未通行状态的设置时间和正在通行状态的剩余时间之和。如图所示: 图 1 状态转换 图 主 干 道 左 转 次 干 道 左 转主 干 道 直 行 次 干 道 直 行图 2 倒计时显示方式(以主干道正在通行为例) 主 干 道 左 转等 待 时 间次 干 道 左 转等 待 时 间主 干 道 直 行通 行 时 间次 干 道 直 行等 待 时 间主 直 剩 余 时 间主 直 剩 余 时 间主 直 剩 余 时 间主 左 通 行 时

11、间 次 直 通 行 时 间主 左 通 行 时 间2.2 系统框架设计 通过以上分析,可以较为清晰地看出在系统设计状态转换和一些实现方式的设计思路,下面说明系统的框架整体设计思路。 电子技术课程设计报告 - 4 - 整体框架思路为:首先将 DE2 教学实验板提供的 50MHZ 时钟信号分频,转换为可利用的 1Hz CP 信号,同时为了实现绿灯在 1s 内闪烁一次,再转换出一个 2Hz的CP 信号提供给需要闪烁的绿灯 。然后是设置时间的功能模块,通 过开关可以分别设置四个方向的运行时间,并将设置的时间传送到状态转换模块中。在状态转换功能模块中,通过前面传送来的设定通行时间进行倒计时和转换状态,并输

12、出当前方向通行剩余时间和四向使能 EN 信号。在时间显示功能模块中,接收到前面的设置时间、剩余时间、使能信号,运用前面说明的现实方式的逻辑,计算出等待时间,在该向通行时显示剩余时间,在该向等待时显示等待时间,最终将 时间信号输出到数码管显示模块 ;另外,由于数码管数量的限制,只能一次性显示 8 个(即四组),那么究竟是显示倒计时还是显示设置时间就需要一个开关信号来区分,于 是设置一个输入信号来判别是否进入设置模式,并且只能在设置模式下设置时间 。 LED 信号灯显示功能模块则将状态转换模块输出的 EN 使能信号和 2Hz的 CP信号以及当前剩余时间作为输入,根据状态点亮相应的 LED 信号灯。

13、 LCD 显示功能模块的原理和 LED 信号灯显示模块类似,也是根据同步状态 EN 使能信号,通过刷新字符的方式,改变和显示当前通行状态。最后,数码管显示功能模块是结合 DE2 教学开发板数码管的编码规则将 BCD码转换为七段码,在译码后显示出来。 图 3 系统框图 分 频 1 H z / 2 H z四 向 时 间 设 置 状 态 转 换时 间 显 示L E D 信 号 灯 显 示数 码 管 显 示L C D 显 示设 定 时 间运 行时 间E N 使 能信 号C P 信 号上图所示的系统框图只是大致说明系统的框架和流程,没有具体到每个模块的输入和输出,在前面的文字描述中有所说明,更加详细的设

14、计说明将在后面模块功能说明的详细介绍。 2.3 输入输出设计 根据功能需要,输入 设计 采用拨动开关,共 10 个。其中,设置四向时间用 8 个,另外两个分别用于暂停和复位,即分频 的 nCR 和状态装换的 nCR 输入。时钟信号输入为 50MHz 的时钟频率振荡器。(在这里补充说明一点, DE2 教学开发板的按键弹起为高电平,按下为低电平,我在实验中发现不适合作为设置开关,所以没有采用;其实拨动开关更能在测试时较好 地显示状态和反应问题,便于寻找错误点。) 输入设计采用 8 个数码管用于显示倒计时, 8 个 LED 灯作为交通信号灯, LCD屏同步显示运行状态。 电子技术课程设计报告 - 5

15、 - 图 4 输入输出设计 2.4 模块设计 过程 2.4.1 分频模块 该 模块实现的是对 50MHz 晶振时钟信号的分频功能,采用传统的 “一半就翻转 ”的计数技巧,这一功能在很多资料上都能查找到相关代码 ,就不再赘述 。为了实现绿灯在 1s 内闪烁一次,需要一个 2Hz 的 CP 信号,这里一次性产生两种信号: 1Hz 和2Hz,便于之后模块的使用。 2Hz 的 CP 信号产生实际就是在 1Hz 分频的基础上,改变 每次移位的位数,使每次移位为 1Hz的两 倍,这样产生信号的周期就缩短了一倍,自然形成了 2Hz的 CP 信号。 2.4.2 时间设置模块 该模块的位置靠前,主要是实现对四个

16、方向通行时间的设置,其设置的结果,最为此后模块的输入,故置于前端。该模块根据时间设置拨动开关的情况,采用累加计数方式设定通行时间,为了便于置数,采用十位、个位分别置数的方式,即十位和个位在设置拨动开关有效时,按照从 0 到 9 的顺序累加,到 9 又返 0(当然 与程序中设置的初始时间有关 ) 。每次先读取十位是否需要置数,如果需要,开始进行十位的置50MHz 晶振 LCD 屏显示 数码管显示 时间设置开关 暂停 /复位 /模式开关 LED 信号灯 电子技术课程设计报告 - 6 - 数累加;如果没有十 位置数请求,则读取个位置数开关信号,开始个位置数累加。注意:不能同时对两位进行置数,这在实际

17、中也避免了操作错误的出现。关于置数累加所需的 CP 信号,可以采用高于 1Hz的时钟信号,这样可以提高置数效率;但是我在实际操作调试的过程中发觉,由于拨动开关没有去抖功能,如果 CP 信号的频率过快,容易产生错误的时间跳变,增加了控制的准确性,反而影响了设置时间的效率,于是我仍旧采用了 1Hz的 CP 信号作为该模块的时钟信号输入。 为了防止在正常运行情况下没有显示设置时间就可以通过拨动开关进行置数,这里设置了模式信号,即只能在数码管 显示为设置时间的时候,才能通过拨动开关进行置数操作,否则开关操作无效。 2.4.3 状态转换模块 该模块是控制器的核心部分,但是原理其实很简单,只是输入输出量很

18、多,获取的信息多,处理后输出的信息也多。前文已说明了状态转换的思想是 该控制器实现的主要思路,那么如何处理好这么多输入输出的关系就成为了重点需要解决的问题了。 输入部分的关键是四向设定通行时间的传入,这可以从时间设置模块的输出获取。这四个设定时间传入的时间需要选择好,即选择恰当的时机读取新的设置通行时间,因为设置时间的操作可能发生在任何运行时间,如果不能 选择很好的时机来读入新的设置通行时间,可能造成逻辑上的混乱,致使状态不能按照正常的顺序进行转移,也给实际的交通信号控制造成了一定的影响。在这里,我选取了在每个状态运行结束的同时来读取新的设置通行时间,这样在任意状态时刻设置时间,将会在下一个状

19、态到来时切换到新的通行时间上去运行,一方面不会使设置的效果延时太长,另一方面也不会出现如果恰巧在该方向上设置时间,那么该方向可能一直显示通行而不能正常转换状态的逻辑错误。 输出部分的关键是四个方向的 EN 使能信号和通行倒计时时间。根据所在的状态,可以对四个方向的 EN 使能信 号进行赋值输出,用于控制信号灯显示和 LCD 同步状态显示等。通行时间倒计时是为了数码管能够显示出通行剩余时间和等待通行时间,这个显示的方式在前文也有描述,这里不再赘述。通行剩余时间就是状态转换过程所依据的倒计时时间,在状态转换中需要根据各向通行时间在每个通行状态进行减计数倒计时,当计数到 01 时切换状态,而这个倒计

20、时的时间正好是该方向通行的剩余时间,输出后经过显示方式的逻辑处理,就可以变成其它禁止方向的等待通行时间了。 2.4.4 时间显示模块 基于前文描述的显示方式,该功能模块实现的就是显示该方向通行剩余时间, 其它三个方向等待通行的时间以及设置时间模式下四个方向的通行时间。可以看出,在只有四组数码管的前提下,只能通过增加一个模式开关来区分显示的是运行时间还是设置时间。 该模块的难点就是在逻辑上,在下文的整体电路图中会发现,此部分的连线较为复杂,如图 2 所示,在过程中需要传递和获取很多个时间,有正在通行方向的剩余时间,这个可以从状态转换模块之间获取,有该方向和正在通行方向之间的所有状态的通行时间之和

21、(即等待通行时间)。为了模块化,我并没有做大范围的集成,而是把这个逻辑体现在了电路的连接上面, 虽然看起来有些繁杂,但是却 能比较直观的显示出其中的逻辑关系,即是如何累加的,这样在逻辑出错时,便于纠错。在等待通行时电子技术课程设计报告 - 7 - 间的累加上,采用了依次传值的方式,按照状态顺序的高低,从上往下依次传送自己的等待通行时间,高位状态传送给低位状态自己需要等待的时间和 该 高位状态通行时间,低位状态将这 两个时间求和后得到该低位状态的等待通行时间。 如果高位状态正在通行,则将该高位状态通行的剩余时间传送给其下的低位状态,该低位状态直接将该剩余时间作为自己的等待通行时间显示出来。 2.

22、4.5 LED 信号灯显示模块 该功能模块就是实现用 LED 灯模拟交通信号灯的显示 ,根据题目要求设置红灯和绿灯,绿灯在倒数 5s 开始闪烁。 DE2 教学开发板上面的 LED 灯是共阳极的,所以给低电平就能点亮相应的灯。为了实现绿灯闪烁的效果,可以在倒计时 5s 时开始对绿灯的 EN 使能信号进行自取反,使用 2Hz的 CP 信号就能实现较好的闪烁效果了。 这里 说明一下没有增加黄灯显示的原因, 虽然黄灯在实际的交通灯中使用较广泛,但是黄灯显示的时间很短暂,却要在各方向各增加一个状态,这就给倒计时显示增加了难度。我在网上看到过一个有黄灯的视频展示,它就是出现了黄灯也要倒计时的情况,感觉实用

23、性不大,反而容易造成视觉上的 困扰, 因为黄灯的时间太短了。 鉴于我没有充分考虑好解决的方案,所以 暂时 没有增加黄灯的显示功能。 2.4.6 LCD 同步显示模块 该功能模块实现的就是用 LCD 屏显示当前的交通灯运行状态,在 LCD 屏上显示字符 “ ”表示允许左转, “ ”表示允许直行, “”表示禁止通行,用 “M”和 “B”来区分主、次干道 ,采用 ASCII 码的编码方式显示相应字符 。 该模块建立在 DE2 底层模块的基础上,由于其显示和刷新的原理比较复杂,我也花费了很长的时间慢慢去看懂这些底层的代码。在这个过程中我遇到的最大困难就是如何实现刷新,既然要同步显示 通行的状态,肯定要

24、根据 EN 使能信号来选择在LCD 屏上显示什么样的字符表示相应的状态。可是底层函数的调用只能显示一次字符,即不能刷新,这样一来就无法完成设计目的了。于是我在底层函数中慢慢测试,看看哪些语句可以控制实现刷新功能,尝试了很多种方式,终于在 LCD_TEST 中找到了可以实现刷新的地方,其实原理很简单,就是在每次读取完整屏信息后,读取位置地址归零,在下个读取信号到来时再次进行读取字符进行显示。 2.4.7 数码管显示模块 该功能模块同样建立在 DE2 底层函数调用基础上,实现四组 8 个数码管的时间显示。根据 DE2 教学开发板上数码管的七段编码规则,将输入时间的 8 位 BCD 码转换为七段码显示出来 ,我根据实际需要修改了底层函数,使得调用更加方便和集成化 。 根据数码管七段的位置进行编码,每个段位的管子仍然是共阳极的,所以高电平实现熄灭管子,低电平实现点亮管子。小数点在物理上没有连接,所以无法使用。 图 5 七段数码管的原理图和每段的标识位置

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。