智能汽车自控雾灯培训资料Word格式.docx
《智能汽车自控雾灯培训资料Word格式.docx》由会员分享,可在线阅读,更多相关《智能汽车自控雾灯培训资料Word格式.docx(36页珍藏版)》请在冰豆网上搜索。
3.2.1单片机最小系统12
3.2.2传感器电路的设计12
3.2.3LCD显示电路13
3.2.4电源电路14
4.系统软件设计15
4.1系统程序结构15
4.2系统主函数15
4.3系统初始化程序17
4.4I/O端口定义以及延时程序18
4.5LCD显示程序19
4.6基于I2C协议的A/D转换程序20
5.样机制作24
5.1电路焊接24
5.2样机制作24
6.实验分析25
6.1实验测试25
6.2实验分析25
6.3改进25
归纳总结26
附录27
A系统原理总图27
B源程序28
参考文献34
致谢35
1.绪论
1.1国内外发展简况
随着技术重心向电子技术的倾斜,势必影响到汽车电子发展的方向。
就其技术本身而言也将面临着来自智能化、安全以及环保等多方面的苛刻要求。
《2013-2017年中国汽车电子行业市场竞争格局分析报告》,今后10年,电子技术在汽车工业中扮演着很大的作用。
中国汽车电子发展的主要趋势是安全性。
市场对于能够保证驾驶更加安全的技术和产品有着庞大的需求。
在汽车电子的诸多方向方面,也越来越向着智能化方向发展。
嵌入式系统无疑是当前最热门、最具有发展前景的IT应用之一。
嵌入式系统的应用可以使传统的电子系统升级成为智能化的电子产。
而单片机作为典型的嵌入式微控制器在智能化的进程中起到了不可磨灭的作用。
往往在许多产品的升级过程中只需升级程序即可,这样一来,大大缩短了生产周期,提高了系统的利用率。
雾灯,作为现代汽车的基础配置在我国汽车行业得到大大的发展,从1999年1月1日起,国家公安部对雾灯有了明确的规定:
机动车必须安装符合国家规范的雾灯。
同属欧盟的法国和德国车辆必须安装雾灯,但在能见度良好的情况下,绝对不允许使用雾灯。
目前中国市场上存在的车载雾灯都需要手动控制,智能化雾灯的出现将是未来几年汽车电子的必然趋势。
1.2单片机应用系统概述
单片机几乎渗透到我们生活的各个领域,小到程控模型玩具,大到导弹、飞机,都能看到单片机的踪迹。
单片机只是一个芯片,而单片机应用系统则是在单片机芯片的基础上扩展其他电路或芯片构成的能实现一定功能的计算机系统的总称。
在单片机系统中,单片机处于核心地位,是构成各类电子产品的硬件和软件基础。
通俗的说没有单片机的发明就没有嵌入式系统的产生。
下面简述单片机系统的主要运用领域。
1.工业生产自动化
中国是需求大国,在生产方面只有不断提高效率,改善产品质量,减小工作强度,才能使工业系统处于最佳状态,因此,无论是在过程控制、数据采集、质量检测或是批量生产上,都必须有单片机的参与。
2.器仪表自动化
面对人们对仪器仪表越来越智能化的要求,也只有单片机能够满足其在数字化、自动化、多功能化和人性化方面的条件了。
3.家电智能化
随着人们对物质生活越来越高的要求,智能家居也成了现代化都市生活的必须品,越来越多的家电被加上“电脑控制”这一说法,其实“电脑”就是单片机系统。
4.军工信息智能化
科技兴国,在很多高科技的军事武器上要是少了单片机的存在就成了一堆废铁,在飞机、雷达、导弹、潜水艇、坦克等各类武器装备上都有单片机置身其中。
1.3本次设计任务及主要特点
1.智能汽车自控雾灯设计要求及特点
1)在原有雾灯的基础上实现智能化的控制,而且加入了预警双闪灯的智能控制部分;
2)能够对白昼的不同条件进行区分;
3)进行光强补偿;
4)采用LCD显示方式,且带防水处理;
5)抗干扰能力强;
6)体积小、功耗低、便于嵌入到其他系统。
2.硬件电路的设计
1)技术方案论证;
2)元件选择。
3.系统软件的编写
1)软件的编写和编译检查;
2)基于实际硬件电路的软件测试。
4.样机实验测试
1)实验检查;
2)场景(有雾天气)模拟实验认证。
5.误差分析
1)误差的分析;
2)改进。
2.智能汽车自控雾灯的原理
2.1雾灯防雾原理简介
汽车在雾、雪和大雨等恶劣气候条件下,或者在烟尘弥漫的环境中行驶时,为了照亮前方道路,保障行车安全而必须采用雾灯照明。
下面介绍一下雾灯的外形和组成结构,它由反光镜、配光镜、灯泡、遮光罩和垂直灯光调节装置及外壳等组成。
光源的灯丝设计在反光镜抛物面的焦点上,经反光镜反射后形成与光轴平行的光束射出。
配光镜将光束经过扩散、折射后形成较宽的水平光束,并使其光形和照度符合法规要求。
雾灯内的遮光罩是为了将灯丝向反光镜上半部分照射的光线遮住,使其配光有一清晰的明暗截止线,即上暗下明。
在配光光形边缘上部的可见区域内尽可能的暗,而下部亮区两侧水平方向扩散角为50°
,形成一个左右横向的亮区,以满足既不使人眩目又可为安全行车提供良好的照明条件。
这样一来,即使是在恶劣天气导致的视线不清的行车条件下也能够给司机一个良好的警戒效果。
因此在大雾城时占44.9%的中国,雾灯是汽车的必须品。
2.2自控雾灯系统原理
在自控雾灯系统中,首先通过光敏电阻和高聚光LED构成的能见度传感器对行车环境中由恶劣天气造成的能见度下降的程度进行识别和判断,利用能见度下降对高聚光LED照射在光敏电阻上光强的变化而导致光敏电阻阻值变化的特性,给系统提供一个变化的电压值,在经过A/D转换提供给单片机处理系统,在程序中只要设置好合适的能见度反馈电压值便能对雾灯以及预警双闪灯进行合理化的自动控制。
当然,这一传感器电路同样可用作白、昼区分电路使用,白天和夜晚行车的情况区分开,将更有利于对能见度距离的判断。
这样一来,在程序上就能够对夜间行车时实际由外界环境(包括昼、夜)造成的能见度下降的情况进行合理的电压补偿。
图2.2.130k-50k光敏电阻感光特性曲线
图2.2.2智能汽车自控雾灯系统框图
图2.2.1为本次设计所用的30k-50k的光敏电阻的感光特性曲线,也正是运用光敏电阻的这一特性,实现了对环境能见度的区分和判断,得到了不同的反馈电压值,从而使雾灯实现了自动控制。
图2.2.2为本次设计的系统框图,主要分为以下几个模块:
能见度传感模块、A/D转换模块、雾灯模块和预警双闪灯模块。
通过能见度传感器得到外部环境的反馈电压,经A/D转换,用单片机做数据处理,最终实现雾灯和预警双闪灯的自动控制。
3.系统硬件设计
3.1技术方案论证与优化
本次设计的核心控制单元用的是Atmle公司的AT89C52芯片,就实现自动控制而言设计技术方案有多种,以下的两种技术方案正是本次设计所论证过的,具体电路如下:
能见度判定电路
(1)由4011与非门构成的电位判断电路:
图3.1.1由4011与非门构成的电位判断电路
图3.1.1是由两对光敏电阻和一个LED光源构成的电位判断电路,这也是光控开关的经典电路。
通过LED光源与光敏电阻之间的能见度的变化,结合匹配电阻得到三组不同的电压值,该压值正好是4011与非门处于不同的通断状态,从而实现三种不同能见度情况下的控制。
该设计的有优点是:
电路简单,反应速度快。
但是4011与非门只能根据器件本身对高低电平的判断,无法实现对具体能见度(能见度为多少M)进行实时的判断。
(2)由单片机控制系统构成的电位判断电路:
图3.1.2由单片机控制系统构成的电位判断电路
图3.1.2是在“挑战杯”比赛时所使用的由单片机作为核心控制单元的电位判断电路,该设计不但能够实现对反馈电压值的判断,而且还能对具体能见度的反馈电压值进行区分,这样一来,就能能够对环境能见度实现合理化的分段控制了。
这就是本次设计的智能汽车自控雾灯的硬件雏形。
图3.1.2能见度传感器实物
图3.1.2为能见度传感器实物图,运用了工程防水的设计思想,电路得到了极大地优化。
3.2单片机主机系统电路
本次设计的核心控制单元用的是Atmle公司的AT89C52芯片,该芯片具有如下特点:
(1)AT89C52系列单片机以8051为内核,和8051指令、管脚完全兼容。
(2)AT89C52系列单片机内的程序存储器是Flash工艺的,这种工艺的存储器,用户可以用电的方式瞬间擦除、改写。
(3)AT89C52采用静态时钟方式,可以节省电能。
(4)AT89C52支持ISP(在线编程),不需要把单片机从电路板取下来就可以擦写程序。
(5)AT89C52对开发设备要求很低,开发时间大大缩短。
(6)AT89C52对写入的程序可以进行加密,很好的保护了用户的劳动成果。
3.2.1单片机最小系统
图3.2.1单片机最小系统
P0口用于LCD1602的显示数据传输,P1.3和P1.4用于雾灯和预警双闪灯的控制。
3.2.2传感器电路的设计
图3.2.2能见度传感电路
由光敏电阻和高聚光LED构成,中间部分为雾感应区,通过光敏电阻上光强的变化实现能见度感应。
3.2.3LCD显示电路
图3.2.3LCD1602显示电路
第一脚GND:
接地。
第二脚VCC:
+5V电源。
第三脚VO:
对比度调整端。
使用时通过接一个10K的电阻来调节。
第四脚RS:
寄存器选择信号线。
第五脚RW:
读写信号线。
第六脚E:
使能端,当E由高电平跳变为低电平时执行命令。
第7-14脚:
8位数据线DB0-DB7。
第十五脚*VCC:
背光电源正极输入端。
第十六脚*GND:
背光电源负极输入端。
3.2.4电源电路
在设计中选用经典桥式整流,用LM7805来获得稳定的+5V直流电压。
LM7805的电参数如下:
(除特别说明,0<
T<
250℃,lo=500mA,Vi=10V,Ci=0.33μF,Co=0.1μF)
图3.2.4LM7805电参数
图3.2.5电源电路
4.系统软件设计
4.1系统程序结构
(1)I/O端口定义,字符串定义子程序以及延时子程序。
(2)基于LCD1602的显示模块,分为初始化子程序、写入子程序以及显示子
程序;
(3)基于I2C协议的PCF8591A/D转换模块,分为初始化子程序、起始总线与结束总线子程序、应答信号和非应答信号子程序、字节发送与接收子程序、通道选择子程序。
(4)系统初始化函数,对系统进行初始化,包括定时器初始化和变量初始化。
(5)主程序,分为系统初始化、以及各个子程序的调度经管等部分。
图4.1.1系统软件流程图
图4.1.1描述了各个模块之间的关系。
4.2系统主函数
本设计主程序的思想如下:
(1)系统初始化,LCD显示初始化,初始占空比设置为零。
(2)基于I2C协议的PCF8591的A/D转换的程序的设定。
(3)LCD显示内容设置,上层显示工作状态(白天或夜晚),下层显示大雾等级。
(4)大雾等级判断以及对应等级雾灯和预警双闪灯的控制情况。
系统主函数如下:
/**************************系统主函数***********************/
/*主函数*/
voidmain(void)
{
longtemp。
init_sys()。
//系统初始化
lcd_init()。
//LCD初始化
ZKB=0。
//设置起始占空比为0
loop1:
while
(1)//白天的工作状态
{
temp=pcf8591_readbyte(0x42)。
lcd_disp(temp)。
temp1=pcf8591_readbyte(0x41)。
pd(temp1)。
if(KB==1)
{
gotoloop2。
}
}
loop2:
while
(1)//夜间的工作状态
{
temp=pcf8591_readbyte(0x42)。
lcd_disp1(temp)。
if(KB==0)
gotoloop1。
4.3系统初始化程序
主要功能:
对系统进行初始化,包括定时器初始化和变量初始化。
程序如下:
/**********************系统初始化程序**********************/
voidinit_sys(void)//系统初始化函数
TMOD=V_TMOD。
//定时器初始化
TH0=V_TH0。
TL0=V_TL0。
TR0=1。
ET0=1。
EA=1。
}
voidtimer0(void)interrupt1using2/、中断函数
staticucharclick='
0'
。
//中断次数计数器变量
TH0=V_TH0。
//恢复定时器初始值
TL0=V_TL0。
++click。
if(click>
=100)click='
if(click<
=ZKB)//当低于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整
led=0。
else
led=1。
4.4I/O端口定义以及延时程序
该程序主要实现对硬件接入单片机的端口的设定以及机器反应时间的设定。
sbitled=P1^3。
sbitsda=P2^0。
sbitscl=P2^1。
sbitlcden=P2^7。
sbitlcdrs=P2^6。
sbitlcdrw=P2^5。
unsignedcharZKB。
longKB。
ucharcodetable[]="
DaytimeLevel"
ucharcode
table1[]={'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
}。
ucharcodetable2[]="
NightLevel"
/*延时函数*/
voiddelay_ms(uintxms)
uinti,j。
for(i=xms。
i>
0。
i--)
for(j=110。
j>
j--)。
//循环600*110次机器在这里执行需要一段时间也就达到了延时效果
4.5LCD显示程序
LCD液晶显示程序分为液晶初始化、读忙、写指令和写数据操作以及显示数据等。
液晶显示器是一块慢器件,所以在执行每条指令之前必须确定模块“忙”标志为低电平即不忙,否则此指令无效。
液晶显示程序如下:
voidwrite_dat(uchardat)//写入字符显示数据到LCD
lcdrs=1。
lcdrw=0。
P0=dat。
lcden=1。
lcden=0。
voidwrite_cmd(ucharcmd)//写入指令数据到LCD
lcdrs=0。
P0=cmd。
voidlcd_init()//LCD初始化设定
write_cmd(0x38)。
//16*2显示,8位数据
write_cmd(0x0c)。
//显示开,关光标
write_cmd(0x06)。
//移动光标
write_cmd(0x01)。
//清除LCD的显示内容
voidlcd_disp(longnumdis)
longdy。
write_cmd(0x80)。
//设置显示位置为第一行的第1个字符
for(num=0。
num<
16。
num++)
write_dat(table[num])。
//显示内容为“BrightnessLevel”
}
write_cmd(0x80+0x40+4)。
//设置显示位置为第二行的第4个字符
write_dat(table1[numdis/31])。
//显示为numdis/31的内容
write_cmd(0x80+0x40+8)。
//设置显示位置为第二行的第8个字符
dy=numdis*5*100/256。
//将规范电压设定为5V,分成256份
4.6基于I2C协议的A/D转换程序
A/D转换程序包括:
起动总线和结束总线程序、应答子函数和无应答信号程序、字节数据发送和据接收程序、A/D转换通道选择程序。
芯片PCF8591是基于I2C协议的4通道AD/DA转换模块。
具体程序如下:
/************基于I2C协议的PCF8591的程序初始化**********/
voidi2c_init()
sda=1。
_nop_()。
scl=1。
/*起动总线函数:
启动I2C总线,即发送I2C起始条件*/
voidi2c_start()
//发送起始条件的数据信号
sda=0。
//发送起始信号
scl=0。
//钳住I2C总线,准备发送或接收数据
/*结束总线函数:
结束I2C总线,即发送I2C结束条件*/
voidi2c_stop()
//发送结束条件的数据信号
//发送结束条件的时钟信号
//发送I2C总线结束信号
/*应答子函数主控器进行应答信号*/
voidack()
uchari。
while((sda==1)&
&
(i<
255))
i++。
/*非应答信号函数*/
voidnoack()
/*字节数据发送函数*/
voidi2c_writebyte(uchardat)
for(i=0。
i<
8。
i++)//要传送的数据长度为8位
if(dat&
0x80)//判断发送位
sda=1。
else
sda=0。
//置时钟线为高,通知被控器开始接收数据位
dat=dat<
<
1。
scl=0。
//8位发送完后释放数据线,准备接收应答位
/*字节数据接收函数*/
uchari2c_readbyte()
uchari,dat。
//置时钟线为低,准备接收数据位
//置数据线为输入方式
i++)
scl=1。
//置时钟线为高使数据线上数据有效
_nop_()。
dat=dat<
if(sda)
dat++。
//读数据位,接收的数据位放入d