模拟汽车转向灯控制系统设计.docx
《模拟汽车转向灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《模拟汽车转向灯控制系统设计.docx(22页珍藏版)》请在冰豆网上搜索。
模拟汽车转向灯控制系统设计
模拟汽车转向灯控制系统设计
前言
车灯是行车安全的必备条件,除了具有照明作用,对其他车辆还具有转向、刹车等警示作用。
汽车转向信号灯是汽车运动方向和车身状态的表示信号,关系着汽车的安全问题,因此基于单片机的汽车转向灯控制器一直以来都是汽车电子设计中的一个十分重要的领域。
本设计是设计一个单片机控制系统,在汽车进行左转弯、右转弯、刹车、合紧急开关、停靠、倒车等操作时,实现对各种信号指示灯的控制。
它主要是对单片机的并行输入/输出口电路的应用来控制发光二极管的亮﹑灭﹑闪烁,再加上一些串口电路﹑按键电路﹑复位电路来模拟汽车转向灯的功能,并在protel上显示此时的汽车转向灯发光的状态。
汽车上的转向灯包括左头灯、右头灯、左尾灯、右尾灯,仪表盘的两个指示灯。
当汽车转弯、刹车、停靠时,转向灯发出不同的信号汽车转弯或停靠时,相应的信号灯要发出闪烁的灯光信号,目前国内广泛使用电热式闪光器产生闪光信号。
闪烁频率在50~110次/分,但是一般控制在60~95次/分之间。
闪光器是通过调节镍铬丝的拉力和触点的间隙来满足频率要求的,灯泡功率的大小也会影响闪烁频率,因此在更换闪光器或灯泡时调整比较困难。
同时,系统没有检测故障的功能,驾驶员无法知道车外的转向灯及故障指示灯是否点亮,从而影响行车安全。
到目前为止,我们还没有发现能检测这种故障的有效方法。
因此针对上述问题,我们用AT89C51单片机设计了一套模拟汽车转向灯控制系统。
作用就是用LED产生闪光信号,从而达到检测除故障的效果。
因为是模拟的汽车转向灯控制系统,所以在检查信号灯故障的时候,不能借助熔丝盒、继电器、SW、B接柱这些器件来诊断故障,只能在LED灯产生闪光信号时检测信号灯的故障。
1汽车转向灯介绍
1.1汽车转向灯功能分析
汽车转向信号装置主要由转向灯、闪光器、转向灯开关等组成,转向灯的闪烁由闪光器控制,由此可知汽车转向信号有很大一部分都是由汽车转向灯来完成的,本设计中转向灯的闪光器是由电容式闪光器实现的,接通转向灯开关后,转向灯就会开始工作。
1.1.1汽车转向灯的作用
转向信号灯分别装在车身前,后端的左右两侧。
汽车在转弯、变更车道或路边停放时,打开转向信号灯,向交警、行人及其其它车辆表明驾驶员的意图。
为了引人注目转向信号灯不仅亮度很强,且在其电路中装有使信号灯光的闪烁器。
转向信号灯由闪光继电器和转向开关控制,当所有转向信号灯同时闪烁时,作为危险报警信号,由危险报警信号开关控制。
闪烁式转向信号灯可单独设置,也可与前小灯(或后小灯)合成一体,在该种情况下一般用双丝灯泡,有的汽车后转向信号灯和后灯合成一体。
1.2设计方案及原理
模拟汽车转向灯控制系统设计电路是由单片机AT89C51、复位、时钟、LED显示电路、按键电路构成等几部分组成。
系统框图如图1.2-1所示:
图1.2-1系统框图
1.3系统设计
模拟汽车转向灯控制系统设计要求在汽车进行左转弯、右转弯、刹车、合紧急开关停靠、倒车等操作时,实现对各种信号指示灯的控制。
根据设计要求,制定总体的设计思想。
以单片机AT89C51为核心芯片通过控制LED的显示来模拟汽车转向灯,即用开关K1-K6的闭合分别模拟刹车、紧急、停靠、左转、右转、倒车操作;用LED发光二极管D1-D8的亮灭显示来模拟汽车的故障指示灯、左头灯、右头灯、左转弯信号灯、右转弯信号灯左尾灯、右尾灯、倒车灯的显示情况。
转向时,规定左右尾灯、左右头灯仪表板上2个指示灯相应地发出闪烁信号;应急开关合上时,6个信号灯都应闪烁;汽车刹车时,2个尾灯发出稳定亮信号;如正当转向时刹车,转向时原应闪烁的信号仍应闪烁。
它们都是频率为1Hz低频闪烁,在汽车停靠而停靠开关合上时,左头灯、右头灯、左尾灯、右尾灯按频率为30Hz的高频闪烁。
任何上述之外的开关组合,都将出现故障指示灯闪烁闪烁频率为30Hz。
1.4工作原理
1.4.1开关状态控制
开关状态检测,对AT89C51来说是输入关系,可轮流检测每个开关状态,以每个开关的状态让相应的发光二极管指示;也可以一次性检测六路开关状态,即用MOVA,P2指令一次性把P2端口的状态全部读入,取低6位的状态来指示。
1.4.2输出状态控制
以LED发光二极管D0—D7来指示,此设计用指令MOVP2,#11101111B方法来实现。
1.4.3定时器和计数器
在模拟汽车转向灯控制系统设计中,常常要求有一些实时时钟电路,以实现定时控制、定时测量或延时动作,也要求有计数器能对外部事件计数,实现定时/计数,有软件,数字电路和可编程定时/计数器3种方法,这里采用的AT89C51可编程定时/计数器来设计的,AT89C51系列单片机中采用16位的定时器/计数器执行。
设计中利用定时器/计数器0,一个软件计数器产生低频(1Hz)闪烁功能。
利用定时器/计数器0来产生为时60ms的定时信号,以实现高频(60Hz)闪烁功能。
1.4.4中断系统
在CPU和外设交换信息时,存在着快速CPU和慢速外设时间矛盾,机器内部有时可能会出现突发事件,为此,在这次模拟汽车转向灯控制着系统设计中采用中断技术。
利用MCS-51系列单片机的可编程定时/计数器、中断系统来实现灯闪烁的延时和故障检测当检测到操作错误,可以利用中断系统请求CPU及时处理这些故障。
1.4.5汽车转向灯控制
在汽车转弯或应急状态下,外部信号灯和仪表板它们指示灯的闪烁频率为1Hz,称低频信号。
当停靠开关合上时,外部信号灯以60Hz频率闪烁此时为高频信号。
汽车转弯灯设计8个按键控制信号灯的转向、停靠、应急等。
按键安排为:
K0键为刹车开关;K1键为紧急开关;K2键为停靠开关;K3键为左转弯开关;K4键为右转弯开关;K5键为倒车开关。
2控制系统总体设计
2.1控制系统总体设计思路
模拟汽车转向灯控制系统设计主要是依靠一个单片机控制系统完成的,这个单片机控制系统在汽车进行左转弯、右转弯、刹车、合紧急开关、停靠、倒车等操作时,实现对各种信号指示灯的控制。
从而达到模拟汽车转向灯的功能。
2.2转向灯控制系统总电路图
振荡器启动时间不超过10ms,在加电情况下,可以使单片机复位。
电平复位将复位端通过电阻与Vcc相连,按键脉冲复位是利用RC分电路产生正脉冲来达到复位的。
在按键电平复位和按键脉冲复位两种简单的复位电路中,干扰易串入复位端,转向灯控制系统总电路图如图2.2-1所:
图2.2-1转向灯控制系统总电路图
3硬件设计
3.1按键电路
根据设计的要求,本设计选用独立式键盘。
其工作原理为,单片机引脚作为输入使用,首先置“1”。
当键没有被按下时,单片机引脚上为高电平;而当键被按下去后引脚接地,单片机引脚上为低电平。
是否有键按下,以及被按下的是哪一个可以通过单片机引脚电平显示出来。
下图是电路板上按键的接法,5个按键分别接到P1.0、P1.1、P1.2、P1.3、P1.4和P1.5。
对于这种接法,各程序可以采用不断查询的方法,其功能就是:
检测是否有键闭合,判断键号并转入相应的键处理。
如图3.1-1所示:
图3.1-1按键电路
3.2时钟电路
采用单片机内部晶振。
如图2所示,在MCS-51系列单片机内部有一个高增益反向放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片外部XTAL1和XTAL2之间跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
外接晶体振荡器以及电容C5和C7构成并联谐振电路,接在放大器的反馈回路中,C5和C5的大小会对振荡器频率的高低、振荡器的稳定性、起振的快速性和温度特性有一定的影响。
如图3.2-1所示:
图3.2-1时钟电路
3.3复位电路
上电复位电路如图3所示,是利用外部复位电路实现。
振荡器启动时间不超过10ms,在加电情况下,可以使单片机复位。
电平复位将复位端通过电阻与Vcc相连,按键脉冲复位是利用RC分电路产生正脉冲来达到复位的。
如图3.3-1所示:
图3.3-1复位电路
3.4LED显示电路
本设计通过驱动芯片ULN2803将AT89C51单片机的P1口输出与LED发光二极管相连当AT89C51单片机的P1引脚是高电平时,LED不亮,当P1引脚是低电平时,LED亮。
但是在汽车转向灯里要根据汽车方向来控制信号灯,而实现LED的亮与灭。
4软件设计
主程序中完成对汽车转向灯控制系统的初始化工作,判断是否有键被按下,当开关没有动作时无输出,调用延时程序,延时1s,当判断有开关被按下时,进入中断。
中断程序主要完成各开关按下时汽车转向灯信号的相应显示,其中也在各分支中调用了延时程序,以使LED在不同的分支以相应的频率闪烁。
在Protel软件中,找到所需要的元器件,调入后,连线,下载程序到AT89C51芯片中,运行可看到相应的信号灯亮或闪烁。
原理图按键连线:
P1.0=刹车;P2.1=熄灭;
P1.1=停靠;P2.2=左转;
P1.2=右转;P2.0=倒车;
键值是根据P1的状态来确定的。
例:
P1=00111110,表明刹车键按下,它的键值是3EH(只看后面六位),P1.1=11000001,表明刹车键松开,它的键值是0EH,而P1.2=11100110,它的键值是1EH,表明左转向灯熄灭,P2.1=10100101,它的键值是2EH,表明紧急转向,P2.0=10101111,表明倒车转向灯打开,它的键值是4EH。
具体过程如图4-1所示:
图4-1汽车转向灯控制系统键功能程序流程图
4.1总控制程序设计
汽车转向灯控制系统子程序设计、系统中断服务程序设计、按键功能程序设计汽车转向灯控制系统子程序设计,子程序是构成单片机应用程序必不可少的一部分,由于AT89C51单片机有ACALL和LCALL两条子程序调用子令,将K1和K2设置成出口参数用于补充P1和P2接口,此函数中的参数值的是检测故障的位置。
由于电路连接对应的是单片机的P3口,所以该函数要借助辅助子函数unsignedchargetQ(unsignedchari)来将1~8转化为P2口的P2^0~P2^7管脚即:
0x01,0x02,0x04,0x10,0x20,0x40,0x80.以支持单总线操作。
所以如果要检测第8号监测点,循环指示灯C程序设计如下。
#include
#define_MHZ_12/设置单片机使用的晶振频率
unsignedintcount=0,precount,Maichong;
voidt1(void);/t1定时子函数
voidint1(void)interrupt1;/中断服务子函数
voidYudi(void);/判断循环灯子函数
sbitQ7=p3^3;
sbitint1=p3^3;
main()
{
t1();/调用定时子程序
while(precount!
=0)
{
Yudi();
P0=Maichong;/调用转向灯多少子程序
t1();
}
}
voidt1(void);
{
TMOD=0x10;/定时器1工作在方式1,即为16位计数器
TH1=0X01;/设置60ms定时时间的初值
TL1=0XA0;
TR1=1;/启动T1
IT1=1;/设置INTR1中断方式为边沿触发方式,负跳变时产生中断
EA=1;
ET1=1;/允许定时器1中断
EX1=1;/允许外部中断1中断
EA=1;/CPU开放中断
count=0;
}
voidint1(void)interrupt1;/外部中断1处理函数
TR1=0;
TH1=0X15;
TL1=0XA0;
while(int1==0);
count++;
precount=count;
TR1=1;
}
voidYudi(void);/转向传感器子程序
{
if(precount>=3&&precount<12)
{Maichong=04H;
elseif(precount>=12&&precount<20)
{Maichong=0FH;}
elseMaichong=00H
Maichong=P0;
}
在汽车转向系统中断服务设计中,依然使用的是AT89C51单片机,在AT89C51中有6个中断源,其中有两个为外部中断源,也就是在单片机外部引脚上加了触发信号,以便产生中断请求,T0、T1、T2、T3、T4的入口地址分别是00003H,000BH,0013H,001BH,当这4个接口发出请求信号时,闪光灯会依次亮起来,以右转弯状态仿真图为例,转弯灯仿真图见附录1,C程序设计如下。
#include
#include
floatpwmcycle,pwmcycle1,pwmcycle2;
charE(k)[8],Ec(k)[8];
sbitpwm1=P0.0;
sbitpwm1=P0.1;
sbitpwm2=P0.3;
sbitpwm2=P0.4;
voiddelay(unitm);/声明延时函数
voiddianji(void);
voidtimer1(void)interrupt0using1;
voidtimer2(void)interrupt1using1;
voidshijiancha(void);
voidTongbu(void);
voidgengxin(void);
main
{
P1=P0;
dianji();
shijiancha();
tongbu();
dengxin();
if(timer1!
=timer2)
{dianji();}
}
voiddelay(unitm)/延时1ms子程序
{uchari;
while(m--)
for(i=125;i>0;i--)
}
voiddianji(void)/循环子程序
{
while(Maichong==4)
{if(SA1==1orSA3==1)
{P0=09H;}
elseif(SA0==1orSA2==1)
{P0=12H;}
pwmcycle=40%
delay(20);
P0=00H;
delay(30);
while(Maichong==16)
{if(SA1==1orSA3==1)
{P0=09H;}
elseif(SA0==1orSA2==1)
{P0=12H;}
pwmcycle=60%
delay(30);
P0=00H;
delay(20);
}
voidshijiancha(void)
{
TMOD=0x11;/定时方式,工作在方式1
TH0=0xff;
TL0=0xff;
TH1=0xff;
TL1=0xff;
IT0=1;
IT1=1;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
voidtimer1(void)interrupt0using1
{
unsignedchartmp1,tmp2;
do
{
tmp1=TH0;
tmp2=TL0;
timer1=256*tmp1+tmp2;
TH0=0;
TL0=0;
}
voidtimer2(void)interrupt1using1
{unsignedchartmp3,tmp4;
do
{
tmp3=TH1;
tmp4=TL1;
timer2=256*tmp3+tmp4;
}
TH0=0;
TL0=0;
}
voidTongbu(void)/两电机同步子程序
{
inte(k),ec(k);
for(k=0;;k++)
{e(k)=timer1(k)-timer2(k);
ec(k)=E(k)-E(k-1);
}
if(e(k)>25ms)
{e(k)=25ms;}
elseif(e(k)<-25ms)
{e(k)=-25ms;}
if(ec(k)>50ms)
{ec(k)=50ms;)
elseif(ec(k)<-50ms)
{ec(k)=-50ms;}
if(e(k)>15ms)/时间误差置位规律
{E(k)[0]=1;}
elseif(e(k)>8ms&&e(k)<=15ms)
{E(k)[1]=1;}
elseif(e(k)>0&&e(k)<=8ms)
{E(k)[2]=1;}
elseif(e(k)==0)
{E(k)[3]=1;}
elseif(e(k)>-8ms&&e(k)>0)
{E(k)[4]=1;}
elseif(e(k)>=-15ms&&e(k)<-8ms)
{E(k)[5]=1;}
elseif(e(k)<-15ms)
{E(k)[6]=1;}
if(ec(k)>16&&ec(k)<=30)/时间误差变化置位规则
{Ec(k)[0]=1;}
elseif(ec(k)>0&&ec(k)<=16)
{Ec(k)[1]=1;}
elseif(ec(k)==0)
{Ec(k)[2]=1;}
elseif(ec(k)>-16&&ec(k)<0)
{Ec(k)[3]=1;}
elseif(ec(k)>=-30&&ec(k)<=-16)
{Ec(k)[4]=1;}
while(E(k)[6]=1)/查表
{
if(Ec(4)=1)
{U=-3;}
elseif(Ec(3)=1)
{U=-2;}
elseif(Ec
(2)=1)
{U=-2;}
elseif(Ec
(1)=1)
{U=-1;}
elseif(Ec(0)=1)
{U=0;}
}
while(E(k)[5]=1)
{
if(Ec(4)=1)
{U=-3;}
elseif(Ec(3)=1)
{U=-2;}
elseif(Ec
(2)=1)
{U=-2;}
elseif(Ec
(1)=1)
{U=-1;}
elseif(Ec(0)=1)
{U=0;}
}
按键功能程序设计,键盘和LED显示器是单片机应用系统中常用的输入/输出装置本设计采用的是动态接口程序,采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用P1.0,P2.0,P3.0,P4.0这些接口完成程序码的输出,另一接口完成各数码管的轮流点亮,根据数码管显示部分的电路设计可知,两个数码管的显示只需要控制6个单片机引脚。
其中AA、BB、CC、DD引脚连接的是74LS47芯片的输入引脚,单片机控制这四个引脚输出的2进制数经过74LS47译码,控制数码管显示相应的十进制数字其中lock1,lock2分别连接两个74HC573使能端,当lock1=0,lock2=1时,红色数码管保持当前读数不变,蓝色数码管根据AA、BB、CC、DD的输出信号改变数字,当lock1=1lock2=0时,蓝色数码管保持当前读数不变,红色数码管根据P1、P2、P3、P4的输出信号改变灯的循环循序。
该程序中包含了毫秒延时函数,具体仿真图见附录2,汇编语言程序设计如下。
ORG0000H
AJMPSTART1
ORG0030H
SAMEEQU4EH
START1:
MOVP1,#00H;无输入时无输出
START:
MOVA,P3;读P3口数据
ANLA,#1FH;取用P3口的低五位数据
CJNEA,#1FH,SHIY;对P3口低五位数据进行判断
AJMPSTART1
SHIY:
MOVSAME,A
LCALLYS;延时
MOVA,P3;读P3口的数据
ANLA,#1FH;取用P3口的低五位数据
CJNEA,#1FH,SHIY1;对P3口的低五位数据进行判断
AJMPSTART1;开关没有动作时无输出
SHIY1:
CJNEA,SAME,START1
CJNEA,#17H,NEXT1;P3.3=0时进入左转分支
AJMPLEFT
NEXT1:
CJNEA,#0FH,NEXT2;P3.4=0时进入右转分支
AJMPRIGHT
NEXT2:
CJNEA,#1DH,NEXT3;P3.1=0时进入紧急分支
AJMPEARGE
NEXT3:
CJNEA,#1EH,NEXT4;P3.0=0时进入刹车分支
AJMPBRAKE
NEXT4:
CJNEA,#1BH,NEXT5;P3.2=0时进入停靠分支
AJMPSTOP
NEXT5:
AJMPERROR;其他情况进入错误分支
LEFT:
MOVP1,#2AH;左转分支
YS:
MOVR7,#04H;延时
YS0:
MOVR6,#0FFH
YS1:
DJNZR6,YS1
DJNZR7,YS0
RET
Y1s:
MOVR7,#04H;延时
Y1s1:
MOVR6,#0FFH
Y1s2:
MOVR5,#0FFH
DJNZR6,Y1s2
DJNZR7,Y1s1
RET
Y100ms:
MOVR7,#66H;延时
Y100ms1:
MOVR6,#0FFH
Y100ms2:
DJNZR6,Y100ms2
DJNZR7,Y100ms1
RET
END
5结束语
紧张的毕业设计即将结束了,这期间让我学到了许多知识,让我懂得了对待科学要严谨、认真的道理。
这将是我在今后工作学习中的一笔宝贵财富。
本文在查阅了大量文献的基础上,结合实际应用问题,对模拟汽车转向灯控制系统进行了研究。
目前的转向灯系统都是电子结构的,采用感应式的模拟汽车向灯系统只是在少数高级轿车上有应用,因为目前使用的光电转向传感器大都是由国外厂商一统天下,因而,价格比较昂贵,很难普及。
本文利用单片机控制系统来实现模拟的汽车转向灯系统的状态。
原因是成本低廉,性能稳定,可靠性高,易于在大客车和低档轿车上普及应用,有广泛的市场应用前景。
关于单片机控制系统的设计,还有一些特殊情况未在本文所研究之内,仍有待进一步研究。
在设计的过程中也遇到了很多的问题。
首先是在程序的设计上,由于所控制的分支太多,所以花了很长时间才整理出程序,在三个不同时间的延时的设计过程中,由于自己忽略了定时器选择的定时模式,导致了延时计算的错误,在经过同学指点后多次计算终于实现了LED以10Hz和30Hz频率闪烁;其次在软件的安装方面,这次课设需要用到Visio画图软件,Protel、Keil仿真软件等一系列软件,因为电脑的问题致使安装的时候出现了各种状况,但在同学的帮助下最后还是安装成功;最后就是在仿真时,由于对软件环境不熟悉,不过在请教老师之后最终完成仿真。
毕业设计是对我们大学三年学习生活的实践和总结。
让我们把学会把理论运用到实际中。
整个设计中都倾注了胡老师大量的心血,对我的设计思路,设计方案的决定、构思都给予了重要的指导,使得我少走了不少弯路,我的毕业设计才能按时、顺利的完成。
同时还要感谢帮助过我的同学们,谢谢你们在设计中给我的支持与动力。
毕业设计中用到了软件来分别设计原理图和仿真图,同时也用到了等软件来编写运行控制程序。
在一定程度上加深了对以上软件的认识与理解,也加强了对这些软件的运用和掌握。
综合设计题目来源于生活,让