第一篇:74LS190交通灯控制电路的设计与仿真课程设计.
目录
一、课程设计时间(1
二、课程设计题目(1
三、设计任务、要求及器件(1
四、课程设计的电路及工作原理(2
五、设计中出现的问题(8
六、心得体会(8
一、课程设计时间:5月25 日、5月27日、6月1日、6月3日
二、课程设计题目:交通灯控制电路的设计与仿真
三、设计任务、要求及器件
1、设计任务与要求
1、能显示十字路口东西、南北两个方向的红、黄、绿的指示状态,用两组红、黄、绿三色灯来表示两个方向上的交通灯;
2、能实现正常的倒计时功能,用两组数码管作为东西和南北方向的到计时显示,并且对红、绿灯的时间可调,在每次由绿灯变成红灯或相反的过度转换过程中,要亮黄灯2秒作为过渡;
3、能实现由手动控制红、绿的状态,即达到能手动切换交通灯的特殊状态的功能;
2、用的器件及芯片,见表一 数码管脉冲源
逻辑与门 逻辑或门 灯 逻辑或门 电平开关 开关
四、课程设计的电路及工作原理
交通灯控制电路主要由循环部分电路、减数器和显示(数码管等部分组成。用到的信号是时钟信号,脉冲发生器是提供给该系统中减数器的标准时钟信号源,循环电路部分是系统的主要部分,由它控制定红、黄绿、灯的往复工作,减数器与数码管组成不同进制与时间显示。即74194输出用于点亮红、黄、绿灯和控制灯点亮同时进行的倒计数,倒计数及灯点亮时间的设置可由74190完成,手动脉冲和74190的进位输出脉冲又可用于去激励74194进位输出,如此往复形成红绿灯的循环点亮控制。
1、往复循环电路及原理
在设计中用到起移位作用的芯片是双向移位寄存器74LS190,用此芯片来控制灯的移动,可搭建出单循环和往复循环两种结构电路。
双向移位寄存器74194 为4 位双向移位寄存器,其主要电特性的典型值如下: 当清除端(CLEAR为低电平时,输出端(QA-QD均为低电平。当工作方式控制端(S0、S1均为高电平时,在时钟(CLOCK上升沿作用下,并行数据(A-D被送入相应的输出端QA-QD。此时串行数据(DSR、DSL被禁止。当S0 为高电平、S1 为低电平时,在CLOCK上升沿作用下进行右移操作,数据由DSR送入。当S0 为低电平、S1
为高电平时,在CLOCK上升沿作用下进行操作,数据由DSR送入。当S0 和S1 均为低电平时, CLOCK 被禁止。对于54(74194,只有当CLOCK 为高电平时S0 和S1 才可改变。
引出端符号: CLOCK 时钟输入端CLEAR 清除端(低电平有效 A-D 并行数据输入端DSL 左移串行数据输入端 DSR 右移串行数据输入端S0、S1 工作方式控制端 QA-QD 输出端
在设计中用的是往复循环连接方式: 往复循环计数电路的设计采用的是同步方式,使用D触发器控制74LS194的左右移位, 设计电路图如下,图一所示:
图
一、红绿灯的交替电路(往复循环
为达到往复循环计数电路的设计,需满足下列表格的要求,见表二:
D 触发器 Q →1S Q →0S ,这样做到触发器“0”态194右移。
74194与D 触发器的D R 端连接置零信号,作启动作用。L S 做接地处理,以便在左行移
位时给低位补零。
考虑无关项的情况下,利用卡诺图化简可得如下结果: R S =A B Q Q =A B Q Q D =B Q Q +C Q
2、减数器电路及原理
另外用到的芯片是74LS194,此芯片具有计数功能,而在交通灯中是利用它的减数功能,单片的194是十进制,若要达到十进制以上的要求,则需将两块芯片组合在一起运用。将两片组合在一起能实现一百进制的计数。
74190为可预置的十进制同步加/减计数器,当置入控制端LD 为低电平,不管信号CP 的状态如何,输出端~A D Q Q 即可预置成与输入端A~D 相一致的状态。引出端符号: ~A D Q Q 并行数据输出端 CTEN 使能端 A~D 数据输入端 LD 置数端
CLK 信号输入端 RCO 进位信号输出端
图
二、减数器
电路中的左边这片是高位,右边是低位,将低位的RCO输出的信号送到高位的CLK 端,用来给高位信号,来完成高位的自动减数,同时将高位的数据输出端QD用个逻辑非门送回到高、低位的LD置数端以达到自动减数的作用。
此电路可做到控制输入不同进制,完成的是对十位的不同控制,从而达到所需的不同计时要求,达到的是整十进制的转换,通过开关来完成不同进制的转换,可在十到七十的不同控制。例如,在D关闭下完成的十进制,在S关闭下完成的是二十进制,S和D同时关闭时完成的是三十进制,在A关闭下是完成四十进制,等进制的控制,达到A、S和D同时关闭的状态下达到最高七十进制的转换。
3、红绿灯的控制结构电路及原理
交通灯控制电路主要由以下几部分构成,绿灯、红灯和黄灯计时及预初值电路、红绿灯交替往复电路等构成。最终组合的电路要求控制的是十字路口上的红绿
灯,两片74190组合的减数器对一个路口的交通灯中的绿灯进行计数,另一组减数器对红灯进行计数,单独一片74190对黄灯计数,另外路口的交通灯接在这路口上,将红灯接绿灯,绿灯接红灯,黄灯接黄灯。
当出现紧急情况一类问题是,我们需要能手动来控制交通灯的亮/熄,未达到此要求在电路中设计有一手动开关K,需要将交通灯设置在什么颜色上的位置,只需手动控制开关就能完成。此手动开关由字母K控制,当K开启之后,减数器从往复循环的灯状态得到的信号被截断,交通灯就处于此位置一直不变,到K闭合之后往复循环中的灯的状态信号才能给到减数器中,从而减数器又开始工作。
在电路中还使用了电平开关,起到的作用是将信号灯亮/熄状态的返回到减数器的,以控制190的工作,当灯亮时电平开关两端有电压,开关闭合,线路处于导通,减数器接收到信号,开始工作,当灯熄灭时,电平开关两端没电压,开关开启,线路截止,减数器没有信号输入,停止工作,减数器处于开始预置数上,到下一个灯亮起之后减数器做相同的状态变换。
状态控制器是系统的核心部分,在红绿灯的控制结构电路图中,从74194的红灯接到电平开关在接回74190的LOAD`端,即将红灯的信号传给190以控制其工作,将信号送回到190 驱动它工作;将高位和低位的RCO出来的信号送到194的CLK端来推动194及D触发器的工作,如此循环下去,通过开关来控制进制的转换;对于这路口的红灯用同样的方法接在另外一组减数器上。对黄灯只需一片190就能完成它的进制要求,接法和两片类似。状态控制器决定交通灯处于哪一个运行状态。从而使相应的交通灯点亮,并决定下一个状态的预置电路该预置的绿灯和黄灯的预置值。状态控制电路是由寄存器74LS194来实现的。首先进行置数。将1(高电平送给高位的Q,使绿灯1(亮、黄灯0(熄、绿灯0(熄,在当前状态计时结束后,计数器置入下一个状态计数值并开始计数,如此循环往复。红灯
1、黄灯0、绿灯0,红灯0、黄灯
1、绿灯0,红灯0、黄灯0、绿灯1,两路口连接在一起的红灯和绿灯显示时间同步,其他单元在状态控制电路的状态控制下有序的完成计时和计数转换。
假定当前状态如红灯亮时,结果分析如下:将红灯的输入端接到计数器,对红灯的亮灯
时间进行计数,然后显示输出。红灯熄灭时,数码管LED灭;红灯亮时,计时器开始倒计时,计时器可以通过开关进行不同进制的转换,此时,另一路口的绿灯和现在的这红灯同步。当计时递减到0时,状态控制器进入下一个状态,控制黄灯亮起;黄灯熄灭之后到绿灯亮起,和刚才的红灯一样的效果,但是进制可以调整成不一样;当红灯亮时,计数器、显示器执行上述的功能,如此周而复始,完成交通灯的显示过程。
五、设计中出现的问题
在设计过程中出现的了较多的问题,但是在慢慢的查阅资料及和同学一起讨论之后把各个问题顺利解决。例如设计过程中,在开始之前没好好看书及去查资料,导致思路不清晰,以及74190芯片的功能不少很清楚,导致不能顺利将减数器接通。知道用那个型号的芯片之后得了解器具体功能才能开始连接电路,不同的芯片可以用来实现不同的功能,因此要在了解各芯片的具体功能之后才开始实施设计要求。
在设计交通灯的减数器时,将计数器74LS190的低位的RCO没接到高位的CLK,结果导致高位的数码管不显示,经过检查之后,解决了这一问题。接下来是减数器不能自动计数,检查后结果发现是没将高位的输出信号返回给190的LOAD,将其用逻辑非门接回给芯片后,减数器就顺利工作。对于进制的转换接触的电路没问题。
在将往复循环电路与减计数构建在一起时出现的问题较多,开始是交通灯无法顺利进行往复,发现原因是190输出的信号到194之间的线路出问题,逻辑门使用的不合理导致结果出错,这是没能详细计算出现的错误,经过进一步的查看及计算,最后顺利完成设计。
六、心得体会
开始拿到设计题目,感到很难入手,花了较长时间来理清楚思路。接下来的具体电路设计才是难点所在,所需用到的芯片其功能得去查阅,才能将的电路图接好。通过此次的设计,我发现遇到问题不能死钻,应该和老师同学主动交流,将问题解决的方法不是只有自己弄出来的才算是自己的,和他人共同将问题解决而自己把原理弄清楚,也是学习的进步;不放弃,也应该是我们要做的,在最困难的时候更应该坚持下去,想办法将问题顺利解决才是我们应该去做的。将开头做的好点的话,后面的工作要稍微轻松一点,最终的结果也才会是一个不错的结果。
做完设计之后发现学了一个学期的课程,在这次课程设计时,暴露出了很多自己不懂得知识,自己掌握的知识那么有限,在实际运用中更加无法将知识合理运用进去。平时我们都只是学习原理知识,对实践进行的很少。加上许多知识学了就忘,很难将知识连成一线加以利用。所以,实践是对我们帮助和提高的最佳方式,虽然实践时出现的问题让人郁闷,但这是提高的前提,需要通过实践来历练我们,检测我们的知识。实践环节对各方面都有提高,拓展我们多方面的思维。
第二篇:课程设计任务书-24交通灯控制电路设计
课程设计任务书
题目:交通灯控制电路设计
时间: 年 月 日—— 年 月 日
设计的说明:
本设计需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的1KHz时钟,黄灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz 脉冲,即每1s 中递减一次,在显示时间小于3 秒的时候,通车方向的黄灯以2Hz 的频率闪烁。系统中用S1 按键进行复位。
设计的任务和要求:
1、在十字路口的两个方向上各设一组红、绿、黄灯;初始状态是两个路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。
2、设置数码管显示允许通行或者禁止通行的时间,东西路和南北路的通车时间均设定为20s。数码管的时间总是显示为19、18、17……2、1、0、19、18……。在显示时间小于3 秒的时候,通车方向的黄灯闪烁。
3、当各条路中任意一条上出现特殊情况,如消防车、救护车或其他需要优先放行的车辆时,各方向上均是红灯亮。倒计时停止,且显示数字在闪烁。当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
4、要求对整体电路进行仿真,提供仿真波形图,并分析结果
5、硬件测试结果用照片的形式记录下来。
提高部分:编写能手动控制交通灯通行时间的交通灯控制器。
指导教师:
学生:
日期:
第三篇:交通灯控制电路设计自动化 数字电子技术课程设计
综 述
本次设计主要分为四个部分,第一部分:信号产生电路;第二部分:电子示电路;第三部分:倒计时设计,第四部分:交通灯及交通灯控制电路
在本次设计中采用555定时器产生CP=1Hz的脉冲信号,经过用741192设计的预置状态为59的60进制加计数器和预置状态为29的30进制计数器。并使进位位作为脉冲输出,实现5分频,然后用芯片74161和74139实现南北干道和支东西干道红,绿,黄色灯亮的时间控制,最后一部分的减计数器选用74193进行级联计数,译码器选用cc4511,本人主要设计减计数器及数码管显示倒计时部分
一、设计任务与要求
1.东西方向绿灯亮,南北方向红灯亮,时间30。2.东西方向与南北方向黄灯亮,时间5s。3.南北方向绿灯亮,东西方向红灯亮,时间60。
二、方案设计与论证
根据设计任务与要求,我们可以知道这个交通灯的设计是分南北干道和东西干道的,两个方面的时间是不同的,东西方向通行30s,南北方向60s,这就要求我们要有两个计数器,根据我自己的经验,东西方向通行30s完,倒计时数字显示器会显示到0,然后切换到南北方向通行60s完之后, 倒计时数字显示器也会显示到0之后然后切换到南北方向,这样如此循环,由于黄灯是当两个计数器倒计时到5时开始闪,我们就可以在这时发出一个脉冲然后一直保持到0,或者是接收0~5这段时间的脉冲都可以控黄灯只在到了这段时间才亮;方案:
交通灯控制原理图:
2.a 交通灯原理框图
首先由555定时器产生1s的信号脉冲,通过由一些1k电阻和三片74LS245,两片74LS192处理构成定时电路处理,产生时间输出信号作用电子显示器,另一部分的1s的信号脉冲通过由两片74LS112的JK触发器组成的路灯控制电路的对1s的信号处理,产生对交通路灯有控制作用的电子逻辑信号,从而实现按要求的对路灯的正常控制。
2三、单元电路设计
3.1时间脉冲产生电路
由 555 定时器和外接元件 R1、R2、C 构成多谐振荡器,脚 2 与脚 6 直接相连。电路没有稳态,仅存在两个暂稳态,电路亦不需要外接 触发信号,利用电源通过 R1、R2 向 C 充电,以及 C 通过 R2 向放电端 放电,使电路产生振荡。电容 C 在 和 之间充电和放电,从而在输出端得到一系列的矩形波,且通过调节参数,使得产生的矩形波为1hz的也就是周期为1s的脉冲发生电路。
3.1a 1s脉冲信号产生电路
3.2电子显示电路
一个LED数码管可用来显示一位0~9十进制数和一个小数点。小型数码管(0.5寸和0.36寸)每段发光二极管的正向压降,随显示光(通常为红、绿、黄、橙色)的颜色不同略有差别,通常约为2~2.5V,每个发光二极管的点亮电流在5~10mA。LED数码管要显示BCD码所表示的十进制数字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力。
3.2a BCD码显示电路
3.3计时器电路
计数器
倒计时计数电路主要由计数器构成,它在整个系统设计中的作用是实现计时计数,在此我们选用减法计数器,因为本设计说明时间可预置,所以需要可预置数的减计数器。目前,在实际工程应用中,我们已经很少使用小规模的触发器去拼接成各种计数器,而是直接选用集成计数器产品。3.3a 74LS192 74LS193引脚图
本次课程设计需要50进制和30进制减计数器各一个,所以采用两个74193级联计数,将表示个位的计数芯片借位端BO连接后一级的CPD即可进行级联计数,后一级输出为十位位。以下为设计中用到的50和30进制减计数器。以下为计数器的逻辑电路图:
3.3b 范围为49~0的50进制减计数器
3.3c计数范围为29~0的30进减制计数器
3.4交通灯控制电路与交通灯
3.4,1交通灯控制电路
交通信号灯转换器其实就是由计数进制转换器来实现,即一个JK触发器,其中J、K端都同时接高电平,即构成了一个T’触发器,目的就是实现翻转功能,其时钟输入端是由倒计时计数器中的两片74192的八个输出端经过一个或门然后经过一个非门接入。
3.4.1a 交通灯控制电路
3.4,2交通灯模拟电路
S0:没有打开电源的状态。S1:东西方向绿灯亮,南北方向红灯亮,时间30s。S0,S1,S2,S3中任一状态下打开电源会进入S1状态,数码管初始值为60。数码管最大显示为60,出现“0”的瞬间进入下一状态。(S2)S2:东西方向与南北方向黄灯亮,时间5s。
数码管最大显示为30,出现“0”的瞬间进入下一状态。S3:南北方向绿灯亮,东西 方向红灯亮,时间60s。数码管最大显示为60,出现“0”的瞬间进入下一状态。
3.4.2a 交通灯模拟电路
心得体会
经过一周的努力,我终于完成关于交通灯控制电路的电子课程设计,通过一周不断的查资料让我积累了许多实际操作经验,已初步掌握了数电的应用技术,以及数字电路的知识和有关器件的应用,我深刻体会到了数子电路技术对当今现代社会的重要作用。经过这次设计,我学会了许多东西,学会了严密的思考,构想及怎样把计划付诸于实际行动之中。同时与社会的不断高速发展的步伐相比,我认识到自己所学的知识和技能还远远不足,有些实际性的问题还不能够解决,缺少很多有实际运用价值的知识储备,缺乏应有的动手解决实际问题的能力,缺乏些高效利用及筛选大量资料的能力,缺乏资源共享及应有的团队合作精神,有待进一步提高,我应当学好自己的专业知识以适应不断发展的社会。
在这次课程设计中,我学会了如何有效的利用网络资源及图书馆的藏书,找到了几个很不错的专业网站,为以后的查阅专业方面的信息和相互之间的交流打下了坚实的基础,学会了如何看电路图,识别电路图,提高了自己的专业技能,同时也培养了自己独立解决实际问题的能力,也培养了自己认真和严谨的科学态度,收到了很大的启发,为以后的工作积累了些宝贵的经验。
参考文献
[1]高吉祥.数字电子技术.北京:电子工业出版社
[2]梁宗善.电子技术基础课程设计[M].武汉:华中理工大学出版社 [3]李玲远,范绿蓉,陈小宇.电子技术基础实验.北京:科学出版社 [4]彭介华.电子技术课程设计指导[M].北京:高等教育出版社 [5]康光华
电子技术基础(数电部分)华中理工大学电子学教研室
第四篇:交通灯控制逻辑电路设计与总结报告
交通灯控制逻辑电路设计与总结报告
一、设计任务
用CPLD设计路口交通灯控制器
二、设计要求
1、满足一下时序要求:南北方向红灯亮,东西方向绿灯亮;南北方向绿灯亮,东西方向红灯亮;
2、每一方向的红(绿)黄灯总共维持30秒;
3、十字路口要有时间显示,具体为:当某一方向绿灯亮时,置显示器为30秒,然后以每秒减一技术方式工作,直至减到数为4秒时,红绿灯熄灭,黄灯开始间隙闪耀4秒,减到0时,红绿灯交换,一次工作循环结束,进入下一步另一方向的工作循环;
4、红绿灯均采用发光二极管;
5、设计由晶振电路产生1Hz标准秒信号的单元电路(实际秒脉冲由开发箱提供);
6、要求对整体电路进行仿真,观察并记录下仿真波形;
7、选作部分:
a、手动调整和自动控制,夜间为黄灯闪耀;
b、白天黄灯亮时,以2Hz的速度闪烁点亮四秒; c、红绿灯循环点亮时间可以自由修改。
三、设计设备
含有Quartus软件的电脑一台,可下载的试验台;
四、设计方法
使用VHDL语言进行程序的设计运行和仿真,以及波形的运行仿真,最后进行下载仿真;
五、方案论证
方案1:把整个流程分成几个进程来做;
方案2:每个进程都使用if和case语句实现功能的实现; 方案3:使用状态机来实现状态间的转换;
方案论证:
1、要实现整个流程,需要做的输出内容类型不同,如果放在一个进程里面就比较容易混淆,产生混乱。而采用分成几个进程来做的方式就明确了每个模块的内容和分工,使其调理清晰,一目了然;
2、if语句是条件语句,是VHDL语言中常用的基本语句。该流程中的变量比较繁多,而使用case语句分情况列出来,简洁明了。
3、状态机的使用格式简洁,使用简单方便,特别是在进行状态的转换时候。并行的状态转换不易出错,可将状态转换、赋值、计数等多个功能封装在某一个状态中,并且更加便于为系统添加新的状态功能。
方案选定:
通过以上分析,确定用以上方案为本次设计的方案。
六、工作原理
先对所给时钟脉冲进行分频到标准时钟脉冲;设计两个时钟控制倒计时,倒计时的时间可自由修改,由输入决定;设计另一个时钟,用以控制白天与夜间模式的转换;在白天时,根据倒计时的数字进行红绿灯的状态转换;夜间时,红绿灯状态改为夜间模式:黄灯闪烁。
七、程序设计
------交通灯控制系统所使用的库和包
-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
-------------------------------交通灯控制系统的实体
-------------------------entity jt is
port(clk,reset:in std_logic;
------------------时钟脉冲clk由系统直接提供,需要进行分
频;reset是启动键,当reset为1是,系统启动
t0:integer range 0 to30;
------------------红绿灯循环点亮的时间,根据输入的不同
系统运行的不同
r1,y1,g1,r2,y2,g2:out std_logic;
------------------r1为东西方向红灯,y1为东西方
向黄灯,g1为东西方向绿灯;r2为南北方向红灯,y2为南北方向黄灯,g2为南北方向绿灯
ec0,ec1,nc0,nc1:out std_logic_vector(3 downto 0));
------------------ec0,ec1分别为东西方向的倒计时间的个位和十位;
nc0,nc1分别为南北方向的倒计时间的个位和十位
end jt;-------------------------------交通灯控制系统的结构体(5个进程)
-------------------------architecture one of jt is
type state_type is(s0,s1,s2,s3);
------------------定义状态的类型
signal state:state_type;
------------------使用状态机
signal k:std_logic;
------------------分频后的1Hz的标准时钟脉冲
signal c1,c2:integer range 0 to 30;
------------------定义东西、南北方向的两个
倒计时的计数
signal t1:integer range 0 to 3600;
signal t2:integer range 0 to 24;------------------定义一个时钟,用以控制白天与夜间模式 Begin------该进程用以分频
-------------------------q0:process(clk)
variable tt:std_logic_vector(9 downto 0);
------------------中间变量
begin
if clk'event and clk='1' then
if tt=“1111101000” then
----------------------把所给1kHz分频成1Hz的脉冲
k,10000分频,仿真值用“ 0000000100”八分频
tt:=(others=>'0');
k<='1';
else
tt:=tt+1;k<='0';
end if;
end if;end process q0;-------------------------
------该进程用以设计时钟
-------------------------q1:process(k,reset)
begin
if reset='1' then
------------------启动开关为1时,系统开始运行
t1<=0;t2<=0;
------------------从0点开始 elsif k='1' and k'event then if t1=3599 then
------------------一个t1循环是一个秒,仿真值用“35” if t2=23 then
-------------------一个t1循环是一个小时,一天24小时 t2<=0;
else t2<=t2+1;end if;t1<=0;else t1<=t1+1;end if;end if;end process q1;-------------------------------该进程用以控制白天黑天模式和红绿灯状态转换
-------------------------q2:process(k,reset,t2)
begin
if t2>=5 and t2<=22 then
-------------------白天模式5:00到22:00之间
if reset='1' then
-------------------启动开关为1时,系统开始运
行,进行状态转换
r1<='0';y1<='0';g1<='1';-------------------东西方向绿灯亮 r2<='1';y2<='0';g2<='0';-------------------南北方向红灯亮 state<=s0;-------------------红绿灯处于初始状态s0 c1<=t0;
c2<=t0;-------------------倒计时从自由输入值开始递减 elsif k='1' and k'event then
case state is
when s0=>-------------------当处于第1状态时,讨论
if c1=5 then
--------------由于进程内部的并列进
行,当倒计时第4秒时,进入到第2状态s1
state<=s1;
c1<=c1-1;
c2<=c2-1;
--------------倒计时递减
elsif c2=0 then
------------倒计时减到0时,再从
初始值开始
c1<=t0;
c2<=t0;
else
----------------否则继续保持第1状态s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
end if;
when s1=>-------------------当处于第2状态时,讨论
if c1=1 then--------------由于进程内部的并列进行,当
倒计时第t0秒时,进入到第3状态s2
state<=s2;
c1<=c1-1;
c2<=c2-1;
else----------------否则继续保持第2状态
state<=s1;
c1<=c1-1;
c2<=c2-1;
end if;
when s2=>-------------------当处于第3状态时,讨论
if c2=5 then--------------由于进程内部的并列进行,当倒计时第4秒时,进入到第4状态s3
state<=s3;
c1<=c1-1;
c2<=c2-1;
elsif c1=0 then
------------倒计时减到0时,再从初
始值开始
c1<=t0;
c2<=t0;
else
----------------否则继续保持第3状态
state<=s2;
c1<=c1-1;
c2<=c2-1;
end if;
when s3=>-------------------当处于第4状态时,讨论 if c2=1 then--------------由于进程内部的并列进行,当倒
计时第t0秒时,进入到第1状态s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
else----------------否则继续保持第4状态
state<=s3;
c1<=c1-1;
c2<=c2-1;
end if;
when others=> state<=s0;
end case;if state=s0 then
r1<='0';y1<='0';g1<='1';
r2<='1';y2<='0';g2<='0';elsif state=s1 then
r1<='0';g1<='0';
r2<='1';y2<='0';g2<='0';
if c1=4 or c1=2 then y1<='1';
else y1<='0';
end if;elsif state=s2 then
r1<='1';y1<='0';g1<='0';
r2<='0';y2<='0';g2<='1';elsif state=s3 then
r1<='1';y1<='0';g1<='0';
r2<='0';g2<='0';
if c2=4 or c2=2 then y2<='1';
else y2<='0';
end if;end if;
--各个状态的红绿灯变量的赋值,‘1’亮‘0’熄 end if;else-------------------夜间模式22:00到次日5:00之间
c2<=0;c1<=0;r1<='0';r2<='0';g1<='0';g2<='0';y1<=k;y2<=k----------------红绿灯的状态:脉冲k赋给黄灯变量,黄灯闪烁
end if;end process q2;-------------------------------该进程用于东西方向倒计时的译码显示
-------------------------q3:process(c1)
begin case c1 is when 0=>ec0<=“0000”;ec1<=“0000”;when 1=>ec0<=“0001”;ec1<=“0000”;when 2=>ec0<=“0010”;ec1<=“0000”;when 3=>ec0<=“0011”;ec1<=“0000”;when 4=>ec0<=“0100”;ec1<=“0000”;when 5=>ec0<=“0101”;ec1<=“0000”;when 6=>ec0<=“0110”;ec1<=“0000”;when 7=>ec0<=“1000”;ec1<=“0000”;when 9=>ec0<=“1001”;ec1<=“0000”;when 10=>ec0<=“0000”;ec1<=“0001”;when 11=>ec0<=“0001”;ec1<=“0001”;when 12=>ec0<=“0010”;ec1<=“0001”;when 13=>ec0<=“0011”;ec1<=“0001”;when 14=>ec0<=“0100”;ec1<=“0001”;when 15=>ec0<=“0101”;ec1<=“0001”;when 16=>ec0<=“0110”;ec1<=“0001”;when 17=>ec0<=“0111”;ec1<=“0001”;when 18=>ec0<=“1000”;ec1<=“0001”;when 19=>ec0<=“1001”;ec1<=“0001”;when 20=>ec0<=“0000”;ec1<=“0010”;when 21=>ec0<=“0001”;ec1<=“0010”;when 22=>ec0<=“0010”;ec1<=“0010”;when 23=>ec0<=“0011”;ec1<=“0010”;when 24=>ec0<=“0100”;ec1<=“0010”;when 25=>ec0<=“0101”;ec1<=“0010”;when 26=>ec0<=“0110”;ec1<=“0010”;when 27=>ec0<=“0111”;ec1<=“0010”;when 28=>ec0<=“1000”;ec1<=“0010”;when 29=>ec0<=“1001”;ec1<=“0010”;when 30=>ec0<=“0000”;ec1<=“0011”;----------------------------当在设定范围内时,分别为个位十位译码并显示
when others=>ec0<=“0000”;ec1<=“0000”;
-------------------------否则,LED灯显示0
end case;
end process q3;-------------------------------该进程用于南北方向倒计时的译码显示
-------------------------q4:process(c2)
begin
case c2 is when 0=>nc0<=“0000”;nc1<=“0000”;when 1=>nc0<=“0001”;nc1<=“0000”;when 2=>nc0<=“0010”;nc1<=“0000”;when 3=>nc0<=“0011”;nc1<=“0000”;when 4=>nc0<=“0100”;nc1<=“0000”;when 5=>nc0<=“0101”;nc1<=“0000”;when 6=>nc0<=“0110”;nc1<=“0000”;when 7=>nc0<=“0111”;nc1<=“0000”;when 8=>nc0<=“1000”;nc1<=“0000”;when 9=>nc0<=“1001”;nc1<=“0000”;when 10=>nc0<=“0000”;nc1<=“0001”;when 11=>nc0<=“0001”;nc1<=“0001”;when 12=>nc0<=“0010”;nc1<=“0001”;when 13=>nc0<=“0011”;nc1<=“0001”;when 14=>nc0<=“0100”;nc1<=“0001”;when 15=>nc0<=“0101”;nc1<=“0001”;when 16=>nc0<=“0110”;nc1<=“0001”;when 17=>nc0<=“0111”;nc1<=“0001”;when 18=>nc0<=“1000”;nc1<=“0001”;when 19=>nc0<=“1001”;nc1<=“0001”;when 20=>nc0<=“0000”;nc1<=“0010”;when 21=>nc0<=“0001”;nc1<=“0010”;when 22=>nc0<=“0010”;nc1<=“0010”;when 23=>nc0<=“0011”;nc1<=“0010”;when 24=>nc0<=“0100”;nc1<=“0010”;when 25=>nc0<=“0101”;nc1<=“0010”;when 26=>nc0<=“0110”;nc1<=“0010”;when 27=>nc0<=“0111”;nc1<=“0010”;when 28=>nc0<=“1000”;nc1<=“0010”;when 29=>nc0<=“1001”;nc1<=“0010”;when 30=>nc0<=“0000”;nc1<=“0011”;---------------------------当在设定范围内时,分别为个位十位译码并显示
when others=>nc0<=“0000”;nc1<=“0000”;
end process q4;-------------------------end architecture one;
----所有进程结束-------------------------
八、仿真结果
1、clk为输入脉冲;开始令reset为’1’,启动系统,系统正常工作后值为’0; t0为红绿灯循环时间,可自由修改,如果输入值为’0010000’,则为16秒倒计时。如下图:系统从0点开始运行,处于夜间模式时,倒计时都为“00”,两个方向都为黄灯闪烁,红绿灯都熄灭。
---------------------------否则,LED灯显示0
end case;2、5:00之后,进入到白天模式:从第1状态(东西方向绿灯亮、南北方向红灯)开始,倒计时从16秒开始递减。倒计时第4秒后进入第2 状态(东西方向黄灯闪烁,南北方向红灯亮)。
3、倒计时第0秒后进入第3 状态(东西方向红灯亮,南北方向绿灯亮),倒计时再从16秒开始递减;倒计时第4秒后进入第4 状态(东西方向红灯亮,南北方向黄灯闪烁);倒计时第0秒后进入第1 状态(东西方向绿灯亮,南北方向红灯亮),倒计时再从16秒开始递减
。如此循环。
4、当计时器到22:00时,再次进入夜间模式:东西南北方向黄灯闪烁;到次日5:00时又回到白天模式。如此循环。
九、讨论与改进
特点:
1、在整个设计过程中,分进程实现整个功能,简单明了;
2、状态机的功能和优点得到了较为完整的体现;
3、分夜间和白天模式不同,系统自动调节;
4、黄灯以闪烁的形式亮;系统运行后红绿灯循环点亮的时间也可自由修改。不足:
1、整个系统启动后从夜间0点开始运行,而不能随意调为哪个时间的交通灯状态,只能从程序中改,不能手动调节;
2、整个功能还是比较简单,未能分左右转和直行的情况;
3、紧急情况处理时也无特殊处理的设置。
改进:
1、在进程中可增加一个输入量,用以控制系统的时钟时间,方便调节模式和交通灯状态;
2、在进程中可加入几个红绿灯状态来分别控制东西方向和南北方向的左转、右转和直行的红绿灯状态;
3、在原有程序的基础上,可通过增加一个输入量来控制一种特殊状态,用以控制特殊情况的处理,视该特殊情况而定。
二○一○年九月三日
第五篇:基于FPGA的交通灯控制电路设计
基于FPGA的交通灯控制电路设计
关键字: 交通信号机 FPGA 脉冲发生器
目前交通灯广泛应用于道路交通建设中。本文设计一个十字路口交通灯控制电路,要求东西、南北两条干道的红、绿、黄交通灯按要求循环变化,并以倒计时方式指示干道通行或禁止的维持时间。在QuartusⅡ软件环境中设计、仿真,并在FPGA实验板上实现所设计电路的功能。
系统概述
1.1 设计思想
基于FPGA的交通灯系统控制设计包括4大模块,分别为脉冲发生、状态定时、交通灯闪烁的控制、闪烁时间的控制,基本原理如图1所示。
1.2 总体工作情况
交通灯控制要求如表1所示。
该设计的交通灯控制分为6个状态。由于各状态持续时间不同,所以电路的核心控制部分是状态机和定时器,状态机在定时器触发下周期性循环,状态码控制6个灯以一定的规律变化。变化情况如图2所示。
系统脉冲由FPGA开发板晶振经过分频电路实现。状态定时由74190可逆十进制计数器和T’触发器实现,只要置数合理,翻转信号到位,就可以使电路在东西(I)、南北(J)两个控制状态间翻转。红、黄、绿灯的闪烁由7485数字比较器和组合逻辑控制,其中7485数字比较器用于比较计数器当前持续状态和所需要的状态全部时间,并做出相应的变化。组合逻辑控制由AHDL文件编写真值表实现。时间显示由AHDL文件编写真值表实现,输入正确的逻辑,七段译码电路即能得到正确的时间显示。
1.3 各功能的组成
整个电路可以分为4大部分,包括脉冲发生、状态定时、时间显示和数字比较一组合逻辑控制。
1.3.1 脉冲发生
脉冲发生器为整个系统提供驱动,将输入端分配给FPGA实验板的PIN55引脚,则会由实验板上产生频率为10 MHz的输入脉冲,用7片7490,每一级都构成10分频电路,使频率从10 MHz降低为1Hz。
1.3.2 状态定时
状态定时可由预置BCD码初值的74190级联实现,构成减计数器。级联原则是:低位计数器从全0状态变为最大码值状态时可使高位计数器减1。级联方式分为异步和同步两种,本文采取的是异步级联方式,即低位计数器溢出信号控制高位计数器的记数脉冲输入端。可根据计数器的时钟触发方式,在低位计数器状态码从全“0”变为最大码值的瞬间,为高位计数器提供有效的计数脉冲边沿。具体做法是将低片位的溢出信号RCON端口接到高片位的计数脉冲CLK,实现两位BCD码的置数、翻转和借位,使系统表示的数字能在22~16之间循环。
74190功能说明:
(1)GN为计数器使能控制端,低电平有效。当GN为高电平时,禁止计数。
(2)DNUP为计数方式控制,接高电平为减计数,接低电平为加计数。
(3)LDN为异步预置数控制。当LDN为低电平时,计数器状态QD,QC,QB,QA分别等于D,C,B,A。
(4)计数器位序由高至低顺序为QD,QC,QB,QA。QD为最高位MSB,QA为最低位LSB。
(5)计数脉冲CLK上升沿有效。
(6)当计数器输出QDQCQBQA为十进制加计数的最大状态码“1001”或为减计数的最小状态码全“0”时,极值状态码指示MAX/MIN输出为高电平。
(7)当极值状态码指示MAX/MIN为高电平且CLK为低电平时,溢出信号RCON为低电平,即RCON与计数脉冲同步。
系统记数脉冲为1 Hz时,如表2所示,当I状态(东西控制状态)的定时时间为22 s,计数器应该先预置22的BCD码;同理,J状态(南北控制状态)之前应该预置16的BCD码。
状态计时电路由两片74190级联而成,构成22和16自翻转的电路。其要解决的核心问题包括置数,翻转和借位。根据74190芯片的特点,可分析其实现原理如图4所示,通过溢出信号RCON的上升沿实现借位,使得数字能够从20到19,个位向十位借位,顺利过渡。
置数和翻转之间有先后关系,即须先置数后翻转。如表3所示,分析两个BCD码各位特点,可知两者D7D6D3D0位均为1,D1位均为0,而D5D4D2位不同,如图5,D5D4D2位由状态电平S来控制,当为I状态时,计数器的预置的数为D5=0,D4=D2=1,而为J状态时,计数器的预置的数为D5=1,D4=D2=0,根据74190的功能,将2片74190的MAX/MIN引出,通过与非门,分别连在高位和低位的LDN置数端,通过分析可知,当计数器从01减到00时候,高低位的MAX/MIN均为高电平,经过与非门以后为低电平,74190被置数,其置数值由状态S来决定,S是由LDN端信号经过一个T’触发器决定的,即LDN信号每置数一次,S翻转1次,从而区分16和22状态。按这个结构,可分别置数16和22,使其实现自翻转。
图5为状态定时模块的实际连接图。
1.3.3 时间显示
时间显示要用到7段显示译码电路,由于是两位BCD码,故用二选一数据选择器。选择端S接一个频率很高的方波(如1 kHz);数据比较器的输出和1 Hz脉冲作为AHDL模块的输入,即可正确显示时间。
为正确显示时间,用AHDL文件自编译码真值表如下:
1.3.4 数字比较一组合逻辑控制
该模块将状态定时模块输出的时间与时间节点进行比较,从而确定电路处于22 s或者16 s的具体的某个状态。由表1可知,东西(I)或南北(J)的控制状态都有3个阶段的控制逻辑,分别对应3个时间段:1~3 s,4~6 s和大于6 s,因此,采用数字比较器进行比较,确定定时值小于4 s或大于6 s,方法如图7所示,采用4片7485数字比较器,两两级联,其中一个由状态定时模块的输出与4即二进制0100比较;另一个由状态定时模块的输出与6即二进制0110比较。
编写组合逻辑真值表,将状态信号S,两个数字比较器的输出Y1,Y2和1 Hz脉冲作为输入,各个灯的状态作为输出。从而根据逻辑关系得出对应时间电路的状态,控制红、黄、绿灯处于不同的状态。S判断电路处于22 s状态还是16 s状态,Y1,Y2区分东西、南北六个阶段状态,1 Hz脉冲实现绿灯闪烁。电路的组构与调试
来用QuartusⅡ软件设计各个模块,并进行仿真。确认结果后,下载至FPGA实验板中,进行相应的硬件调试,调试结果与仿真结果相一致。图8为仿真波形,系统上电需要调整的过程,因此电路正常工作前重复了22s的状态。