基于复杂可编程逻辑器件的交通灯控制电路设计方案.docx
《基于复杂可编程逻辑器件的交通灯控制电路设计方案.docx》由会员分享,可在线阅读,更多相关《基于复杂可编程逻辑器件的交通灯控制电路设计方案.docx(27页珍藏版)》请在冰豆网上搜索。
基于复杂可编程逻辑器件的交通灯控制电路设计方案
基于复杂可编程逻辑器件的交通灯控制电路设计方案
6.1数字系统设计的过程
数字电路与系统由于其所实现的功能不同、应用目的不同,从而使得它们内部的电路结构存在着很大的差异。
数字电路与系统虽然千差万别,但是它们之间也存在着许许多多的相同之处。
各种数字电路与系统之间的最大相同点是它们的设计过程。
对于一个应用电子系统,这个设计过程包括:
设计目的和技术指标的理解、设计方案的确定、系统的分解、单元电路设计、系统连调、测量数据的分析以及设计总结。
通常还需要向用户提供使用手册或者设计报告。
使用手册和设计报告之间的区别为前者的撰写重点为如何使用和维护系统;后者的重点是向用户介绍系统的技术特点。
在大学里,学生需要参加一系列的实践教学活动,例如各种实验、课程设计以及毕业设计等。
这些实践教学结束以后,学生需要提交相应的报告。
需要注意的是设计报告与实验报告的格式不同,其中的原因是实验是验证性的,通常会向学生提供实验电路、实验步骤和测量要求;后者只向学生提供设计要求,完成的具体过程由学生自己制定。
课程设计和毕业设计报告的格式与数字系统的设计报告格式相似。
这种报告的格式之一就是按照设计过程来撰写。
通过撰写设计报告加深对设计过程的理解和掌握,这点对一个学生来说更为重要。
按照上述想法,设计报告应包括以下部分:
引言、方案论证、系统设计、单元电路设计、系统连调和数据分析、设计总结、附录、参考文献。
引言部分描述设计目的。
本章设计的交通灯控制电路虽然也具有一定使用价值,但是这里的主要目的是通过设计过程学习如何把课本知识用于具体设计,即完成理论和实际的结合。
鉴于这里已经明确地说明设计目的,本章的后面内容将不涉及这部分。
实现某一种系统功能或者技术指标具有多种可行的设计方案,每一种设计方案都具有它自己的优点和缺点。
不存在一种最好的设计方案,只有最佳的设计方案。
方案论证的过程是一个折中的过程,设计者需要在所能实现的系统功能、技术指标的精度、成本和所需要的技术条件的支持等方面进行权衡。
方案论证体现了设计者知识面的宽度。
系统设计的目的是使复杂问题简单化。
通过系统设计这个过程,设计者可以把数字系统划分成一系列电路模块。
每个电路模块实现一种独立的功能,这样不仅可以简化系统的设计,而且方便多个设计者合作完成设计工作。
对于一个刚开始学习设计数字系统的学生,数字系统应该分解成在教材中学习过的基本电路,这样也可以进一步理解理论知识。
单元电路设计是在系统设计的基础上,把具体要求变为实际的电路,并实现所要求的功能和技术指标。
如果单元电路对应教材中学习过的基本电路,这时所进行的步骤将与当时进行分析的步骤相反,即利用课本知识支持实际需要,又加深对以前知识的理解。
系统连调是在单元电路设计完成的基础上,把分离的单元电路连接成完整的系统,并对其进行测量。
经常出现的情况是单元电路工作正常,但是它们连接在一起却不能正常工作。
这时的调试重点应放在电路之间的接口上,从信号的传输速率和带载能力两个方面来检查。
像交通灯控制电路这样的低速系统,主要问题是带载能力,例如当一个芯片驱动多个负载将使得输出信号电压下降,当输出高电平低于器件的最低高电平,后级电路工作将受影响。
交通灯控制电路的设计为功能设计,没有涉及具体的性能技术指标。
实际设计中将涉及许多具体的性能技术指标,需要测量这些技术指标,并对测量数据进行分析,评估是否达到系统的设计要求,在下一章中将涉及这部分内容。
设计总结包括设计特点,改进潜力等内容。
如前所述,实现某一种系统功能或者技术指标具有多种可行的设计方案,每一种设计方案都具有它自己的优点和缺点。
结合本次设计过程,再次对设计方案进行考虑,不仅便于产品性能升级,而且有助于提高设计者的能力。
这也符合从理论到实践,再从实践到理论的认识问题的循环过程。
附录用于给出在正文中不便列出的技术资料,例如原理电路图、源程序清单等内容。
6.2方案论证
6.2.1设计要求
设计一个交通灯控制电路,设计要求如下:
*系统需要控制东西和南北方向的两个路口,每个方向的路口都有红、黄和绿3个指示灯
*每个方向的路口都有通行/等待时间显示
*东西方向路口通行时间为8s,南北方向路口通行时间为18s,每个路口从通行到禁止都具有2s的时间间隔
*系统自己产生所需要的时钟信号
6.2.2设计要求的真值表描述
在《数字电路逻辑设计》课程中介绍的数字电路描述方法包括真值表、布尔表达式、逻辑电路图、时序图等。
进行电路设计时,通常首先根据设计要求写出真值表,再由真值表写出布尔表达式。
如果使用与门、或门和非门这样的基本逻辑门实现系统的逻辑功能,则由布尔表达式就可以直接画出对应的电路图。
由此可以看出,真值表是设计要求与电路实现之间的桥梁。
满足上面设计要求的交通灯控制电路真值表如表6-1所示。
表6-1所示的真值表完整地反映出所要求的交通灯控制电路的功能,因此该电路可以完全由数字器件来实现。
表中的30个工作状态可以由时序电路产生,时序电路可以由系统时钟来控制。
工作状态信号到交通灯控制信号的生成以及到时间显示电路控制信号的生成可以由组合电路实现。
所要设计的交通灯控制电路如果由标准逻辑器件来实现,工作状态的产生可以使用计数器芯片,例如74161;组合电路部分可以由基本的门电路实现,也可以使用中规模逻辑器件,例如时间显示部分可以采用BCD码到7段共阳极数码管显示代码的译码芯片7447。
如前所述,由于用户无法修改标准逻辑器件的功能,所制作的电路不具有通用性。
如果用户提出不同的要求,例如不同的道路通行时间,修改系统设计必须通过对电路重新设计和组装来实现。
一般希望设计的交通灯控制电路在满足不同要求时,不需要重新设计电路板,因此这里不考虑使用标准逻辑器件。
表6-1交通灯控制电路真值表
工作
状态
东西方向
南北方向
绿
黄
红
时间显示
绿
黄
红
时间显示
0
1
0
0
08
0
0
1
10
1
1
0
0
07
0
0
1
09
2
1
0
0
06
0
0
1
08
3
1
0
0
05
0
0
1
07
4
1
0
0
04
0
0
1
06
5
1
0
0
03
0
0
1
05
6
1
0
0
02
0
0
1
04
7
1
0
0
01
0
0
1
03
8
0
1
0
02
0
0
1
02
9
0
1
0
01
0
0
1
01
10
0
0
1
20
1
0
0
18
11
0
0
1
19
1
0
0
17
12
0
0
1
18
1
0
0
16
13
0
0
1
17
1
0
0
15
14
0
0
1
16
1
0
0
14
15
0
0
1
15
1
0
0
13
16
0
0
1
14
1
0
0
12
17
0
0
1
13
1
0
0
11
18
0
0
1
12
1
0
0
10
19
0
0
1
11
1
0
0
09
20
0
0
1
10
1
0
0
08
21
0
0
1
09
1
0
0
07
22
0
0
1
08
1
0
0
06
23
0
0
1
07
1
0
0
05
24
0
0
1
06
1
0
0
04
25
0
0
1
05
1
0
0
03
26
0
0
1
04
1
0
0
02
27
0
0
1
03
1
0
0
01
28
0
0
1
02
0
1
0
02
29
0
0
1
01
0
1
0
01
虽然这里不使用标准逻辑器件实现电路功能,但是《数字电路逻辑设计》课程中介绍的方法仍然可以使用,例如按照电路当前状态是否与以前状态相关,电路可以被划分为时序电路和组合电路。
6.2.3基于微控制器的交通灯控制电路设计
交通灯控制电路的每个状态的持续时间达1s,因此系统对所用器件在工作速度方面几乎没有要求。
使用微控制器芯片,例如Intel公司的MCS51系列芯片,实现这个系统将是非常容易的。
MCS51系列兼容芯片AT89S51的最小应用系统电路如图6-1所示。
图6-1AT89S51单片机最小应用系统电路
在图6-1中,电容C2、C3、晶体CRY和器件内部的有源电路构成时钟产生电路,用来产生系统工作所需要的稳定时钟信号。
电容C1和电阻R1构成复位电路。
管脚
/VPP(管脚31)接高电平用来选择AT89S51芯片的内部程序存储器。
电容C4和C5组成电源滤波电路。
AT89S51芯片具有4个8位并行输入/输出口P0、P1、P2和P3,共可提供32个输入/输出管脚,同时还有许多方法对输入/输出管脚进行扩展,这些输入/输出管脚可以用来控制交通信号灯或者时间显示器件。
微控制器芯片的工作是在时钟信号的控制下,按照所编写程序的逻辑关系从程序存储器中逐条读出指令,并执行。
在时钟信号的控制下,逐条执行指令这个过程提供了产生时序电路功能的另一种方法。
执行下面程序语句:
MOVP1,#data
将可以把真值表中指定状态对应的输出控制信号送出。
如果P1口的8个管脚与8段数码管的8个管脚连接,#data为显示代码就可以实现数据显示。
执行上面语句需要2个机器时钟周期。
AT89S51的机器时钟频率为系统时钟频率的1/12,对于图6-1所示电路,由于系统时钟频率为12MHz,机器时钟频率为1MHz,执行上面语句仅需2us。
2us的时间间隔对交通灯控制电路这样的数字系统显得太快了,这个问题可以通过在每个状态之间插入实现延时的语句来克服。
AT89S51芯片具有4k字节的片内程序存储空间,它足够交通灯控制电路的需要,不需要扩展程序存储器。
再有,这款芯片的市场价格仅为5元人民币左右,使得基于微控制器的交通灯控制电路设计方案具有价格优势。
6.2.4基于可编程逻辑器件的交通灯控制电路设计
可编程逻辑器件,包括复杂可编程逻辑器件(CPLD)和现场可编程门阵列器件(FPGA),内部的与或门阵列或者查找表提供了实现如表6-1所示的交通灯控制电路真值表中从状态信号到交通灯信号和时间信号转换的逻辑资源;内部的触发器提供了在系统时钟的控制下产生状态信号的逻辑资源。
本设计需要输出6个交通灯控制信号,4个8段数码管在不考虑使用小数点的情况下需要28个控制信号,因此共计需要34个输入/输出管脚。
Altera公司生产的复杂可编程逻辑器件EPM7128SLC84-15和现场可编程门阵列器件EPF10K10LC84-4分别具有64个和59个输入/输出管脚,完全满足设计要求。
在输入/输出管脚方面,这两种可编程逻辑器件优于MCS51系列兼容芯片AT89S51,在使用时不需要扩展输入/输出管脚这部分资源。
使用上述两种可编程逻辑器件实现交通灯控制电路所需要的时钟信号需要独立的电路。
在这个方面,使用MCS51系列兼容芯片AT89S51具有优势。
复杂可编程逻辑器件EPM7128SLC84-15采用E2PROM型存储器存储设计文件,即使断电也不会丢失设计信息。
现场可编程门阵列器件EPF10K10LC84-4采用SRAM型存储器存储设计文件,如果断电,芯片将丢失设计信息,因此在系统中必须包含一种非易失存储器件以保存设计信息。
每次系统加电时,由这种非易失存储器件向现场可编程门阵列器件加载设计信息。
从系统的简单性方面,复杂可编程逻辑器件优于现场可编程门阵列器件。
复杂可编程逻辑器件EPM7128SLC84-15和现场可编程门阵列器件EPF10K10LC84-4分别具有2500和10000个等效逻辑门,并且后者还具有6144位的RAM存储单元,因此在可以提供的逻辑资源方面现场可编程门阵列器件EPF10K10LC84-4具有优势。
在工作速度方面,CPLD器件EPM7128SLC84-15的速度等级为15ns,FPGA器件EPF10K10LC84-4的速度等级为4ns,因此也是后者具有优势。
考虑到交通灯控制电路所需要的逻辑资源不多,而且又是一个低速工作系统,因此本设计采用复杂可编程逻辑器件EPM7128SLC84-15实现所要求的数字系统。
6.3系统设计
基于复杂可编程逻辑器件EPM7128SLC84-15设计的交通灯控制电路硬件组成框图,如图6-2所示。
它包括时钟信号产生电路、状态信号产生电路、交通灯和时间信号产生电路、显示电路以及系统电源。
图6-2交通灯控制电路组成框图
在图6-2中,状态信号产生电路和交通灯控制信号产生电路由复杂可编程逻辑器件EPM7128SLC84-15实现。
显示电路包括交通灯电路和时间显示电路,前者采用发光二极管;后者采用8段数码管。
时钟信号产生电路将独立设计。
本设计中不包括系统电源的设计,直接使用实验室提供的直流稳压电源。
6.4单元电路设计
6.4.1显示电路
显示电路包括交通灯电路和时间显示电路。
在本设计中,前者采用发光二极管;后者采用8段数码管。
发光二极管和数码管具有类似的工作原理。
8段数码管原理图如图6-3的(a)和(b)所示。
数码管有共阴极和共阳极两种类型。
共阴极数码管内部8个二极管的阴极被连接在一起和管脚COM相接。
在使用时管脚COM应当接低电平,当数码管其余的某个管脚接高电平,则与该管脚相接的发光二极管被点亮,也就是数码管对应的发光段被点亮。
共阳极数码管内部8个二极管的阳极被连接在一起和管脚COM相接。
在使用时管脚COM应接高电平,当数码管其余的某个管脚接低电平,则与该管脚相连的发光二极管被点亮,也就是数码管对应的发光段被点亮。
用做显示交通控制信号的发光二极管也可以使用这样的连接方法。
在设计中,8段数码管采用共阴极类型,发光二极管也采用这样的连接,即把6个发光二极管的阴极连接在一起。
数码管外形图如图6-3的(c)所示。
数码管有2个COM管脚,它们在数码管内部被连接在一起,在使用时,应用电路中只需要连接一个COM管脚即可。
数码管的电路符号图如图6-3的(d)所示。
图6-3数码管的原理图、外形图和电路符号图
每组发光二极管的公共连接点与接地线之间需要连接一个电阻,该电阻被称为限流电阻。
限流电阻用来防止电流过大损坏电路器件。
由于不同型号的发光二极管的技术参数不同,应根据具体情况来确定限流电阻的阻值,限流电阻的通常取值范围是100Ω~1kΩ。
为保证电路的安全,限流电阻开始可以选取大一些,如果发光二极管的亮度不够,再逐渐减小限流电阻的值,直到发光二极管的亮度满足要求。
限流电阻还有另一种接入方法。
该方法是每个发光二极管与控制电路之间分别接一个电阻。
限流电阻的前一种接入方法的优点是接线简单,后一种接入方法的优点是在点亮不同个数的发光二极管时它们的亮度一致。
前一种连接方法对用做交通控制信号的发光二极管组无影响,因为任何时刻都有,也只有两个发光二极管被点亮。
使用共阴极数码管,当其中的发光段被点亮时,对应的可编程逻辑器件管脚输出高电平,电流从可编程逻辑器件流向数码管;使用共阳极数码管,当其中的发光段被点亮时,对应的可编程逻辑器件管脚输出低电平,电流从数码管流向可编程逻辑器件。
数字器件的高电平输出电流与低电平灌入电流的最大值通常是不同的,而电流大小将影响发光器件的亮度。
本设计采用共阴极数码管。
在进行数据显示之前,需要完成待显示的数据到显示代码之间的译码。
如果数码管除小数点之外的7个管脚按照g、f、e、d、c、b、a的顺序排列,共阴极数码管显示数据和显示代码之间的关系如表6-2所示。
表6-2同时也给出了共阳极数码管显示代码。
表6-2显示数据和显示代码之间的关系表
显示数据
共阴极数码管显示代码
共阳极数码管显示代码
0
0111111
1000000
1
0000110
1111001
2
1011011
0100100
3
1001111
0110000
4
1100110
0011001
5
1101101
0010010
6
1111101
0000010
7
0000111
1111000
8
1111111
0000000
9
1101111
0010000
A
1110111
0001000
B
1111100
0000011
C
0111001
1000110
D
1011101
0100010
E
1111001
0000110
F
1110001
0001110
“全亮”
1111111
0000000
“全灭”
0000000
1111111
数码管的显示模式分静态显示和动态显示2种。
当需要多个数码管实现数据显示时,前者每个显示段需要1个可编程逻辑器件的I/O管脚驱动;后者可以将多个数码管的同样显示段的输入管脚并联在一起,然后再与1个可编程逻辑器件的I/O管脚连接,但是这时每个数码管的公共端需要与1个可编程逻辑器件的I/O管脚连接,实现位选。
6.4.2时钟产生电路
设计的交通灯控制电路的状态转换时间间隔为1s,因此需要一个频率为1Hz的时钟产生电路。
产生这样频率的时钟信号,采用基于RC振荡器工作原理的555定时器是一个较好的选择,因为电路连接简单。
555定时器用作时钟产生电路的电路原理图以及工作周期的计算公式分别如图6-4所示和式(6-1)所示。
图6-4基于555定时器的时钟产生电路图
T=C2(R1+2R2)(6-1)
图6-4所示的基于555定时器的时钟产生电路测量数据如表6-3所示。
表6-3基于555定时器的时钟产生电路测量数据表
测量电路
输出周期计算值(s)
输出周期测量值(s)
绝对误差(s)
相对误差(%)
1
0.998
1.016
0.018
1.80
2
0.998
1.040
0.042
4.21
3
0.998
1.024
0.026
2.61
表6-3所示的数据由同一批购买的器件组成的3个独立电路的测量获得。
电路输出信号的周期测量使用Tektronix公司的TDS1012示波器完成。
表中所示的误差来源为所使用的电阻、电容以及555芯片本身的精度不高。
引起的误差,包括设计值与实际测量值、同一批元器件组装的电路之间的数据离散,对于交通灯控制电路这样的数字系统,这样的误差对实际使用影响不大,是可以认可的,但是对于其它应用领域需要给予考虑。
时钟产生电路的主要技术指标包括输出频率稳定度。
Tektronix公司的TDS1012示波器不能显示小于10Hz的信号频率。
通过重新选择图6-4所示电路的电阻或者电容值,使电路输出信号频率满足示波器测量要求。
观察显示的测量频率值,将会发现电路输出频率的稳定数据只有4位有效数字,TDS1012示波器显示的信号频率具有6位有效数字。
555电路输出信号频率稳定度较低,这是由于它是基于RC振荡器的工作原理所限制。
各种信号产生器的工作原理以及特点可以参考《高频电子线路》课程。
如果希望时钟输出信号的频率具有较高的稳定度,可以采用晶体振荡器。
图6-5给出一种常用的晶体振荡器电路。
图6-5晶体振荡器电路图
图6-5所示的晶体振荡器电路测量数据如表6-4所示。
表中测量数据同样由3个独立电路的测量获得。
电路输出信号的频率测量使用Tektronix公司的TDS1012示波器完成。
表6-4晶体振荡器电路测量数据表
测量电路
晶体标注值
(MHz)
输出频率测量值(MHz)
绝对误差
(MHz)
相对误差
(%)
1
4.000
3.99961
0.00039
0.0098
2
4.000
3.99959
0.00041
0.0103
3
4.000
3.99958
0.00042
0.0105
比较表6-3和表6-4所示的测量数据可以看出,相对基于RC振荡器原理的555定时器时钟产生电路,晶体振荡器不仅具有较高的设计精度,而且输出信号频率的稳定度也高。
虽然交通灯控制电路这样的应用系统对时间精度要求不是很高,但是高的时钟频率稳定度对许多其它应用系统是必须的。
电子市场出售的晶体的工作频率通常在1MHz以上,本设计采用4MHz晶体主要是价格上的原因。
晶体振荡器输出信号频率比要求的状态转换频率高,要获取所需频率的信号可用分频电路来实现。
这样的分频电路如果使用标准逻辑器件实现将需要多级电路,使得电路规模加大。
使用可编程逻辑器件,采用VHDL语言将大大地减小这个困难。
例6-1:
设计一个能把4MHz的晶体振荡器输出信号转换成占空比为50%,频率为1Hz的系统时钟的分频电路。
LIBRARYieee;
USEieee.std_logic_1164.ALL;
ENTITYl0601IS
PORT(clk:
INSTD_LOGIC;--定义4MHz时钟输入端口
clk_1hz:
OUTSTD_LOGIC);--定义1Hz时钟输出端口
ENDl0601;
ARCHITECTUREl0601OFl0601IS
SIGNALaqi:
INTEGERRANGE0TO4000000;
BEGIN
PROCESS(clk)--计数进程
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(aqi<3999999)THEN
aqi<=aqi+1;
ELSE
aqi<=0;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk,aqi)--1Hz时钟产生进程
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(aqi<1999999)THEN
clk_1hz<=‘0’;
ELSE
clk_1hz<=‘1’;
ENDIF;
ENDIF;
ENDPROCESS;
ENDl0601;
可编程逻辑器件选用EPM7128SLC84-15,利用QuartusII对例6-1进行处理,占用资源如表6-5所示。
表6-5资源占用数据表
优化技术
宏单元占用情况
用户输入/输出管脚占用情况
时钟clk最高频率(MHz)
速度优先
55/128(43%)
6/68(9%)
47.62
平衡性能
55/128(43%)
6/68(9%)
47.62
资源优先
26/128(20%)
6/68(9%)
41.67
使用同样型号的芯片,使用不同的优化技术对设计文件进行