《基于C51交通灯与直流稳压可调课程设计报告_(15页).doc》由会员分享,可在线阅读,更多相关《基于C51交通灯与直流稳压可调课程设计报告_(15页).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于C51交通灯与直流稳压可调课程设计报告_-第 15 页 南华大学电气工程学院 电子技术课程设计设计题目: 交通灯及直流可调稳压电源 专 业: 自 动 化 学生姓名: 安 鸟 鸣 学 号: 起迄日期: 2014年11月8日 2014 年12月 30日指导教师: 目录1 引言. 12 课程要求以及内容.1 2.1 交通灯.1 2.2直流可调稳压电源.13 设计思路及方法.2 3.4 交通灯及直流稳压电源的总体框图.24 硬件电路设计及仿真.3 4.1单片机系统.3 4.2 交通灯框图.3 4.3信号灯亮灭的定时.3 4.4 直流可调稳压电源部分.55 系统电路图和PCB图.7 5.1直流可调
2、电源仿真图.8 5.2直流可调电源仿真图 示波器显示结果.9 5.3 PCB原理图.10 5.4交通灯仿真图. 116主要原件的参数. 15 6.1 tip122,tip127的参数.15 6.2 irf3205参数.167系统制作与测试.17 7.1实物图.18 7.2实物仿真.18 7.3具体分析实物.198元器件清单.209总结. 2110 主要参考文献.221引言 本系统采用51系列单片机ATMEL89C51为核心控制器件来设计交通信号灯控制器,实现亮绿灯通行,亮黄灯闪烁,亮红灯禁止通行的功能,并显示通行,按键信号灯加时。本系统使用性强,操作简单,容易实现,扩展功能强,可自行修改程序扩
3、展自己想要实现的功能。关键词:单片机、交通灯、车流量、自动控制、时间显示2 课程要求以及内容:2.1交通灯:1)主干道方向通行,支干道方向禁止通行,历时60s。2)主干道方向禁止通行,支干道方向仍然禁止通行,历时5s。3)主干道方向禁止通行,支干道方向通行,历时60s。4)主干道方向仍然禁止通行,支干道方向停车,历时5s。 2.2直流可调稳压电源:1)输入交流电压为工频电压;2)输出直流电压分3-6V、6-9V、9-12V三档;3)输出电流1A;4)具有过电流及短路保护功能。3设计思路及方法 方法1:交通灯用MSP430G2553控制,由于MSP430G2553芯片自带ADC,所以不需外接AD
4、C0804测直流可调电压。但MSP430G2553的I/O口只有16位,需外接芯片增加I/O。 方法2:采用NE555,锁存器,数码管,ADC0804,DM74LS48,SN74LS175等主要芯片。 方法3:交通灯主要用89C51控制,用ADC0804测直流可调电压,1602液晶显示。综合以上三种方法,选择方法3。 图3.4 实现交通灯及直流稳压电源的总体框图 通过按键控制交通灯 红灯,绿灯的显示时间,并且可暂停,1602显示。直流可调稳压电源调至5v为单片机供电,CPU处理AD转换数据,控制交通灯。复位电路能复位系统。直流可调稳压电源可通过拔码开关调档。电压通过AD转换1602显示 范围为
5、2.7-14.7v,具有过流保护,大于1A时短路保护。方法3具体内容如下: 交通灯部分: 课程要求以及内容为: 1)主干道方向通行,支干道方向禁止通行,历时60s。 2)主干道方向禁止通行,支干道方向仍然禁止通行,历时5s。 3)主干道方向禁止通行,支干道方向通行,历时60s。 4)主干道方向仍然禁止通行,支干道方向停车,历时5s。4单片机系统单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。下面给出一个51单片机的最小系统电路图。 图 4.1单片机最小系统 开始初始化xi红灯,nan绿灯T
6、ime 可调xi黄灯,nan黄灯闪三下xi绿灯,nan红灯time 可调xi黄灯,nan黄灯闪三下 图4.2交通灯框图4.3 信号灯亮灭的定时 在单片机应用系统中,实现定时的方法一般有以下四种: 方法1:软件定时:让计算机执行一段程序来进行事件延时。这个程序段本身份没有安排其他的执行目的,只是利用该程序段的执行花费的一个固定时间。通过适当的选择指令和安排循环次数,可调节这段程序执行所需花费的时间的长短。其特点是定时时间精确,不需外加硬件电路,但占用时间。因此软件定时的时间不宜过长。 方法2:硬件定时:利用硬件电路实现定时。其特点是不占用时间,通过改变电路元器件参数调来节定时,但使用不够灵活方便
7、。对于时间较长的定时,常用硬件电路来实现。 方法3:可编程定时器:通过专用的定时计数器芯片来实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时的时间可通过程序的设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。 方法4:单片机交通控制器的设计,当定时计数器设置为计数工作方式时,技术器对来自输入引脚T0和T1的外部信号计数,外部信号的下降沿将触发计数。最高检测频率为振荡频率的二十四分之一。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。当设置了定时器的工作方式并启动定时器工作后,定时器就安倍设定的工作方式独立工作,不在占用
8、CPU的操作时间,只有在计数器计满溢出时才能中断CPU当前的操作。 综合以上4种,得出方法4好。4.4 直流可调稳压电源部分:(1)电网供电电压交流220V(有效值)50Hz,要获得低压直流输出,首先必须采用电源变压器将电网电压降低获得所需要交流电压。(2)降压后的交流电压,通过整流电路变成单向直流电,但其幅度变化大(即脉动大)。(3)脉动大的直流电压须经过滤波电路变成平滑,脉动小的直流电,即将交流成份滤掉,保留其直流成份。(4)滤波后的直流电压,便可得到基本不受外界影响的稳定直流电压输出,供给电压表。其中,(1)电源变压器:是降压变压器,它的作用是将220V的交流电压变换成整流滤波电路所需要
9、的交流电压Ui。变压器的变比由变压器的副边按确定,变压器副边与原边的功率比为P2/P1=n,式中n是变压器的效率。(2)整流电路:利用单向导电元件,将50HZ的正弦交流电变换成脉动的直流电。(3)滤波电路:可以将整流电路输出电压中的交流成分大部分滤除。滤波电路滤除较大的波纹成分,输出波纹较小的直流电压U1。常用的整流滤波电路有全波整流滤波、桥式整流滤波等。 图 图然然然34 图 图5 系统电路图和PCB图 图5.1直流可调电源仿真图直流可调电路分析 电位器R4,R5,R6分别200k,100k,50k,为1档,2档,3档3-6v,6-9v,9-12v,设Ui为tip122 G端的电压 , ,其
10、中R10=R8=10K,R1=330, 改变R4的阻值,当R4=0时,Ui=0.5U0 ,U0=*12=17v。此时tip122 Ug=8.5v,Uc= R7*Ic,Ic为tip122集电极的电流。当R4=200k时,U0=1/22*(17v)。 .1 .2 .3 .4.5 .6其中IC1为tip122集电极电流,IC2为tip127发射极的电流,跟据tip122,tip127的电流,来改变irf320G极的电压,来控制输出电压。同理当拔码开关选择R5,R6时,原理是一样的,只是输出的电压不一样。 图5.3 pcb原理图 图5.3.1pcb 图5.3.2pcb 3D图 图5.4交通灯仿真图交通
11、灯具体分析: 在满足交通灯(1),(2),(3),(4)基础上,通过按键控制交通灯 红灯,绿灯的显示时间,并且可暂停,1602显示。该目的是为了在实际交通路线上车流量的大小,来控制南,北方向红绿灯的时间。直流稳压可调电源: 通过功放管 tip122,tip127,大电流irf320,为电流放大,该直流稳压可调电源通过三级放大,输入级,中间极,输出极。三级放大电路的优点,可以有效减少直流稳压可调电源本身的功率消耗,有利于电源的功率提高。6主要原件的参数 6.1 tip122,tip127的参数: 6.2 irf3205参数:IR的HEXFET功率场效应管irf3205采用先进的工艺技术制造,具有
12、极低的导通阻抗。irf3205这种特性,加上快速的转换速率,和以坚固耐用著称的HEXFET设计,使得irf3205成为极其高效可靠、应用范围超广的器件。 基本参数:电压 Vgs Rds on 测量:10V电压, Vds 典型值:55V电流, Id 连续:110AQg Typ: 97.3 nCFET极性: N型沟道 图7.1实物图图7.2实物工作图图7.2.1 实物低底层连线图7.3具体分析实物: 7.3.1直流可调稳压电源:通过12v的变压器变压,然后经过整流稳压,稳压理论值大约为1.414*12=16.9v,由于变压器实际的转换有12.4v左右,所以稳压实际值为17.6v。然后经tip122
13、与tip127对管进行两级控制,控制irf320的G端口,irf320为cmos功放管,是电压控制电流型,这样可以有效减小电源自身功率的消耗。在做电源时,电源结构的总电容不能太大,不然会导致无功功率的增大,有功功率的下降,进而导致电源的效率下降。 通过拔码开关转换档位(1,2,3档),在实际测量的范围2.314.7v左右。但在2.32.7v之间有一个电阻很热,该电阻为330欧,原因是有很高的电压加在其上面,用万能表测量为12.8v左右,输出电压的减少导致该电阻功率上升,电阻发热。调节负载电阻的大小,电压表测量负载两端电压没有变化,说明在电流较小的情况下,电压很稳定。然后可以通过adc804转换
14、,CPU处理,经1602液晶显示。具体见图7.27.3.2交通灯: 将拔码开关转换档位选择2挡,调节电位器的大小,使输出为5v,给单片机供电。图7.2显示电压为5.031v,且无波动,说明AD转换很准确。交通灯的时间显示为nan,xi。按键S1,S2,S3D的功能分别为;S1控制nan的时间,每按一下S1键, nan方向的红灯显示时间加1s,xi方向的绿灯显示时间加1s。每按一下S2键,nan方向的绿灯显示时间加1s,xi方向的红灯显示时间加1s。并且1602液晶显示,具体见图7.2。实际作用是南西方向车流量,根据南西方向的车流量来控制红绿的时间。 按一下S3键,不管交通灯是什么状态都将暂停。
15、再按一下从原来的状态计数。S3键的实际作用是当发生事故时可急暂停。8元器件清单元件名称元件序号型号主要参数数量单片机U1AT89C5112M HZ1排阻P5A103J10k1电阻R15-20金属膜电阻1k 6开关S1-4/4晶振Y1XTAL12M HZ1电容C2,C6RAD-0.322pF2LEDD2-D15Diode 1N4149电流10mA13ADC芯片ADC1ADC0804精度1/255 v1电容C5RAD-0.3150pF1电容C2,C4RAD-0.30.1uF11602P4/1接口P1-3三角封装/3电阻R7-14金属膜电阻10k8电桥D1D-38整流1极性电容C1,C32200uF
16、,1000uF整流1电位器R4-6RPot20,100k, 50k1拔码开关S5DIP-6三档位1三极管Q1TIP122TO-2201三极管Q2TIP127TO-2201CMOS管Q3IRF320TO-2201电阻R21-24金属膜电阻3303电阻R1金属膜电阻2201散热片/3保险丝F1/2A19总结: 在做课程设计的过程中,我发现自己的实际操作能力不是很好,其中单面pcb的排版和连线花了最多的时间,直流可调稳压电源的原理图是跟据电子技术模拟书本第10章和第5,6章的图修改和凑出来的。源程序部分,由于我买了51单片机,自己写一些,凑一点。交通灯部分由于是用51单片机控制,所以简单。通过这次课
17、程设计我发现课本上是理论,到实物还有很大的距离。希望自己再接再厉。10 主要参考文献 1 康华光.模电.高等教育出版社2005年版 2 康华光.数电.高等教育出版社2005年版 3 黄松岭.仪器设计基础教程.清华大学出版社.2008年版 4 阳小华.大学C/C+语言程序设计.电子工业出版社.2009年版 5 郭天祥.51单片机C语言教程.电子工业出版社.2007年版11 附录(部分源程序)#include#include#define LCD1602_DATAPINS P0#define uchar unsigned char#define uint unsigned intsbit K1=P
18、31;sbit K4=P32;sbit K2=P30;sbit INTR= P36; /输出sbit WR1 = P35; /时钟sbit RD1 = P34; /输入sbit CS = P33;sbit LCD1602_E=P27;sbit LCD1602_RW=P25;sbit LCD1602_RS=P26;sbit RED_A=P22; /东西向指示灯sbit YELLOW_A=P20;sbit GREEN_A=P21;sbit RED_B=P23; /南北向指示灯sbit YELLOW_B=P24;sbit GREEN_B=P37;long int date1;uint a=4,b=4
19、, temp;uint Time_Count=0,Flash_Count=0,Operation1_Type=1,Operation_Type1=1; unsigned char table1= nan: ;unsigned char table2= xi: ;uchar num,num0=4,num1=4,miao =0,fen=0,shi=11;/,ri=30,yue=12;uint number1=55,number2=55,number3=200,number4=200;/,nian=2014 ; void delayms(uint x) uint i,j; for(i=x;i0;i-
20、) for(j=110;j0;j-);void AD_init(void)CS = 1;WR1 = 1;RD1 = 1;P1=0XFF;delayms(10);void AD_start() P1=0XFF; CS = 0;WR1 = 1;WR1 = 0; delayms(10); WR1 = 1; delayms(10);void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /选择发送命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com; /放入命令Lcd1602_Delay
21、1ms(1);/等待数据稳定LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0;void LcdWriteData(uchar dat)/写入数据LCD1602_E = 0;/使能清零LCD1602_RW = 1;/选择写入LCD1602_RS = 0;LCD1602_DATAPINS = dat; /写入数据Lcd1602_Delay1ms(1);LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0; void keyscan()Lcd1602_Delay1m
22、s(10); /延时消抖 if(K1=0) Lcd1602_Delay1ms(10);if(K1=0)/ TR0=TR0; number3+=60; num0=num0+1; a=num0; while(!K1); if(K2=0) Lcd1602_Delay1ms(10);if(K2=0)/ TR0=TR0; number4+=60; num1=num1+1; b=num1; while(!K2); if(K4=0) Lcd1602_Delay1ms(10);if(K4=0) TR0=TR0;/ number4+=100; while(!K4);void main() uchar i,j;
23、TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=(65536-10000)/256; TL1=(65536-10000)%256; AD_init();LcdInit(); LcdInit(); / IntConfiguration(); TMOD=0x11; IE=0x8a; TR0=1; TR1=1; LcdWriteCom(0x86);LcdWriteData(v); LcdWriteCom(0x8a); for(i=0;i6;i+)LcdWriteData(table2i);Lcd1602_Delay1ms(5);LcdWriteCo
24、m(0x80+0x49);for(j=0;j6;j+)LcdWriteData(table1j);Lcd1602_Delay1ms(5); while(1) keyscan();AD_start(); if(INTR!=0); INTR=0; date1= AD_Read(); date1=date1*39;/ /定时器0 中断函数void T0_INT() interrupt 1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; switch(Operation1_Type) case 1: /东西向绿灯与南北向红灯亮5s RED_A=0;YELLO
25、W_A=0;GREEN_A=1; RED_B=1;YELLOW_B=0;GREEN_B=0; number1=number1-1; if(number1=0) a-; number1=55; if(+Time_Count!=number3) return; /5s(100*50ms)切换 Time_Count=0; Operation1_Type=2; a=num0; / number1+; break; case 2: /东西向黄灯开始闪烁,绿灯关闭 if(+Time_Count!=10) return; Time_Count=0; YELLOW_A=YELLOW_A;GREEN_A=0;
26、if(+Flash_Count!=10) return; /闪烁 Flash_Count=0; Operation1_Type=3; break; case 3: /东西向红灯与南北向绿灯亮5s RED_A=1;YELLOW_A=0;GREEN_A=0; RED_B=0;YELLOW_B=0;GREEN_B=1; if(number2=0) b-; number2=55; if(+Time_Count!=number4) return; /5s(100*50ms)切换 Time_Count=0; Operation1_Type=4; b=num1;/ number2+; break; case 4: /南北向黄灯开始闪烁,绿灯关闭 if(+Time_Count!=10) return; Time_Count=0; YELLOW_B=YELLOW_B;GREEN_A=0; if(+Flash_Count!=10) return; /闪烁 Flash_Count=0; break; void TIME_INT() interrupt 3 TH0=(65536-10000)/256; TL0=(65536-10000)%256; switch(Operation_Type1)