控制电路.docx
《控制电路.docx》由会员分享,可在线阅读,更多相关《控制电路.docx(19页珍藏版)》请在冰豆网上搜索。
控制电路
十字路路口交通灯控制电路的设计
1.设计任务
设计并制作一个十字路口的交通灯控制电路(用红、绿、黄发光二极管模拟显示灯),同时用数码管显示禁止和通行时间。
2.电路工作原理
利用AT89S51单片机电路设计并制作。
3.设计要求
3.1、绿灯亮表示允许通行,时间设定为25S;红灯亮表示禁止通行,时间设定为25S黄灯亮表示警告,并要求后5S中,绿灯闪2S,黄灯亮3S。
3.2、时间显示为倒计时,三个指示灯的交替显示要准确。
4.方案论证和总体设计
4.1提出方案:
实现此设计可有三种常用的方法。
4.1.1用传统的数字电路设计并制作。
数字电路制作交通灯的制作流程图为:
图4-1数字电路交通灯设计流程图
电路电路图如图4-2所示:
图4-2数字电路控制交通灯电路图
图中所示,选用JK触发器,设状态编码为:
S0=00 S1=01 S2=11 S3=10,其输出为Q1Q0倒计时显示采用七段数码管作为显示,它由计数器驱动并显示计数器的输出值。
计数器选用集成电路74190进行设计。
74190是十进制同步可逆计数器,它具有异步并行置数功能、保持功能。
74190没有专用的清零输入端,但可以借助QA、QB、QC、QD的输出数据间接实现清零功能。
现选用两个74190芯片级联成一个从可任意设定时间00~99倒计至00的计数器,其中作为个位数的74190芯片的CLK接秒脉冲发生器(频率为1),再把个位数74190芯片输出端的QA、QD用一个与门连起来,再接在十位数74190芯片的CLK端。
当个位数减到0时,再减1就会变成9,0(0000)和9(1001)之间的QA、QD同时由0变为1,把QA、QD与起来接在十位数的CLK端,此时会给十位数74190芯片一个脉冲数字减1,相当于借位。
整个交通灯控制系统需要有4个时间显示器,28个交通灯。
我在这里共接了6个时间显示器,其中4个用于交通倒计时,另外2个用于显示当前置数
4.1.2选择MAX7000S系列的EPM7128SLC84-7芯片设计制作。
电路划分为控制器和受控电路两部分。
在本系统中,设定系统的工作情况如下。
路口交通灯控制系统的东西路有交通灯R(红)、Y(黄)、G(绿);东西人行安全通道灯:
RXR(红)、RXG(绿)。
南北路有交通灯:
r1(红)、y1(黄)、g1(绿);南北人行安全通道灯:
rxr1(红)、rxg1(绿),所有灯均为高电平点亮。
设置15s的通行时间和5s转换时间的变模定时电路,由预置输入整数cnt决定是模15还是模5,输入逻辑cx是用来决定计数到4时清零还是到14时清零。
Clk是外部提供的基准秒脉冲信号。
x0、x1、x2、x3是由控制器输出的表示计数时间的四位二进制数。
图4-3是该系统控制器的符号框图。
图4-3控制器的ASM图
根据系统设计要求,得到控制器的ASM图,如图2所示。
在这里,所有输入信号均为高电平有效。
该ASM图反映了交通灯系统的不同状态的转换过程及持续时间。
图4-4控制器的VHDL程序设计
根据所分析的系统的ASM图,结合系统的设计要求,用VHDL语言对各个模块进行编程,最后形成顶层文件,在MAX+PLUSⅡ环境下进行编译与仿真,检查所编程序是否运行正确。
如果出现错误,需要进行修改,直到完全通过为止。
需要说明的是,在进行程序编译时,要先从底层程序开始,所有底层程序都正确后,才能开始顶层程序的编译。
这是因为顶层程序是对底层程序的概括,它是把底层程序各个模块连接起来,就相当于把每个模块的功能汇聚到一起,实现整个系统的控制功能,所以底层程序的正确与否,关系到顶层程序的运行结果。
在控制器的程序设计中,在定义结构体时,有两种程序设计方法均可以通过编译及仿真,但在进行时序分析时结果却不同。
(1)如果这样定义:
...
ARCHITECTUREcon1_arcofcon1IS
SIGNALcurrent_state:
state;
BEGIN
...
在进行程序调试时,均通过了编译及仿真,但在进行时序分析中,却出现了不按设定的计数顺序工作的结果:
14,13,2,1,0...。
经过反复修改调试,对程序进行了修改,如
(2)所定义的。
(2)
ARCHITECYTUREcon1_arcOFcon1IS
SIGNALcurrent_state:
state;
SIGNALTEMP_STATE:
state;
...
TEMPSTATE<=current_state;
BEGIN
...
在这种设计方法中,多定义了一个信号变量,从而使得程序能按设定的状态14,13,12...进行转换。
通过这个实例,可以看出EDA技术作为电子设计工具的功能修改及调试的方便快捷,即不需要硬件电路的支持就可以找到问题所在并进行修改,体现了它的优越性。
硬件电路实现
根据交通灯系统的控制要求,图4-5所示为本系统的硬件电路图。
该电路包含了1个CPLD芯片,2个七段LED数码显示器,20个分别表示各个方向上的红、黄、绿灯,以及相应的限流电阻。
这个电路与其他控制方法相比,所用器件可以说是比较简单经济的。
经过实验,实现了预定的交通灯系统的控制功能。
图4-5系统的硬件电路图
4.1.2利用AT89S51单片机电路设计并制作。
单片机采用ATM公司的AT89S51,这类芯片容易购买,用起来也很方便。
显示部分分为两部分,一部分就是数码管实现倒计时显示,一部分就是三种不同颜色的发光二极管模拟红、绿、黄交通灯。
数码管采用四个一位的七段数码管。
电路用串口方式显示,这种方式可以节省单片机的接口,实现的程序也比较容易。
电路采用74LS164来实现串口对并口的转换,这种芯片价格便宜,容易买到。
电路图如图4-6所示:
图4-6利用AT89S51单片机电路设计并制作的电路图
4.2方案比较:
如上所述,采用传统的数字电路设计并制作方案。
电路复杂,设计复杂,设计思维能力要求较高,调试起来也有一定的难度。
加上电路需要的硬件多,成本高。
所以不采用这种方案。
采用MAX7000S系列的EPM7128SLC84-7芯片设计制作方案。
电路硬件比较少,但是采用的芯片比较贵,并且软件的设计难度比较大,对软件的设计要借助一定的工具。
而这实现这种逻辑编程的工具很贵。
所以也不宜采用这种方案。
利用AT89S51单片机电路设计并制作。
这种方案硬件少,基本上硬件是设计没有什么难度,都是常用的接法。
软件实现难度不高。
并且单片机电路也是常用的电路,芯片容易买到,价格又相对便宜。
所以我们决定采用这种方案。
5.单元电路设计
电路设计总体上可以分为软件的设计和硬件设计两个部分。
而硬件设计部分主要由三个部分组成:
单片机最小系统、串口转并口显示电路、模拟红、绿、黄三色灯部分电路。
而软件部分,主要有定时计数模块、七段数码管的输出显示模块和红、绿、黄三色灯的控制模块。
下面将各部分的设计分析如下,包括有关电路图和电路原理的分析。
5.1单片机最小系统。
单片机采用ATM公司的AT89S51,组面的电路包括,复位电路、晶振电路,和51单片机芯片。
电路图如图5-1所示。
图5-1单片机最小系统
图中所示,电路,晶振采用11。
0592M,提供电路工作时序。
复位电路是上电时使单片机芯片的I/O口置高电平。
接法和其它元器件的参数如图5-1所示。
5.2串口转并口显示电路
数码管采用四个一位的七段数码管。
电路用串口方式显示,这种方式可以节省单片机的接口,实现的程序也比较容易。
电路采用74LS164来实现串口对并口的转换。
其引脚和内部结构图如图5-2、图5-3所示:
图5-274LS164引脚图
图5-374LS164内部结构图
74LS164的真值表如图表5-4所示
H-高电平L-低电平X-任意电平↑-低到高电平跳变QA0,QB0,QH0-规定的稳态条件建立前的电平QAn,QGn-时钟最近的↑前的电平
串口转并口显示电路总体电路图如图5-5所示
图5-5串口转并口显示电路
5.3模拟红、绿、黄三色灯部分电路
此部分电路由红绿黄三色发光二极管和一个非门集成芯片74LS05组成。
其中非门集成芯片74LS05的引脚和内部结构图如图5-6所示:
图5-674LS05的引脚和内部结构图
模拟红、绿、黄三色灯部分电路的总体电路图如图5-7所示:
图5-7模拟红、绿、黄三色灯部分电路图
硬件部分的总体电路图如图5-8所示:
5.4软件部分
软件部分,主要有定时计数模块、七段数码管的输出显示模块和红、绿、黄三色灯的控制模块。
其程序如下所示:
SECOND1EQU30H;东西路口计时寄存器
SECOND2EQU31H;南北路口计时寄存器
DBUFEQU40H;显示码缓冲区1
TEMPEQU44H;显示码缓冲区2
LED_R1BITP2.1;东西路口红灯
LED_G1BITP2.2;东西路口绿灯
LED_Y1BITP2.3;东西路口黄灯
LED_Y2BITP2.4;南北路口黄灯
LED_G2BITP2.5;南北路口绿灯
LED_R2BITP2.6;南北路口红灯
ORG0000H
LJMPSTART
ORG0100H
START:
MOVTMOD,#01H;置T0为工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
CLRA
MOVP2,A;关闭不相关的LED
;***************************************************
LOOP:
MOVR2,#20;置1s计数初值,50ms*20=1s
MOVR3,#20;红灯亮20s
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;判断1s到否?
未到继续状态1
MOVR2,#20;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持20s
;*******************************************
MOVR2,#5;置50ms计数初值5*4=20
MOVR3,#3;绿灯闪3s
MOVR4,#4;闪烁间隔200ms
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY
WAIT2:
LCALLSTATE2;调用状态2
JNBTF0,WAIT2;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR4,WAIT2;判断200ms到否?
未到继续状态2
CPLLED_G1;东西绿灯闪
MOVR4,#4;闪烁间隔200ms
DJNZR2,WAIT2;判1s到否?
未到继续状态2
MOVR2,#5;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT2;状态2维持3s
;****************************************
MOVR2,#20;置50ms计数初值
MOVR3,#2;黄灯闪2s
MOVSECOND1,#2;东西路口计时显示初值2s
MOVSECOND2,#2;南北路口计时显示初值2s
LCALLDISPLAY
WAIT3:
LCALLSTATE3;调用状态3
JNBTF0,WAIT3;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT3;判断1s到否?
未到继续状态3
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT3;状态3维持2s
;*******************************************
MOVR2,#20;置50ms计数初值
MOVR3,#20;红灯闪20s
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
WAIT4:
LCALLSTATE4;调用状态4
JNBTF0,WAIT4;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT4;判断1s到否?
未到继续状态4
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT4;状态4维持20s
;*******************************************
MOVR2,#5;置50ms计数初值
MOVR4,#4;红灯闪20ms
MOVR3,#3;绿灯闪3s
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY
WAIT5:
LCALLSTATE5;调用状态5
JNBTF0,WAIT5;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR4,WAIT5;判断200ms到否?
未到继续状态5
CPLLED_G2;南北绿灯闪
MOVR4,#4;闪烁200ms
DJNZR2,WAIT5;判断1s到否?
未到继续状态5
MOVR2,#5;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT5;状态5维持3s
;****************************************
MOVR2,#20;置50ms计数初值
MOVR3,#2;红灯闪2s
MOVSECOND1,#2;东西路口计时显示初值2s
MOVSECOND2,#2;南北路口计时显示初值2s
LCALLDISPLAY
WAIT6:
LCALLSTATE6;调用状态6
JNBTF0,WAIT6;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT6;判断1s到否?
未到继续状态6
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT6;状态6维持2s
LJMPLOOP;大循环
;**********************************************
STATE1:
;状态1
SETBLED_G1;东西路口绿灯亮
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
STATE2:
;状态2
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
STATE3:
;状态3
CLRLED_G1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
SETBLED_Y1;东西路口绿灯亮
RET
STATE4:
;状态4
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
SETBLED_G2;南北路口绿灯亮
CLRLED_Y2
CLRLED_R2
RET
STATE5:
;状态5
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
CLRLED_Y2
CLRLED_R2
RET
STATE6:
;状态6
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
CLRLED_G2
CLRLED_R2
SETBLED_Y2;南北路口红灯亮
RET
DISPLAY:
;数码显示
MOVA,SECOND1;东西路口计时寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+3,A
MOVA,B
MOVDBUF+2,A
MOVA,SECOND2;南北路口计时寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+1,A
MOVA,B
MOVDBUF,A
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#4
DP10:
MOVDPTR,#LEDMAP
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,DP10
MOVR0,#TEMP
MOVR1,#4
DP12:
MOVR7,#8
MOVA,@R0
DP13:
RLCA
MOVP3.0,C
CLRP3.1
SETBP3.1
DJNZR7,DP13
INCR0
DJNZR1,DP12
RET
LEDMAP:
DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5
DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,7BH,71H,0,40H;C,D,E,F,,-
END
6.电路仿真调试
我们采用Protues对电路进行了仿真调试,并且采用Keilc对程序进行了调试。
仿真电路图如图6-1、图6-2所示:
图6-1仿真电路图1
图6-2仿真电路图2
7.心得体会
EDA课程设计,给我最大感想就是:
从设计,到仿真调试,再到电路的焊接,最后成品的制成,每一个步骤都可能存在很多难点,.出现很多的问题。
这要求我们首先要有信心和耐心,还得细心,其次要有正确的学习态度,最后你得有扎实的理论基础和一定的动手能力。
要明白不管看上去多么简单的电路,实际做起来还是很难的,为了不走太多的弯路,一开始就要有认真对待的准备。
作品的选题和设计过程中,我们选取了一道我们有把握,知识点我们觉得可以掌握的题,这样做起来才能够实现理论和实践的接合,从中学到更多的知识。
在设计过种中我们分难点分步进行设计,首先在心中要有一个模块,然后在把想法拿到仿真软件里去一一验证。
这一步是很重要的,也是实实在在学习的关健所在。
这其中我们碰到的难题就是,实验参数的设计。
要达到课程的数据要求,必需进行了大量的仿真调试和大量查阅相关的芯片参数。
这其中要求你要有一定的数电模电的基础知识。
这其中另一个关键之处就是组员的合作,要把问题摆出来充分讨论共同去查阅解决。
做到这点,才能事半功倍。
我们这组一个人理论知识很好,一个人动手能力很好的人,这样设计起来才能很好的把理论和实践之间的不同点接合起来,少走了不少的弯路。