毕业论文51单片机实现超声波测距报警系统汽车倒车.docx
《毕业论文51单片机实现超声波测距报警系统汽车倒车.docx》由会员分享,可在线阅读,更多相关《毕业论文51单片机实现超声波测距报警系统汽车倒车.docx(42页珍藏版)》请在冰点文库上搜索。
毕业论文51单片机实现超声波测距报警系统汽车倒车
基于单片机倒车防撞报警系统设计
摘要:
对于汽车倒车防撞问题,提出了将超声波测距仪和单片机结合于一体的方案,并给出了一种基于AT89C51单片机的倒车防撞报警系统的设计,对系统中控制部分、发射部分、接收部分、显示部分和报警部分出现的问题进行处理。
本文采用一种简单易行的测距原理建立了防撞报警系统,具体分析了倒车防撞系统的设计原理及各部分元件的设计方案,充分描述了超声波测距的原理及应用,并介绍了我国在超声波测距的发展现状,不过还有一些无法避免的测量误差,还需日益俱进的科学发展加以解决。
关键词:
AT89C51;超声测距;倒车防撞
1引言
1.1研究的目的和意义
随着社会经济的发展交通运输业飞速发展,汽车的数量在大副攀升。
交通拥挤状况也日趋严重,撞车事件屡屡发生,造成了不可避免的人身伤亡和经济损失。
针对这种情况,设计一种响应快,可靠性高且较为经济实用的汽车防撞报警系统势在必行。
超声波测距法是最常见的一种距离测距方法,应用于汽车停车的前后左右防撞的近距离和低速状况,并且在汽车倒车防撞报警系统中,超声波作为一种特殊的声波,同样具有声波传输的基本物理特性——折射,反射,干涉,衍射,散射。
超声波测距即是利用其反射特性,当车辆后退时,超声波距离传感器利用超声波检测车辆后方的障碍物位置,并利用指示灯及蜂鸣器把车辆到障碍物的距离及位置通知驾驶人员,起到安全的作用。
1.2国内外现状
1.21国内外发展的状况以及存在的问题
汽车倒车防撞测距报警器是国家安全技术发展期间重点开发的科研项目之一。
以往的汽车倒车测距一般有四种:
1嘀嘀声加闪光、2音乐声加闪光、3语音声加闪光、4倒车到危险距离时发出警报声的超声波倒车报警器。
由于很多研究都采用的是特殊难购且稀有的专用元件,使其难以推广。
而本设计采用国内生产的通用元件,成本较低廉,并且使其在整个倒车过程中自动测量车尾到最近障碍物的距离,在倒车到极限距离时会发出急促的警告声,提醒驾驶员注意刹车,避免事故的发生。
1.22现有的倒车雷达存在的问题
最大有效探测距离的问题:
通过调查得知大多数驾驶员的习惯会使行人只有不到1s的时间脱离危险。
这样一来,报警在减速时就很紧张,明显会感到预警时间不足,引起不必要的事故发生。
1.3本文研究的主要内容
本论文概述了超声波检测的发展及工作原理,阐述了超声波传感器的原理、特点、分类;对于报警系统的一些主要参数进行了讨论和研究,以及在超声波测距系统功能的基础上,提出了报警系统的总体结构;并且设计了系统发射、接收电路,并仔细介绍了系统各设计单元的原理及它们的工作原理。
2超声波原理介绍
2.1超声波的基本理论
超声波是一门以物理、电子、机械、以及材料科学为基础的、各行各业都要使用的通用技术之一。
该技术在国民经济中,对提高产品质量,保障生产安全和设备安全运作,降低生产成本,提高生产效率特别具有潜在能力。
因此,我国对超声波的研究特别活跃。
超声技术是通过超声波的产生、传播以及接收的物理过程完成的。
超声波具有聚束、定向及反射、投射等特性。
按超声波振动辐射大小不同大致可以分为:
用超声波使物体或物性变化的功率应用,称之为功率超声;用超声波获取信息,称为检测超声。
超声波是听觉阈值之外的振动,其频率范围在10
——10
Hz,其中通常的频率大约在10
——3
之间。
超声波在超声场(被超声波充满的范围)传播时,如果超声波的波长与超声场相比,超声场很大,超声波就像处在一种无限的介质中,超声波自由地向外扩散;反之,如果超声波的波长与相邻介质的尺寸相近,则超声波受到界面限制不能自由的向外扩散。
2.11超声波的传播速度
超声波在介质中可以产生三中形式的振荡波:
横波——质点振动方向垂直于传播方向的波;纵波——质点振动方向与传播方向一致的波;表面波——质点振动介于纵波和横波之间,沿表面传播的波。
横波只能在固体中传播,纵波能在固体液体中和气体中传播,表面波随深度的增加其衰减很快。
为了测量各种状态下的物理量多采用纵波形式的超声波。
超声波的频率越高,越与光波某些特性相似。
超声波与气其他声波一样,其传播速度与介质密度和弹性特性有关。
超声波在气体和液体中,其传播速度C
=(
)
式中
——介质的密度;
——绝对压缩系数。
可以推导出超声波在空气种传播速度
。
(T为环境温度)。
超声波在固体中的传播速度分两种情况:
(1)纵波在固体介质中的传播速度与介质的形状有关。
(细棒)
(薄板)
(无限介质)
式中E——杨氏模具;
——泊松系数;
K——体积弹性模具;
G——剪片弹性模。
(2)横波声速公式为
(无限介质)
在固体中,
介于0——5之间,因此一般可视为横波声速为纵波的一半。
2.12超声波的物理性质
当超声波传播到两种特性不同的介质的平面上时,一部分被反射;另一部分透射过界面,在相邻的介质内部继续传播;这样的两种情况称之为超声波的反射和折射,如图1所示:
(1)超声波的反射和折射
当超声波传播到两种特性阻抗不同介质的平面分界面上时,一部分超声波被反射;另一部分透射过界面,在相邻介质内部继续传播;这样的两种情况称之为超声波的反射和折射,如图2.1.1所示。
声波的反射系数和透射系数可以分别由如下两
式求得:
图1声波反射
式中:
——分别为声波的入射角和反射角;
——分别为两介质的特征阻抗,其中
为反射波和折射波的速度。
反射角、折射角与声速
满足折射定律关系式:
。
当超声波垂直入射界面时,即
,则:
如果sin
>
,入射波完全被反射,在相邻两个介质中没有折射波。
如果超声波斜入射到两个固体介质面或两粘滞弹性介质面时,一列斜入射的纵波不仅产生反射纵波和折射纵波,而且还产生反射横波和折射横波。
(2)超声波的衰减
超声波在一种介质中传播,其声压和声强按指数函数规律衰减。
在平面波的情况下,距离声源x处的声压p和声强I的衰减规律如下:
式中:
——距离声源x=0处的声压和声强;
——超声波与声波间的距离;
A——衰减系数,单位为
(奈培/厘米)。
(3)超声波的干涉
如果在一种介质中传播几个声波,于是产生波的干涉现象。
若以两个频率相同,振幅
和
不等,波程差为d的两个波干涉为例,该两个波合成振幅为
,其中
为波长。
从上式看出,当d=0或d=
(
为整数)时,合成振幅
达到最大值;当d=
时,合成振幅
为最小值。
当
时,
;当d
的奇数倍时,两波相互抵消合成幅度为0。
由于超声波的干涉,在辐射器的周围形成一个包括最大最小的扬声场。
2.13超声波对声场产生的作用
(1)机械作用
超声波传播过程中,会引起介质质点交替的压缩与伸张,构成了压力的变化,这种压力的变化将引起机械效应。
超声波引起质点的运动,虽然位移和速度不大,但是与超声波振动的频率的平方成正比的质点的加速度却很大。
有时足以达到破坏介质的程度。
(2)空化作用
在流体动力学指出,存在于液体中的微气泡在声场的作用下振动,当声压达到一定的值时,气泡将迅速膨胀,然后突然闭合,在气泡闭合时产生冲击波,这种膨胀、闭合、振动等一系列动力学过程称为空化。
(3)热学作用
如果超声波作用于介质时被介质所吸收,实际上也就是有能量吸收,同时,由于超声波的振动,使介质产生强烈的高频振荡介质相互摩擦产生热热量,这种能量使介质温度升高。
2.2超声波测距系统原理
在超声探测电路中,发射端得到输出脉冲为一系列方波,其宽度为发射超声的时间间隔,被测物距离越大,脉冲宽度越大,输出脉冲个数与被测距离成正比。
超声测距大致有以下方法:
①取输出脉冲的平均值电压,该电压(其幅值基本固定)与距离成正比,测量电压即可测得距离;②测量输出脉冲的宽度,即发射超声波与接收超声波的时间间隔t,故被测距离为S=1/2vt。
本测量电路采用第二种方案。
由于超声波的声速与温度有关,如果温度变化不大,则可认为声速基本不变。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
超声波测距适用于高精度的中长距离测量。
因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。
如图2,超声波测距的算法设计:
超声波在空气中传播速度为每秒钟340米(15℃时)。
X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,则有340m×0.03S=10.2m。
由于在这10.2m的时间里,超声波发出到遇到返射物返回的距离如下:
图2测距原理
超声波测距是借助于超声脉冲回波渡越时间法来实现的。
设超声波脉冲由传感器发出到接收所经历的时间为t,超声波在空气中的传播速度为c,则从传感器到目标物体的距离D可用下式求出:
D=ct/2
超声波测距器的系统框图如下图所示:
基本原理:
经发射器发射出长约6mm,频率为40KHZ的超声波信号。
此信号被物体反射回来由接收头接收,接收头实质上是一种压电效应的换能器。
它接收到信号后产生mV级的微弱电压信号。
2.3规格参数
2.31主要功能
1、距离测量;
2、温度测量;
3、光亮度测量;
2.32基本参数
(1)工作电压:
4.5V~5.5V。
特别说明,绝对不允许超过5.5V
(2)功耗电流:
最小1mA,最大20mA
(3)谐振频率:
40KHz;
(4)探测距离范围:
4毫米~4米。
误差:
4%;
(5)(特别说明,探测最近距离为4mm,最远距离为4米,数据连续输出,不需要任何设置。
)
(6)测量温度范围:
0℃至+100℃;精度:
1℃
(7)测量光照度范围:
能测量出明亮和黑暗;
(8)数据输出方式:
iic和uart(57600bps)两种方式,用户任选;其中UART方式,是以7个字节为一组,以0x55开头的3个数据是距离数值;以0x66开头的2个数据是温度数据;以0x77开头的2个数据是光照度数据。
0x55\0x66\0x77是为区分3个数据而增加的数据头;
(9)时间限制:
支持如下2种探测方式;1、持续探测;2、受控间歇探测;
(10)距离数据格式:
以毫米为最小数据单位,双字节16进制传输,前高后低;
(11)温度数据格式:
以摄氏度为最小数据单位,单字节16进制传输;光照数据格式:
单字节16进制传输;光线暗时数值大,光线亮时数值小;
(12)工作温度范围:
0℃至+100℃
(13)存放温度:
-40℃至+120℃
(14)外形尺寸:
48mm*39mm*22mm(H)
(15)固定孔尺寸3*Φ3mm间距:
10mm
发射部分的电脉冲电压很高,但是由障碍物回波因其的压电晶片产生的射频电压不过几十毫伏,要对这样小的信号进行处理就必须放大到一定的幅度。
接收部分就由三级放大电路,检波电路及门限判别电路构成的,其中包括杂波抑制电路。
最终达到对回波进行放大检测,产生一个单片机能够识别的中断信号作为回波到达的标志。
但是由于超声传感器固有特性,即盲区的存在,对于回波的接收和处理造成了相当程度的影响。
3系统硬件设计
系统硬件原理图如图3及PCB双面板如图4:
图3系统硬件原理图
图4PCB双面板
3.1最小单片机模块
本方案使用的单片机是AT89C51。
AT89C51是一个低电压,高性能CMOS8位单片机。
片内含4KB的可反复擦写的Flash只读程序存储器和128B的随机存取数据存储器(RAM)。
器件采用ATMEL公司的高密、非易失性存储技术产生,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口。
AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是反复擦写的Flash存储器可有效地降低开发成本。
单片机最小模块常包含:
复位电路,晶振电路,p0口排阻,电源接口电路,串口电路(本单片机程序都是从开发板上烧写进入,无需增加串口电路,可节约成本)。
3.2超声波发射接收模块
由单片机产生40KHz的方波,直接驱动CD4049芯片,后面的CD4049则对40KHz频率信号进行调理,使超声波传感器产生谐振。
3.3报警电路设计
系统报警电路由一个三极管和一个喇叭组成。
图5系统报警电路
3.4LCD1602显示器模块
采用LCD1602可以作为外围输出设备,帮助超声波测距后显示出具体的距离,其具体使用方法和参数如下:
3.4.1LCD1602主要技术参数:
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
3.4.2LCD1602各引脚功能:
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
4系统软件程序
/*============================================================
08电信毕业生
[注:
AT89x51使用12M或11.0592M晶振,实测使用11.0592M]
=============================================================*/
//全局变量,音符索引数
unsignedcharmusicNum;
//音符播放时定时寄存器处值TH0
unsignedcharcodehigh_buff[]={240,229,240,229,240,229};
//音符播放时定时寄存器处值TL0
unsignedcharcodelow_buff[]={6,13,6,13,6,13};
#include//器件配置文件
#include
#defineRXP0_3
#defineTXP0_2
#defineLCM_RWP0_5//定义LCD引脚
#defineLCM_RSP0_6
#defineLCM_EP0_4
#defineLCM_DataP2
//定义按键和蜂鸣器的引脚
//sbitKEY=P0^7;
sbitSOUNDER=P0^7;
//#defineKey_DataP2_0//定义Keyboard引脚
//#defineKey_CLKP3_2
#defineBusy0x80//用于检测LCM状态字中的Busy标识
//函数声明集
voiddelayms(unsignedintms);
voidLCMInit(void);
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);
voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData);
voidDelay5Ms(void);
voidDelay400Ms(void);
voidDecode(unsignedcharScanCode);
voidWriteDataLCM(unsignedcharWDLCM);
voidWriteCommandLCM(unsignedcharWCLCM,BuysC);
voiddelayfm(unsignedintx);
//voidTimer0(void)interrupt1;
unsignedcharReadDataLCM(void);
unsignedcharReadStatusLCM(void);
unsignedcharcodename[]={"XXXXXXXXXX"};
unsignedcharcodenumber[]={"20082222222"};
unsignedcharcodeCls[]={""};
unsignedcharcodeASCII[15]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};
staticunsignedcharDisNum=0;//显示用指针
unsignedinttime=0;
unsignedlongS=0;
bitflag=0;
unsignedchardisbuff[4]={0,0,0,0,};
/********************************************************/
//延时函数用于蜂鸣器的延时
voiddelayfm(unsignedintx)
{
unsignedchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
//蜂鸣器主函数
voidfengmingqi(void)
{
//TMOD=0x00;//定时器0工作在模式0
TH1=(8192-700)/32;//定时器赋初值
TL1=(8192-700)%32;
//EA=1;//开总中断
ET1=1;//开定时器0定时溢出中断
SOUNDER=0;
for(musicNum=1;musicNum<6;musicNum++)
{
TR1=1;
delayfm(500);
TR1=0;
delayfm(50);
}
}
//无源蜂鸣器中断采用t1定时器
voidTimer1(void)interrupt3
{
//蜂鸣器输出电平取反
SOUNDER=~SOUNDER;
TH0=high_buff[musicNum];
TL0=low_buff[musicNum];
}
/********************************************************/
//写数据
voidWriteDataLCM(unsignedcharWDLCM)
{
ReadStatusLCM();//检测忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0;//若晶振速度太高可以在这后加小的延时
LCM_E=0;//延时
LCM_E=1;
}
//写指令
voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//BuysC为0时忽略忙检测
{
if(BuysC)ReadStatusLCM();//根据需要检测忙
LCM_Data=WCLCM;
LCM_RS=0;
LCM_RW=0;
LCM_E=0;
LCM_E=0;
LCM_E=1;
}
//读数据
unsignedcharReadDataLCM(void)
{
LCM_RS=1;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
return(LCM_Data);
}
//读状态
unsignedcharReadStatusLCM(void)
{
LCM_Data=0xFF;
LCM_RS=0;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
while(LCM_Data&Busy);//检测忙信号
return(LCM_Data);
}
/********************************************************/
voidLCMInit(void)//LCM初始化
{
LCM_Data=0;
WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号
Delay5Ms();
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,1);//显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1);//关闭显示
WriteCommandLCM(0x01,1);//显示清屏
WriteCommandLCM(0x06,1);//显示光标移动设置
WriteCommandLCM(0x0F,1);//显示开及光标设置
}
//按指定位置显示一个字符
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)
{
Y&=0x1;
X&=0xF;//限制X不能大于15,Y不能大于1
if(Y)X|=0x40;//当要显示第二行时地址码+0x40;
X|=0x80;//算出指令码
WriteCommandLCM(X,1);//发命令字
WriteDataLCM(DData);//发数据
}
//按指定位置显示一串字符
voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData)
{
unsignedcharListLength;
ListLength=0;
Y&=0x1;
X&=0xF;//限制X不能大于15,