这是一个数电实验,交通灯,如果使用FPGA或者单片机来完成的话,会简单很多,这里采用的是使用常规的计数器,触发器,门电路等基本器件搭建,扩展部分可以完成总通行时间在100s内任意设置,红、黄、绿灯亮的时间长短之和在100s内任意设置,其实想要超过100s只需要扩展相应的计数器,以及门电路即可,限制功能的往往是资源;
为了确保十字路口的车辆顺利、畅通地通过,往往都采用自动控制的交通信号灯来进行指挥。其中红灯(R)亮表示该条道路禁止通行;黄灯(Y)亮表示停车;绿灯(G)亮表示允许通行。
1.2.1、 要求东西方向的红、黄、绿灯和南北方向的红、黄、绿灯按照上面的工作时序进行工作,黄灯亮时应为闪烁状态;
(1)南北和东西车辆交替进行,各通行时间24秒
(2)每次绿灯变红灯时,黄灯先闪烁4秒,才可以变换运行方向 。
(3)十字路口要有数字显示作为时间提示,以倒计时按照时序要求进行显示;具体为:当某方向绿灯亮时,置显示器为某值,然后以每秒减1计数方式工作,直至减到数为“0”,十字路口红、绿等交换,一次工作循环结束,而进入下一步某方向的工作循环。
(4)可以手动调整和自动控制,夜间为黄灯闪耀状态。
1.2.2、 在完成上述任务后,可以对电路进行电路改进或扩展。(选作:通行时间和黄灯闪亮时间可以在0-99秒内任意设定)。
交通灯控制系统的原理框图如上图所示。主要由秒脉冲发生器、计数器模块、译码显示模块、状态转换模块、译码模块等部分组成。秒脉冲发生器是该系统中计数器模块、状态转换的标准时钟信号源,计数器模块主要为状态转换模块提供两个转换信号,译码显示模块将计数器的计数状态译码并通过数码管进行显示,状态转换模块是系统的主要部分,由它控制红绿灯四个状态之间的转换,译码模块将状态转换模块所处状态进行译码,并驱动红绿灯进行状态显示;
TL:表示东西方向或南北方向绿灯亮的时间间隔为20秒,定时时间到,TL=1,否则,TL=0。
TR:表示东西方向或南北方向红灯亮的时间间隔为24秒。定时时间到,TR=1,否则,TR=0。
两方向车道的交通灯的运行状态共有4种,如下图所示:
交通灯以上4种工作状态的转换是由状态转换模块进行控制的。设四种状态编码为00、01、11、10,并分别用S0、S1、S2、S3表示,则状态转换模块工作状态及其功能如下表所示:
状态转换模块状态 | 信号灯状态 | 车道运行状态 |
---|---|---|
S0(00) | 南北绿灯亮,东西红灯亮 | 南北车道通行,东西车道禁止通行 |
S1(01) | 南北黄灯亮,东西红灯亮 | 南北车道停车,东西车道禁止通行 |
S2(11) | 南北红灯亮,东西绿灯亮 | 南北车道禁止通行,东西车道通行 |
S3(10) | 南北红灯亮,东西黄灯亮 | 南北车道禁止通行,东西车道停车 |
译码模块将状态转换模块当前状态进行译码,驱动相应车道的红、黄、绿灯;为简便起见,把灯的代号和灯的驱动信号合二为一,并作如下规定:
由此得到交通灯状态转换模块的ASM图,如图下所示。设状态转换模块的初始状态为S0,当S0的持续时间小于20秒时,TL=0,其状态保持不变。只有当S0的持续时间等于20秒时,TL=1,跳转到S1,此时当S1持续时间小于4秒时,TR=0,其状态保持不变,只有当持续时间等于4秒,TR=1时,状态跳转到S2,持续20秒之后满足条件又转换到S3;持续4秒后跳转到S0;
秒脉冲发生器由555定时器构成的多谐振荡器产生,振荡频率为 f = 1.43 ( R 1 + 2 ∗ R 2 ) C = 1.43 ∗ 1 0 6 ( 1000 + 2 ∗ 1000 ) ∗ 470 ) = 1.014 H Z f=\frac{1.43}{(R_1+2*R_2)C} =\frac{1.43*10^6}{(1000+2*1000)*470)} =1.014HZ f=(R1+2∗R2)C1.43=(1000+2∗1000)∗470)1.43∗106=1.014HZ
因这译码显示模块依赖计数器模块较大,故将两个模块合并在一起叙述,模块如下图计数器模块及译码显示模块所示:
由两片74LS192构成24进制异步计数器,74LS192为异步置数计数器,要求采用倒计时计数,所以预置数设置为24,用低位74LS192芯片的借位端BO驱动高位 74LS192的减计数时钟端DOWN,完成芯片之间的级联。当两片74LS192芯片的借位端BO都有效时,对两片74LS192芯片进行置数,即 L O A D ′ = ( B O 0 ∗ B O 1 ) ′ = ( ( B O 0 ′ ) ′ ∗ ( B O 1 ′ ) ′ ) ′ LOAD'=(BO_0*BO_1)'=((BO_0')'*(BO_1')')' LOAD′=(BO0∗BO1)′=((BO0′)′∗(BO1′)′)′,减计数端DOWN接秒脉冲模块输出信号,加计数端UP接高电平,置零端CLR置零;
引出TL和TR信号,按照题意应该在计数器倒计时到4(从24开始的倒计时,故此时为20秒)时引出TL信号,计数器倒计时到0(24秒)时引出TR信号,但是由图3总电路图知,红、黄、绿信号灯模块与计数器模块之间有两级D触发器模块,故红、黄、绿信号灯模块比计数器模块输出信号延后两个时钟周期,为了让计数器计数到4(20秒)或者0(24秒)时,相应的红、黄、绿信号灯实现状态转换,就需要把产生TL信号和TR信号的时间提前两个时钟周期,故图中在计数器计数到6(18秒)时引出TL信号,计数到2(22秒)时引出TR信号;
此处加一级D触发器是为了消除前面组合逻辑电路因竞争冒险产生的尖峰信号对后面状态转换所引起的干扰;例如由于产生TL信号的与非门之前电路的差异,时间延迟也不同;Q0经过一级反相器和一级与门,而Q1经过一级与门,Q2没有经过门电路;当计数器低位74LS192芯片输出信号由1000变为0111时,Q2与Q1必然先变为高电平,而此时Q0还处于低电平,出现0110使TL产生尖峰脉冲,而这个脉冲是错误的,因为此时计数器计数状态处于8到7之间,并没有计数到6,所以我们要避免这种类似的错误;故加一级触发器去消除这个尖峰,由于边沿触发器只有在时钟边沿时才有效,即使前面组合电路产生尖峰信号,这个尖峰信号由于组合电路存在时间延迟,必然晚于时钟边沿到达,早于下一个时钟边沿到达(因为此电路时钟周期为1秒,而一级门电路的延迟时间在纳秒到微秒级别),此时触发器输出不受输入信号的影响,达到消除尖峰信号的目的;
译码显示模块功能是将计数器的计数状态进行显示,由两片74LS48显示译码器,两个共阴极七段数码管,14个限流电阻组成;译码器输入端与计数器输出端对应连接即可,本设计不使用译码器的控制端,故均接高电平;
状态转换模块是交通管理的核心,它能够按照交通管理规则控制信号灯工作状态的转换。从ASM图可以列出状态转换模块的状态转换表,如下表所示。选用两个D触发器作为时序寄存器产生4种状态,状态转换模块状态转换的条件为TL和TR,当状态转换模块处于Q1nQ0n= 00状态时,如果TL= 0,则状态转换模块保持在00状态;如果TL=1,则状态转换模块的状态转换到Q1n+1Q0n+1= 01状态。这两种情况与条件TR无关,所以用无关项"X"表示。其余情况依次类推。
现态 | 现态 | 状态转换条件 | 状态转换条件 | 次态 | 次态 |
---|---|---|---|---|---|
Q1n | Q0n | TL | TR | Q1n+1 | Q0n+1 |
0 | 0 | 0 | X | 0 | 0 |
0 | 0 | 1 | X | 0 | 1 |
0 | 1 | X | 0 | 0 | 1 |
0 | 1 | X | 1 | 1 | 1 |
1 | 1 | 0 | X | 1 | 1 |
1 | 1 | 1 | X | 1 | 0 |
1 | 0 | X | 0 | 1 | 0 |
1 | 0 | X | 1 | 0 | 0 |
根据上表可以推出状态方程,其方法是:将Q1n+1、Q0n+1为1的项所对应的输人和状态转换条件变量相与,其中"1"用原变量表示,"0"用反变量表示,然后将各与项相或,即可得到下面的方程:
根据以上方程,选用数据选择器74LS153 来实现每个D触发器的输入函数,将触发器的现态值加到74LS153 的数据选择输入端作为控制信号。即可实现状态转换模块的功能。状态转换模块原理图如下图所示。由一片双四选一数据选择器74LS153和两个D触发器74LS74组成状态转换模块。触发器记录4种状态,数据选择器与触发器配合实现4种状态的相互交换。电路逻辑图如下:
其原理为:两个D触发器的置零以及置一端无效,故CLR和IPR均接高电平。时钟信号端CLK接秒脉冲发生器的输出端,数据选择器的输出端分别接D触发器的输入端,Y1接输出为信号的触发器的输入端,Y2接输出为的触发器的输入端。因为
所以数据选择器的地址端B接Q1n,地址端A接Q0n。输出为Y1的D触发器的数据端C0接地,C1接TR,C2接TR反,C3接高电平VCC。输出为Y2的D触发器的数据端C0接TL,C1接高电平VCC,C2接地,C3接TL反。数据选择器的使能端均有效,故1G,2G接低。如上图所示:74LS74两个D触发器作为时序寄存器产生4种状态。选用数据选择器74LS153来实现每个D触发器的输入函数,将触发器的的现态值加到74LS153的数据选择端作为控制信号,即可实现状态转换模块的功能。
译码器的主要任务是将控制器的输出Q1、Q0 的4种工作状态,翻译成南北、东西车道上红、黄、绿三种信号灯的工作状态。状态转换模块的状态编码与信号灯控制信号之间的关系如下表所示。
现态 | 现态 | 南北绿灯 | 南北黄灯 | 南北红灯 | 东西绿灯 | 东西黄灯 | 东西红灯 |
---|---|---|---|---|---|---|---|
Q1n | Q0n | AG | AY | AR | BG | BY | BR |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
根据上表可以得到各路信号灯的控制信号表达式如下:
南北方向车道绿灯:
南北方向车道黄灯:
南北方向车道红灯:
东西方向车道绿灯:
南北方向车道黄灯:
南北方向车道红灯:
将(Q1n反)和(Q0n反)通过与门连接在南北方向的绿灯上,Q1n和(Q0n反)通过与门连接在南北方向的黄灯上,Q0n直接连接在南北方向的红灯上,Q1n和Q0n通过与门连接在东西方向的绿灯上,(Q1n反)和(Q0n反)通过与门连接在东西方向的黄灯上,(Q0n反)直接连接在东西方向的红灯上;即可完成对状态的译码;译码模块如下图所示。
自动控制黄灯闪烁:单刀双掷开关S1向上闭合连接时钟信号时,通过时钟信号的高低电平和
相与得到南北方向黄灯的闪烁状态,通过时钟信号的高低电平和
相与得到东西方向黄灯的闪烁状态;
黄灯不闪烁:只需要将S1向下闭合,S2断开即可;如下图所示:
要求:通行时间和黄灯闪亮时间可以在0-99秒内任意设定;
通行时间即绿灯时间和黄灯闪亮时间可以调节,说明红灯的时间可以调节,可以利用已知的绿灯以及黄灯的时间推出红灯亮的时间;红灯亮的时间等于绿灯亮的时间加上黄灯闪亮的时间;在计数器的置数端用开关控制输入,即可对红灯亮的时间长短进行调节,如果红灯亮的时间为60秒,则从左到右开关的状态应为关、开、开、关,关、关、关、关。如下图所示;
红灯亮的时间(黄灯亮的时间加绿灯亮的时间)已经由上图装置设定,要分别设置绿灯和黄灯亮的时间,只需要一个点把红灯亮的时间分成两段时间就行了,因为TR信号都是在计数器计数到2时产生的,所以控制绿灯以及黄灯亮的时间只需要控制TL信号即可,要想让TL能够在0到99之间变化,就必须通过八个非门对计数器输出的八个信号进行取反,通过单刀双掷开关对计数器八位输出的原变量和反变量进行选择,之后八个信号每两个通过一个与门,即需要四个与门,最后再将这四个与门用一个四输入的与非门连接,在通过反相器后,输出便是TL;如下图所示。例如绿灯亮50秒,黄灯闪亮10秒,由图11设置红灯亮60秒,计数器从60秒开始倒计时,那么当倒计时到10秒时,黄灯就应该开始闪亮,似乎TL就设置为10(50秒)时有效,但是由于后面两级触发器的延时,此处设置应为12(48秒);延迟两秒后,数码管显示10时,黄灯才能正常闪烁;假设此处单刀双掷开关向上掷为开,向下为关;那么设置TL在12时有效时,从上至下开关状态为关、关、关、开,关、关、开、关,便可以实现绿灯亮50秒,数码管显示10时,黄灯开始闪亮,直到数码管示数0;
基本电路默认把通行时间设为24秒,南北方向车道方向绿灯亮,东西方向车道的红灯亮。数码管从预置的24秒,以每秒减1,减到数码管示数为4时,南北方向的绿灯转换为黄灯,其余灯都不变。数码管示数减到0后时南北方向的黄灯转换为红灯;东西方向的红灯转换为绿灯。如此循环下去。并且在数码管示数由8变为7的时候,TL反相器后的指示灯会闪亮一下,说明组合电路产生的尖峰脉冲确实存在,而第一级触发器后面TL的指示灯并不会闪亮,这也说明D触发器能够消除前面组合电路产生的尖峰脉冲对后面电路的影响;
扩展电路将红灯亮的时间设置为74;上图从左到右开关状态依次设置为关、开、开、开,关、开、关、关完成74的设置,绿灯亮51秒,黄灯亮23秒,则TL有效信号为25,所以上图的开关从上至下依次设置为上、上、下、上,上、下、上、下;开始仿真后;数码管从预置的74秒,以每秒减1,减数码管示数为23时,南北方向的绿灯转换为黄灯,其余灯都不变。数码管示数减到0后时南北方向的黄灯转换为红灯;东西方向的红灯转换为绿灯。如此循环下去。
阎石,王红.数字电子技术基础.5版.北京:清华大学出版社,2005.
关注公众号数字站回复 “交通灯multisim ” 获取工程源文件。