超声波倒车雷达系统设计.docx
《超声波倒车雷达系统设计.docx》由会员分享,可在线阅读,更多相关《超声波倒车雷达系统设计.docx(25页珍藏版)》请在冰豆网上搜索。
![超声波倒车雷达系统设计.docx](https://file1.bdocx.com/fileroot1/2023-6/7/8fab6d7d-ca86-43d4-9112-5980a3814611/8fab6d7d-ca86-43d4-9112-5980a38146111.gif)
超声波倒车雷达系统设计
超声波倒车雷达系统设计
摘要:
基于超声波测距的汽车倒车雷达系统是在了解超声波测距原理以及51单片机基本原理的基础上提出并实现的,该系统工作时,在单片机控制下超声波传感器发出脉冲信号,超声波在传播过程中遇到障碍物后反射,反射波由超声波接收装置接收后送至51单片机处理,从而实现汽车倒车过程中障碍物的实时监测并通过显示屏以及警报器提醒驾驶员。
本系统是由以STC89C51单片机作为主控模块,超声波发射接收模块构成传感器模块,LCD显示模块,蜂鸣器报警模块等硬件系统以及软件程序设计组成。
关键词:
单片机;超声波测距;LCD显示;报警;程序设计
Thedesignofultrasonicreversingradarsystem
Abstract:
Automobilereversingradarsystembasedonultrasonicdistancemeasurementisintheunderstandingoftheprincipleofultrasonicdistancemeasurementandthebasicprincipleof51singlechipmicrocomputerbasedontheproposedandimplemented,Thesystemisworking,Underthecontrolofthemicrocontrollerultrasonicsensorsendsoutpulsesignals,UltrasonicobstacleintheprocessofpropagationafterreflectionThereflectedwavefromtheultrasonicreceivingdevicereceivestheevacuationto51singlechipprocessing,Soastorealizereal-timemonitoringobstaclescarreversingtheprocessobjectandthroughthedisplayandalarmtoremindthedriver.ThissystemiscomposedofMCUSTC89C51asthemaincontrolmodule,Ultrasonictransmittingandreceivingmodulessensormodule,LCDdisplaymodule,Thebuzzeralarmmoduleofhardwaresystemandsoftwareprogramdesigncomposition.
Keywords:
Singlechipmicrocomputer;Ultrasonicranging;LCDdisplay;Alarm;Programdesign
第一章绪论
1.1引言
近年来,随着科技带动汽车行业的快速发展以及人们生活水平的不断提高,我国汽车数量正在逐年增加。
同时对于一名驾驶员来说,倒车是必须掌握的技能,与前进相比倒车更加需要小心谨慎,在街道,车库,停车场等场所倒车时,往往因为驾驶员无暇同时顾及汽车前后和四周以及尾部视线盲区等原因引起的交通事故不在少数,这些事故中轻则对自己的车和他人的财物造成损伤,重则可能危及人的性命。
现如今后视镜已越来越不能满足人们安全倒车的需求了。
据初步调查统计,15%的汽车事故是由汽车倒车后视不良造成的。
因此,人们对汽车倒车操纵的便捷性提出了更高的要求,增加汽车的后视能力研制汽车尾部探测障碍物的倒车雷达成为近年来的热点之一,然而安全避障的前提是快速准确的测量障碍物与汽车之间的距离。
超声波具有在传播中不受电磁场,色彩以及关照等影响的特性,同时超声波传感器处理信息简单,硬件易于实现以及价格低廉等优点,被人们广泛的用作测距传感器。
本文基于STC89C51单片机以及HC-SRF04超声波测距模块进行研究,从而设计实现了超声波测距倒车雷达。
1.2超声波测距原理以及理论分析
声波是物体机械振动状态(或能量)的传播形式,一般来说,频率在20Hz—20000Hz之间的机械波能被人耳感知为声波,频率低于20Hz的机械波为次声波,频率高于20000Hz的机械波称为超声波。
而高于100MHz的机械波则称之为特超声波。
由于超声波具有方向性好,穿透能力强,易于获得较集中的声能的特性一次常常被用于测距。
超声波测距是依据声波从发射到接收过程中的在空气介质中的传播时间测出声波的传播距离的。
本文使用的超声波模块是借助于超声脉冲回波渡越时间法来实现的。
设超声波脉冲由传感器发出到接收所经历的时间为t,超声波在空气中的传播速度为c,则从传感器到目标物体的距离D可用下式求出
D=ct/2
第二章系统概述
2.1方案选择
2.1.1方案一
超声波测距模块采用SRF08测距模块对障碍物的位置进行检测,为了保证检测对车身的准确定位,系统设计采用3个模块分别在尾部和左右同时检测,当检测到障碍物距离车身小于1米时系统红灯闪烁同时蜂鸣器报警在测量过程中通过LCD显示屏实时显示车身尾部以及左右距离障碍物的距离。
由于SRF08超声波模块接口采用I2C总线接口设计,可以与PIC等总舵处理器配合使用,因此该模块使用方便。
SRF08是一款高性能的双探头超声波,其探测距离为3厘米-6米,独特的触发指令可以让SRF08工作在连续探测模式下,也就是能够自动在完成一个距离探测后自动进行第二次探测,相当于连接了一个微处理器。
同时SRF08超声波测距模块内部含有36个寄存器,测距模式需要对相应寄存器进行操作,在测距模式下每向命令寄存器写入一次命令就会启动一次测距,启动测距时,回波记录缓冲区数据也将同时清除。
测量得到的距离将按照测量的顺序按照2B为单位一次进村入寄存器,由于一次测距需要一定的等待时间,这个时间可以通过主控芯片修改SRF08测量范围寄存器中的数据来改变。
在等待时间片刻,可以对挂载总线上的其他模块进行启动测距操作,,从而实现3个测距模块的在短时间内工作,达到高效,实时,准确的测距定位。
由于需要直观明了的显示3个位置的测距信息,考虑到显示美观以及显示效果,需要显示位宽较高的显示器,因此该设计方案选择LCD12864显示实时信息。
系统软件部分主要包括主函数部分,LCD显示部分,包括对LCD显示屏的初始化,写命令,写数据等,对SRF08超声波测距部分包括对I2C总线的启动,停止,读写数据以及距离测量以及判断等部分。
另外包含延时,报警等部分。
系统框图如图2.1所示
图2.1SRF08超声波模块测距系统框图
2.1.2方案二
超声波模块采用SRF04超声波模块对障碍物进行检测,STC89C51单片机作为主控制器,LCD1602做显示输出,蜂蜜器报警。
HC-SRF04超声波测距模块采用IO触发测距,IO口给至少10us的高电平信号,启动模块,当模块启动后,超声波接收器接收到回波时会在输出引脚输出高电平,当主控芯片检测到输出信号就可以开定时器计,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到实时测距的功能。
由于SRF04模块自身不含寄存器,因此在测量时需要耗费单片机硬件资源,因此此方案采用尾部单传感器测量,如果采用LCD12864显示器做显示输出,则会浪费大量资源,因此选用LCD1602做显示输出部分。
通过主控芯片以以及超声波模块测量出汽车尾部句障碍物的距离,与系统的报警阈值进行比较。
超过阈值,报警达到有效的避免与障碍物碰撞的目的。
该方案系统软件部分包含,STC89C51单片机的时钟,中断的编写,LCD1902显示部分包含对液晶显示器的初始化,命令的写入,以及数据的写入,对SRF04超声波测距模块的控制。
从以上两种方案可以看出方案一测量精度高,同时超声波模块较多能很好的实现基本功能,但是硬件成本较高,,电路较为复杂,同时软件设计较为复杂。
方案二电路设计简单,同时检测灵敏,软件设计较为简单易于实现。
因此本文设计基于方案二进行。
2.2系统设计原理
该系统由STC89C51单片机向SRF04超声波测距模块发送启动信号,同时接收SRFO4模块的返回信号,由单片机内部时钟记录返回信号持续时间并计算出距离,将所测距离送至LCD1602显示,同时与系统距离阈值进行比较,如果小于阈值则通过蜂鸣器报警。
2.3系统组成
本课题以89S51单片机为核心设计的一种超声波测距倒车雷达系统,系统整体框图主要由主控制器、超声波测距模块、单片机复位、时钟振荡、液晶显示、报警提示组成。
系统框图如图2.2所示。
图2.2系统基本框图
2.3.1主控制器
单片机STC89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。
2.3.2显示电路
显示电路采用LCD1602液晶显示屏,从P0口输出数据。
2.3.3HC-SR04超声波模块
经发射器发射出长约6mm,频率为40KHZ的超声波信号。
此信号被物体反射回来由接收头接收,接收头实质上是一种压电效应的换能器。
它接收到信号后产生mV级的微弱电压信号并通过接收电路将信号放大得到回送信号。
第3章系统硬件设计
3.1主控芯片STC89C51
3.1.1单片机特点:
有优异的性价比。
集成度高,体积小,又很高的可靠性
控制功能强
单片机的系统扩展和系统配置都比较典型、规范、且容易构成各种规模的应用系统。
3.1.2内部结构
MCS-51单片机是在一块芯片上集成了CPU、RAM、ROM定时器、计数器和多功能I/O口。
其中包括:
一个8位CPU;
4KBROM或EPROM
128字节RAM数据存储器
4个8位并行I/O口,其中P0,P2为地址/数据线,可寻址64KBROM和64KBRAM;
一个可编程全双工串行口;
具有5个中断源,两个优先级,嵌套中断结构;
两个16位定时/计数器;
一个片内振荡器及时钟电路。
3.1.3引脚图以及部分引脚功能
图3.1STC89C51引脚图
部分引脚功能:
Vcc,Vss为电源引脚;
XTAL2(18脚):
接外部晶体和微调电容的一端;在89C51片内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体固有频率。
XTAL1(19脚):
接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的输入端。
在采用外部时钟时,该引脚必须接地。
RST/VPD(9脚):
RST是复位信号输入端,高电平有效。
ALE/PROG(30脚):
地址锁存允许信号端。
PSEN(29脚):
程序存储允许输出信号端。
EA/Vpp(31脚):
外部程序存储器地址允许输入端/固化编程电压输入端。
输入/输出端口P0/P1/P2/P3
3.2液晶显示模块
3.2.1模块简介:
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。
实物图如图3.1所示。
图3.1LCD液晶显示器实物图
602LCD主要技术参数:
显示容量:
16×2个字符;
芯片工作电压:
4.5—5.5V;
工作电流:
2.0mA(5.0V);
模块最佳工作电压:
5.0V;
字符尺寸:
2.95×4.35(W×H)mm;
3.2.2引脚功能说明:
第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脚:
背光源负极。
3.2.3系统显示模块电路
3.3超声波测距模块
3.3.1模块简介
超声波测距采用HC-SR04超声波传感器实现,该模块能提供2cm—400cm的非接触式距离感测功能,测距精度可达到3mm,模块包括超声波发射器,接收器,以及控制电路。
模块实物图如图3.2所示
图3.2HC-SR04超声波模块
3.3.2模块工作原理:
1)采用IO触发测距,通过单片机给至少10us的高电平信号;
2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
3)有信号返回,通过IO输出一高电平,高电平持续的时间就是即为声波在介质中的传播时间。
4)超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;
3.3.3模块电气参数
引脚功能:
提供5V正电源,GND为电源地线,TRIG触发控制信号输入端,ECHO回响信号输出端。
3.3.4系统超声波模块电路
3.4报警电路模块
3.4.1蜂蜜器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电分为有源与无源之分,本文采用无源蜂鸣器。
3.4.2系统报警电路模块
第四章系统软件设计
4.1主程序设计
4.1.1主程序简介
本系统大致流程包括先开始,对LCDl602液晶显示器进行初始化,然后对单片机时钟惊醒初始化,初始化结束后,启动超声波测距,打开时钟,接收回波信号。
关闭时钟,计算距离,通过LCD显示,并与系统距离阈值进行比较。
低于系统阈值报警。
同时将数据送至LCD显示。
程序流程图如图4.1所示。
图4.1系统流程图
4.1.2程序代码
voidmain(void)
{
unsignedcharTempCyc;
unsignedlongjuli;
inti;
Delay400Ms();//启动等待,等LCM讲入工作状态
LCMInit();//LCM初始化
Delay5Ms();//延时片刻(可不要)
DisplayListChar(0,0,mcustudio);
DisplayListChar(0,1,email);
ReadDataLCM();
for(TempCyc=0;TempCyc<10;TempCyc++)
while
(1)
{
TMOD=0x01;//设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1;//允许T0中断
EA=1;//开启总中断
while
(1)
{
StartModule();
//DisplayOneChar(0,1,ASCII[0]);
while(!
RX);//当RX为零时等待
TR0=1;//开启计数
while(RX);//当RX为1计数并等待
TR0=0;//关闭计数
juli=Conut();//计算
if(juli<30)
{
display(juli);
LED=0;
beep();
LED=1;
}
display(juli);
delayms(70);//80MS
}
}
}
4.2LCD显示模块程序设计
4.2.1模块简介
液晶显示部分主要显示“biyesheji”和所检测的距离。
显示开始先对LCD初始化,把LCD定位到首行首列,然后显示字符“biyesheji”到第一行,LCD第二行,显示字符“juli:
X.XXMM”。
当测量距离超过超声波模块的最大测量范围时,显示“juli:
-.--MM”。
程序流程图如图4.2所示。
图4.2显示模块程序流程图
4.2.2程序代码
写数据函数:
该函数主要用于向1602发送数据,参数WDLCM为需要传送的数据
voidWriteDataLCM(unsignedcharWDLCM)
{
ReadStatusLCM();//检测忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0;//若晶振速度太高可以在这后加小的延时
LCM_E=0;//延时
LCM_E=1;
}
写指令函数:
该函数主要功能为向1602写入用户指令,指令码通过参数WCLCM传送,参数BuysC为1602显示器忙信号,用于检测1602是否处于忙状态。
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);
}
初始化函数:
该函数主要用于对1602显示器的初始化,例如显示模式的设置,设置屏显,光标设置等等。
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(0x0c,1);//显示开及光标设置
}
字符显示函数:
该函数主要用于在1602指定位置显示一个字符,字符的位置通过坐标X,Y确定,其中X为列坐标,Y为行坐标。
参数Ddata为需要具体显示的字符。
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)
{
Y&=0x1;
X&=0xF;//限制X不能大于15,Y不能大于1
if(Y)X|=0x40;//当要显示第二行时地址码+0x40;
X|=0x80;//算出指令码
WriteCommandLCM(X,1);//发命令字
WriteDataLCM(DData);//发数据
}
字符串显示函数:
该函数主要用于在1602中显示字符串,坐标通过参数X.Y确定,其中X为列坐标,Y为行坐标。
字符串通过指针Ddata确定。
voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData)
{
unsignedcharListLength;
ListLength=0;
Y&=0x1;
X&=0xF;//限制X不能大于15,Y不能大于1
while(DData[ListLength]>0x19)//若到达字串尾则退出
{
if(X<=0xF)//X坐标应小于0xF
{
DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符
ListLength++;
X++;
}
}
}
4.3超声波测距模块程序设计
4.3.1模块简介
该模块主要用于驱动超声波模块,实现启动模块,读取超声波模块回送信号的作用,并根据超声波测距原理计算出障碍物的距离。
为1602显示提供实时数据。
4.3.2模块代码
模块启动函数:
该函数主要是为超声波硬件模块提供启动时需要的10us的高电平。
voidStartModule()//启动模块
{
TX=1;//启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
测距函数:
该函数主要用于计算实际测得的距离,通过单片机的时钟测得的时间与声波在空气中的传播速度计算求得。
实际的距离通过参数S返回。
unsignedlongConut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
returnS=(time*1.7)/100;//算出来是CM
}
距离显示函数:
该函数主要用于对采集回来的数据与模块可提供的准确测距范围进行比对,如果超出量程则显示-.--,如果在精度范围内则显示具体的数据。
显示需要的数据通过参数S传入。
voiddisplay(unsignedlongS)
{
if((S>=700)||flag==1)//超出测量范围显示“-”
{
flag=0;
DisplayOneChar(6,1,ASCII[11]);
DisplayOneChar(7,1,ASCII[10]);//显示点
DisplayOneChar(8,1,ASCII[