1、MICROCOMPUTERULTRASONICMEASURE基于单片机的倒车雷达的设计1引言本设计是基于单片机的倒车雷达系统,属于嵌入式设计。论文共分为五个部分,主要阐述倒车雷达系统的设计背景、应用现状、总体设计、基本原理、软件设计、硬件设计以及最终设计结果。紧紧围绕着单片机嵌入式系统的设计思想,“软件跟着硬件走,硬件跟着功能走”,在充分理解基本原理的基础上,通过阅读文献比较其他人的设计,总结得出一种最优的设计方案。结合系统的需求和可行性,对系统进行模块化的拆分,分成多个基本模块。然后在每个模块中进行元件的选择与比较,选出性价比最高的元件,并且进行硬件电路的连接和软件设计。当然也要同时兼本模块
2、与其他模块之间在尺寸、位置及连接上的协调。设计中注意软硬件合理性、灵活性和稳定性。第一章中主要介绍了倒车雷达的国内外应用现状,以及本设计突出的特点。第二章中主要阐述了整体设计、模块划分、基本原理以及元件的选择。第三章以总分的结构介绍了系统的硬件设计。第四章阐述了程序设计的原理以及程序流程。第五章比较零散的展示了本次设计的结果,包括一些重要的仿真、测试、调试过程以及最终的功能演示和PCB图。除此之外,我也在论文中把自己大学四年里所学到的一些实用的单片机设计技巧与大家分享,希望本设计不仅可以让各位老师喜欢,也会有真正实际应用的价值。基于单片机的倒车雷达的设计21绪论11设计倒车雷达的目的和意义倒车
3、雷达这些年来逐渐的深入人心,如今的司机已经不再是一个特定的职业,开车已成为人们普遍具备的一项基本技能。但是城市交通压力越来越大,如何在狭小的地方安全的停车倒车成为人们日益关心的一个话题,倒车雷达应运而生,它的出现可以帮助司机观察车后的视觉盲区,确保倒车的安全。倒车雷达本身也成为衡量一辆好车的标准。因此对它的深入研究具有很强实用性。12国内外应用现状如今的倒车雷达已经脱离早期的“倒车请注意”和红外测距,现在一些基础级的倒车雷达是通过判断距离发出不同程度的“嘀嘀嘀”声音,高端的一些具有摄像头的后视功能,但是需要自己判断距离远近,当然还有更高端的倒车雷达具有GPS定位无死角全车监控,不过价格也会更高
4、昂。13本设计的特点本次的设计结合以前的很多设计方案,加上自己开车的亲身体会,即保留原本的“嘀嘀”声,还加上三色LED灯报警,并且通过LCD1602液晶屏和SYN6288语音芯片实时显示和播报距离,使距离数字化,更加人性化。为了解决超声波测距存在的内部缺陷,使用DHT11温湿度传感器,对距离数据进行温湿度校正,以应对汽车在高温或大雾天气的倒车。还有最重要的一点,本设计十分严格的控制成本,主要元件的成本价仅需86元,远远低于市场上的同类产品,不仅做到测距精准、使用方便而且物美价廉。基于单片机的倒车雷达的设计32总体设计及基本原理21系统的设计要求本次的设计是基于单片机的倒车雷达设计,要实现的基本
5、功能是在汽车挂倒档后,帮助司机监测车身周围视觉盲区内的障碍物,及时警示司机,方便倒车的顺利进行。其中有基本的测距功能,用于最初的距离数据获取,是最基础最主要的数据来源;有对距离数据的校正功能,通过获取周围的温湿度数据对测量的距离数据进行校正,是数据准确性的关键;有显示功能,通过实时显示计算后的距离数据对司机师傅进行提示;有语音功能,通过语音播报距离数据对司机师傅进行再次提示,与显示功能一起灵活组合方便司机对倒车时周围障碍物距离的感知;有报警功能,通过与内设阈值的比较对司机倒车做出警示,提醒司机的注意;当然还有电源与程序更新功能,为单片机的正常工作提供支持。除此之外,还要考虑到成本、硬件成品的尺
6、寸、编程的难易程度、硬件的可扩展性、稳定性等问题,从多个方面考虑选用最合理的设计方案以及最合适的元器件。22整体方案的设计221基本原理超声波测距的基本原理8是基于超声波在空气中的传播特性来实现的。超声波发射器向某一方向发出超声波信号,与此同时,打开计时单元开始计时,超声波在空气中传播,遇到障碍物后被反射回来,超声波接收器接收到反射波就关闭计时单元停止计时,记录超声波传播的时间为TS,利用公式障碍物发射接收距离超声波,求距离S,其中C为声速11。障碍物发射接收距离超声波图21超声波测距示意图基于单片机的倒车雷达的设计4超声波是声波的一种可以在固体、液体、气体等介质中传播,介质密度越大,声速则越
7、快。在空气中,声速湿度、温度、密度等不同因素的影响。本设计的应用场景是在空气中,因此密度对声速的影响可以忽略,但是温度和湿度对声速仍然具有不可忽视的影响,如零摄氏度海平面的声速约为3315M/S1193KM/H;而当上升到万米高空时,声速就变为295M/S1062KM/H;与此同时若温度每升高1摄氏度,声速就增加0607M/S。水蒸气分压每上升133322PA,声速将提高00021M/S10。温度越高,声速越大。温度湿度对空气的影响详见附录。通过阅读研究以前的一些文献,可以得出声速与温度湿度的关系如公式21PPWTV32011527314533121其中PW是空气中水蒸气的分压强,等于水的饱和
8、蒸汽压乘以相对湿度,T是摄氏温度,P是大气压强。通过校正声速,使测出的距离数据更加准确,使系统可以灵活的适用于各种不同温湿度的外界条件,增强了系统的准确性和稳定性。222整体设计通过分析系统的设计要求并且综合各个方面的因素,本系统主要按模块化的方式进行设计。单片机主控系统负责程序的是顺序进行和主要数据处理;测距模块通过超声波的收发以及对单片机定时器的控制,测量出从发射超声波到接收到回波的时间T,从而进一步计算初次测量出来的障碍物距离并非最终距离;通过温湿度传感器,获取周围环境中的温湿度数据,再将数据代入公式,校正测出的距离数据,得到准确的障碍物距离;将数据送至显示模块和语音模块对司机进行提示;
9、通过检测是否超出阈值,对数据进行报警。由于是车载系统,所以供电单元采用USB供电,烧写模块也使用USB转RS232串口进行程序的更新和下载。单片机主控系统测温模块语音模块显示模块电源及烧写模块测距模块报警模块图22倒车雷达系统框图基于单片机的倒车雷达的设计523模块的选用与设计231单片机的选用与论证本设计中选用的是51系列单片机,型号使用的时STC89C52RC。该单片机是STC宏晶科技公司生产的一款运算速率高、功耗地、抗干扰能力强的增强型51单片机,代码兼容早期的51单片机,片上集成512字节的RAM,用户应用程序空间有8K字节,方便编程,有3个16位定时器/计数器,方便用于超声波回波时间
10、的测量,具有看门狗功能,有四组32个通用I/O端口,方便外部设备的连接,具有ISP/IAP即在系统可编程/在应用可编程功能,不需要专门的编程软件和仿真软件,可以直接通过串口RXD/P30,TXD/P31与上位机相连接,使用STC提供的STCISPEXE工具可以下载用户代码还可以进行串口的调试。图23STC89C52RC单片机实物图232测距模块元件的选用与论证本设计中选用的HC_SR04超声波收发模块,是在多个可选的超声波测距模块选择出来的,具有不可替代的优点。与同类型的超声波测距模块KS103相比,虽然KS103的精度高1MM,量程大1CM800CM,但功耗大,价格高昂,至少要100元,并不
11、适合车载系统使用,而HC_SR04精度3MM,量程2CM400CM,功耗小9,仅需5元,量程和精度也可以完全满足倒车雷达系统的需要,经济又实用,同时它的驱动简单且迅速,也满足车载倒车雷达对程序运行速率的要求。图24HC_SR04超声波收发模块实物图基于单片机的倒车雷达的设计6233温湿度模块元件的选用与论证本设计中选用的是DHT11来组成温湿度测量模块。以往的设计中常常会使用到DS18B20但是由于DS18B20仅有温度传感器,而本设计中需要用到温度和湿度的数据,所以优先选用DHT11。DHT11不仅具有温度传感器还具有湿度传感器,可以同时获取温度和湿度的数据,用来校正测量的距离数据。而且价格
12、低廉,仅需5元,节约成本。DHT11实物图如下图25DHT11温湿度传感器实物图234显示模块元件的选用与论证本设计中选用的是LCD1602液晶屏显示距离数据,LCD1602是一种广泛使用在工业中的字符型液晶显示屏,能够同时显示16列2行即32个字符。而且1602中不仅有160个内建的字符发生器CGROM,集成常用字型,可以完全满足用于所需的基本字符(不包括中文),还有8个字符发生器CGRAM,可以凭借自己的喜好和程序需要定义一些简单的汉字,在点数允许的情况下。价格7元。1602液晶显示屏的实物图如下图26QC1602A液晶显示屏实物图基于单片机的倒车雷达的设计7235语音模块元件的选用与论证
13、本设计选用的是宇音天下生产的芯片SYN6288。ISD400X系列的语音芯片是现在最常见的语音芯片,这一类芯片需要先将要播放的信息由录音部分录入到芯片中,再由播音部分播出,声音保真,抗干扰能力强,功耗小,以其广泛的应用可以说明它的优点毋庸置疑,但是以8位的为例,如果使用半集成的语音录放模块,价格在60元以上而且元件的尺寸比较大,不适合本次的系统设计。与ISD400X系列的芯片相比,宇音天下公司生产的芯片更适合本次的设计,不论是早期的OSYNO6188还是本设计中使用的SYN6288都迅速的赢得了业界内大批忠实的粉丝,SYN6288拥有简单的接口方便硬件连接使用,可以智能识别中文文本数字机常见的
14、符号,通过上位机的串口可以直接发送需要播放的内容,可以大大减小软件编程的工作量,除此之外,它的功耗低、封装尺寸小,半集成的语音模块仅仅只有硬币大小,价格仅需50元,加适合车载系统使用即节约成本也节约体积。SYN6288语音模块实物图如下图27SYN6288实物图图28喇叭的实物图236报警模块元件的选用与论证本设计中报警模块使用三色LED和蜂鸣器进行报警。当距离障碍物100CM及以上时绿色灯亮,蜂鸣器不发生鸣叫;当距离障碍物50CM100CM时黄色灯低频率闪烁,蜂鸣器发出频率较低的鸣叫;当距离障碍物在50CM以内时红色等高频率闪烁,蜂鸣器发出频率较高的鸣叫。基于单片机的倒车雷达的设计8图29蜂
15、鸣器及LED灯实物图237电源及烧写模块元件的选用及论证本设计选用的是集成好的USB下载器同时供电和更新程序,由于本设计是针对车载系统开发,所以电源部分使用USB供电,但是由于在板上设计单独的串口来更新程序明显不实用,所以选择集成好的USB下载器,既可以供电,也可以用来烧写程序。价格12元。图210USB下载器实物图基于单片机的倒车雷达的设计93系统的硬件设计31整体的硬件设计通过分析上文中的系统的功能以及每部分的设计可以得出硬件部分的设计。单片机是整个系统的核心,外围有6个模块要与之相连,其中每个模块的VCC和GND端都与系统的高电平和低电平相连,除此以外,还有1602的根数据线,RS寄存器
16、选择端、E使能端和RW读写信号线,有DHT11的单总线数据端DATA,有HC_SR04的触发控制信号输入端TRIG和回响信号输出端ECHO,有SYN6288的RXD、TXD、BUSY和直接驱动喇叭的两个SPK端以及LED灯和蜂鸣器端等。对于51系列单片机来说,P0口为开漏输出,内部并没有集成上拉电阻7,所以若要使用P0作为普通的I/O端口输出数据时,就必须外接8个上拉电阻,保证高电平的正确输出,而很巧的是显示模块所使用的1602在内部的8根数据总线DB0DB7上已经集成了上拉电阻,所以将单片机的管脚中P00P07与1602的DB0DB7端顺序相连,P0口和P2口位于同一侧,所以为了连线方便16
17、02的另外三个控制端占用P2口的三个端口。又因为在功能上LED灯和蜂鸣器的报警模块也属于数据输出端,在成品中的位置尽量靠近1602,所以报警模块的4个端口也与P2口的端口相连。从功能上看,HC_SR04和DHT11属于数据的输入端,而且位置应处于板的边缘,同时两者应该距离较近,所以将HC_SR04的ECHO和TRIG以及DHT11的DATA端连到P1口上。语音模块使用的是上位机固定的串口RXD/P30,TXD/P31上,同时由于程序下载也需要固定的串口端,所以这两个端口复用。当然为了保证单片机的正常工作还需要将它的VCC第40管脚接高电平,GND第20管脚接低电平,RST第9管脚接复位电路,X
18、TAL1第19管脚、XTAL2第20管脚接时钟电路,EA/VPP第31管脚直接接高电平,选择内部程序存储器1。本次硬件设计使用的软件是PROTEL99SE,这个软件集成了丰富的元件封装,常用的器件基本都可以直接使用,当遇到没有封装的元件时,PROTEL也提供了原理图库文件和PCB的库文件可以自己制作元件的封装。而且还可以对绘制的电路图进行电气检查、列出元件清单,当然它最强大的功能还是印刷电路板的设计,可以帮助使用者对硬件进行排线等,虽然DXP2004比PROTEL99SE更加先进,但是运行所需内存较大,电脑运行慢,所以还是选择PROTEL99SE。32每个模块的硬件设计321测距模块的硬件特点
19、及外围电路对于HC_SR04超声波测距模块来说,它的硬件设计非常简单,外部没有什么基于单片机的倒车雷达的设计10特别需要添加的元件,采用高电平触发TRIG发射超声波信号,然后通过检测ECHO的高电平持续时间计算距离。所以只需将它的VCC接高电平(5V),GND接地,TRIG、ECHO分别接单片机的P10、P11即可。图31HC_SR04引脚图322温湿度模块的硬件特点及外围电路DHT11温湿度传感器外部共有4个引脚,但是NC引脚悬空不接,所以在电路图中只画出了其中3个引脚。它的VCC需提供355V的电压,为了增强它的稳定性要在它的VCC和GND之间接一个100NF的电容,用以去耦滤波。为了保证
20、高低电平的正确输入输出,当连接线少于20米时要在DATA端接一个5K大小的上拉电阻。图32DHT11引脚及外围电路连接图323显示模块的硬件特点及外围电路在整体的硬件连接中已经分析过1602的位置与占用端口的原因,由于自带的排阻和端口在实物上的靠近,1602的第4到第14引脚与单片机直接相连。将第15引脚A即背光电源正接高电平,第16引脚K即背光电源负接地,将第1引脚VSS地电源接地,第2引脚VDD接高电平,比较复杂的是第3引脚V0,它是液晶显示屏的对比度调整端,使用时应该通过10K大小的电位器接。当电位器阻值变化时,效果如下图基于单片机的倒车雷达的设计11图33对比度过低图34对比度过高图3
21、5对比度合理图36LCD1602引脚及外围电路连接图324语音模块的硬件特点及外围电路语音模块集成度比较高基本不用连接外部电路,只需将喇叭的两端接到SPK1和SPK2上,VCC接高,GND接地,BUSY可接可不接,RXD接单片机TXD端,基于单片机的倒车雷达的设计12TXD也是可接可不接(不接是因为本系统中语音芯片有些功能没有使用)。电路图如下图37语音模块引脚及外围电路连接图325报警模块的硬件特点及外围电路由于所使用的单片机STC89C52的端口做普通的输入输出时,拉电流的能力是微安级别,灌电流的能力是10倍的毫安级别,要点亮LED灯微安级别的电流是远远不够的,所以通常使用的灌电流连接方式
22、电亮LED,即LED的正极直接接高电平,负极接保护电阻后接单片机的输入输出口。同样,蜂鸣器也采用灌电流的连接方式连接,但是在实验中发现,这样连接并不能让蜂鸣器发出比较高的声音,再一次修改了蜂鸣器的连接方式,蜂鸣器的正极直接接高电平,负极接三极管NPN的集电极,三极管的发射极接地,基极接保护电阻后接到单片机的输入输出口。图38报警模块引脚及外围电路连接图基于单片机的倒车雷达的设计134系统的软件设计41整体的软件设计本设计的核心使用的51系列的单片机,在内存上是无法与计算机相比的,所以要在数据空间的使用和程序的复杂度上尽量节省,最大限度的使用单片机已经集成好的比如中断、定时器、看门狗等功能,防止
23、程序空间以及数据空间过大溢出。在编程的过程中尽量提高程序的模块化,增加复用率。使用的编程语言是基于51单片机的C语言,编程难度小,理解方便,已有一些集成的函数方便调用,与计算机的C语言相比,它更接近底层,可以按位定义和运算,十分灵活,与对应单片机的汇编语言相比他的优点在于可读性强,更接近人的语言,维护、更新、扩展都更加的方便。使用KEIL4进行软件的编程,这个软件界面简单使用方便,内部包含了C的编译器还集成了大量的库函数,当然最喜实用的时它强大的DEBUG功能,可以将整个程序逐步运行出来,可以减小当程序直接烧写到板子上风险,也比普通的仿真软件更容易看到每一步的结果和内部的如定时器、寄存器、内存
24、等的实时状态,是单片机软件开发必备的帮手。图41KEIL4的DEBUG图除了软件编程工具外还使用PROTUES78进行硬件仿真4,可以在电脑上直接观看到程序的运行结果,还有一些比如示波器等测量仪器,比上面的DEBUG更加的直观,方便对外围电路的设计。缺点就是本次设计中使用的版本有些低有一些元件没基于单片机的倒车雷达的设计14有对应的仿真,只能采用模拟的方式。图42倒车雷达系统仿真图在仿真图中HC_SR04用两个按键模拟,SYN6288用示波器模拟,DHT11使用ATMEGA16模拟。其余的元件都有自己的仿真库文件。42每个模块的软件设计421主程序主程序是系统函数的入口,起总体协调的功能,主程
25、序中尽量少出现具体的处理过程,采用函数调用及返回的方式对系统的其他模块进行调度,合理安排每个模块的先后顺序。程序开始运行时先对各个模块进行初始化,先初始化液晶屏,并且延时一段时间使其稳定,然后清屏,紧接着初始化测距模块和语音模块。然后对单片机的定时器进行设定,程序中使用了定时器0和定时器1,并且对系统的中断进行设定。再然后显示欢迎界面,并且播报程序开始运行。紧接着就进入主程序大循环部分,调用HC_SR04的SR04_READ_DATA函数读取距离数据,调用DHT11的GETDHT11函数读取温度湿度数据,检测这两组数据是否正确,是否超出边界。如果没有问题那么使用温度湿度数据对距离数据进行校正,
26、得到比较准确的距离数据,然后将数据都转换成字符串格式,调用SYN6288的基于单片机的倒车雷达的设计15SPEECH函数播报距离数据,调用1602的LCD_WRITE_STRING函数显示到液晶屏上,将距离与内设阈值进行比较更新标志,接着调用报警函数并传递标志,按级别发出警报,最后延时防止超声波的信号干扰,并且利于语音播报的完成。然后返回循环开始的地方,再次获取数据。开始各模块初始化定时器设定中断设置欢迎界面及语音1读取距离数据读取温湿度数据距离数据处理语音播报距离液晶显示数据LED与蜂鸣器警报图43主程序程序流程图基于单片机的倒车雷达的设计16422基础函数库基础函数库是存放一些常被其它模块
27、的函数多次调用的函数,比如延时函数。基础函数库中有两个延时函数,是使用软件延时来实现的,但是准确的延时还是需要单片机的定时器来实现。这两个函数一个是微妙级的一个是毫秒级,可以基本满足程序大致延时使用。这样写可以大大减小代码的重复率。423测距模块的软件设计测距模块中包含了与距离测量有关的所有函数,包括HC_SR04的初始化,距离数据的读取,以及启动模块的函数。每个函数的设计都离不开HC_SR04的工作特性,它的时序图如下图44超声波测距时序图由时序图可以得出,上位机需要通过TRIG向模块发送一段TTS高电平,不少于10US,用来触发超声波模块开始测距。函数STARTMODULE就实现了这一功能
28、,先将TRIG电位拉高,然后软件延时大于10US,然后再将它的电位拉低。然后在软件中等待ECHO的电平变高,一旦变高就打开定时器0,以工作方式1开始计数,初值为0,等待ECHO电平变低,一旦变低就停止计数,并读取TH0和TL0的值,计算ECHO高电平持续时间,然后进一步计算出距离,并将测量的距离值返回。其中定时器的工作方式是在初始化时进行定义的,由于本次设计中要用到多次定时计数器,所以在设置TCON时要使用按位或TMOD|0X01,这样就不会影响到另外一个定时器的工作。因为要给定时器选择16位定时器所以让它工作在工作方式1,,计数脉冲来自内部而不是外部,所以C/T位为0,仅需软件启动所以GAT
29、E0,所以TMOD定义为0X01。基于单片机的倒车雷达的设计17开始电平拉低电平拉高延时大于18毫秒延时20微秒电平是否变低电平是否变高电平是否变低调用5次COM函数接收数据校验数据是否正确处理数据返回是是否否否是否是图45测距模块程序流程图424温湿模块的软件设计该模块的软件设计主要是用来获取当前环境的温度和湿度。包含两个基本函数,其中GETDHT11是主函数,负责获取数据时对输入输出端口的控制以及对获取的数据进行基本的处理,而COM函数是它的子函数,负责每8位数据的读取。DHT11的时序图比较复杂,对应的驱动部分也比SR04的更加麻烦。而且DHT11数据格式特殊,读取方式也比较特殊,见图4
30、7和图48图46DHT11时序图基于单片机的倒车雷达的设计18图47DHT11“0”数据的信号表示图图48DHT11“1”数据的信号表示图通过观察图46,可以很清楚的看到DHT11的向上位机发送数据的全过程。首先,通过软件定义,将单片机与DHT11连接的端口置0并保持18毫秒以上,向DHT11发送开始信号,保证DHT11可以检测到开始信号,然后单片机端口由软件拉高,等待DHT11的响应这个过程持续20到40微秒,此时的DHT11在检测到单片机发来的开始信号后自动等待电平拉高(不需要人为控制,DHT11自动实现),一旦电平变高,DHT11就发送自己的回响信号,将端口电平拉低并且延时80微秒,然后
31、再将电平拉高80微秒,告诉单片机,准备发送数据了,此时的单片机由软件循环检测电平的高低,并且准备接收数据。接收数据将调用COM函数。DHT11的数据由5组8BIT的数据组成,需要调用COM5次,数据包括湿度的整数小数温度的基于单片机的倒车雷达的设计19整数小数以及校验和,当单片机接收完数据后,利用发送的校验和对数据进行校验,如果正确无误则将数据拼接完成后返回主程序。大致的流程图如下开始电平拉低电平拉高延时大于18毫秒延时20微秒电平是否变低电平是否变高电平是否变低调用5次COM函数接收数据校验数据是否正确处理数据返回是是否否否是否是图49DHT11主函数流程图425显示模块的软件设计显示模块软
32、件设计中所包含的子函数非常多,有初始化函数、判忙函数、清屏函数、基于单片机的倒车雷达的设计20写指令函数、写数据函数以及写入字符串函数。其中初始化函数是在主程序一开始就调用用来初始化液晶显示屏,通过调用写指令函数对显示屏进行基本的模式设定、光标设定以及清屏。判忙函数是通过对1602当前状态的读取判断是否处于忙状态。写指令和写数据是最基本的两个函数,都是通过数据总线向1602发送信息,不同的是选择寄存器,通过将RS端置高电平选择数据寄存器,此时通过数据总线接收的消息将被认定为数据,将RS端置低电平选择指令寄存器,此时通过数据总线接收的消息将被认定为指令。表411602液晶基本指令表指令RSRWD
33、7D6D5D4D3D2D1D01清屏00000000012光标返回0000000013输入模式00000001I/DS4显示控制0000001DCB5光标/字符移位000001S/CR/L6功能00001DLNF7置字符发生器地址0001字符发生存储器器地址8置数据存储器地址001显示数据存储器地址9读忙标志和地址01BF计数器地址10写数据到指令78所设地址10要写的数据11从指令78所设的地址读数据11读出的数据写指令和写数据的基本方式一样,仅有传递的参数和修改的内容不同,用同一基于单片机的倒车雷达的设计21个流程图来表示开始是否忙RS置1(数据)或清0(指令)RW清0进行写操作E使能端置
34、1向数据总线发送数据延时返回E使能端清0是否图410写指令和写数据的程序流程图写入字符串函数则是先确定字符串的起始位置,然后调用写数据函数并传递位置信息,通过写数据函数的处理,将字符串信息显示到1602屏幕上,然后将位置加1,判断是否已到字符串尾部,如果没到进入下次循环,如果已经到字符串尾则返回主函数。基于单片机的倒车雷达的设计22确定字符串起始位置开始结束调用写数据函数是否是最后一个字符位置1否是图411写字符串的程序流程图426语音模块的软件设计语音模块的软件也比较复杂,包含了4个函数,其中SYN6288_INIT是初始化函数,发送数据函数SENDCHAR,背景音乐控制函数BKMUSIC,
35、以及调用最多的发生程序SPEECH。主要实现了对语音模块的控制及调用。并且为了程序书写的方便以及可读性的提高,将语音芯片一些内置的常数先进行宏定义。又由于该芯片的通信使用固定的帧格式,为了方便使用需要自己定义数据包头,包括帧头、数据区长度以及命令字、命令参数。帧结构如下表表42SYN6288帧结构表帧结构帧头(1字节)数据区长度(2字节)数据区(小于等于203字节)命令字(1字节)命令参数(1字节)待发送文本(小于等于200字节)异或校验(1字节)数据0XFD0XXX0XXX0XXX0XXX0XXX0XXX说明波特率高字节在前低字节在后长度与前面的“数据区长度”保持一致基于单片机的倒车雷达的设
36、计23语音模块的初始化非常重要,首先要定义串行口的工作方式,本设计选用11位异步收发器即9位数据,波特率可变工作方式3,SM01,SM11,除了起始位和停止位外,将发送数据的第九位用软件规定其为奇偶校验位TB81,允许串行接收REN1,而RI和TI分别为接收和发送的中断标志位,须由硬件置1,申请中断,软件清0,响应中断,所以串口控制寄存器SCON被设置为0XD8。其次需要定义串行口工作的波特率,虽然工作方式3的波特率是可变的但是语音芯片默认的波特率是9600BIT/S,所以设置定时器1为工作方式2,,可以实现自动重装的8位定时计数器,将初值装入TH1中,开启定时器后TL1计数,一旦溢出则将TH
37、1中保存的初始值自动装入TL1,节省了人为操作的时间,得到更精准的波特率,由于单片机的晶振为11059MHZ,所以装入TH1的初值为0XFD,设置PCON的第一位SMOD为0,不倍频。VOIDSYN6288_INITSCON0XD8TMOD|0X20/按位或,防止修改T0的设置PCON0X00TH10XFDTR11/开定时器发声函数是模块的主要函数,实现播报字符串语音的功能。由于帧格式的要求,先将计算主程序传递来的字符串的长度,然后根据程序需求合成数据帧的数据包头,同时调用SENDCHAR函数发送数据包头,紧接着调用该函数发送字符串的内容,最后发送校验位,延时返回。基于单片机的倒车雷达的设计2
38、4开始数据包头是否发送完更新数据包头内容发送数据字符串是否发送完发送字符发送校验位返回延时字符串长度加1是否字符串尾部否否否是是是图412发声字符串函数程序流程图基于单片机的倒车雷达的设计255系统的仿真、调试结果51系统仿真结果使用PROTUES进行仿真时,有一些元件没有仿真,使用其它元件代替,但是由于按键速度达不到,所以超声波测距模块测出的距离就比较远。图51仿真结果图图52TIRG触发电平图图53ECHO回响电平图图54SYN6288数据波形图基于单片机的倒车雷达的设计26由于DHT11在仿真中无法实现,所以一直显示是温度0摄氏度,湿度也是0,所以也无法在仿真中看出温度和湿度对距离的影响
39、。52系统软件调试结果使用KEIL软件DEBUG进行调试主要是观察单片机内部的内存、定时器、特殊状态寄存器以及自己定义的变量的值,是普通仿真不能替代的。以下是初始化完成后,系统的设置。图55TIMER0、TIMER1、串行口初始设置图56中断系统初始设置图57系统运行中自定义数据结果图基于单片机的倒车雷达的设计2753系统硬件调试结果当然对硬件作品来说,硬件调试是必不可少的。所以先使用面包板和杜邦线将基本元件连接起来进行硬件调试,硬件调试成功后再焊接元件。以下是硬件实物结果图,实测距离55CM,显示屏可以正确显示,当然如果角度有问题测出来的数据也会不同图58测量实物示意图图59测量实物液晶屏显
40、示图以下三张图是用来检测报警电路是否正常工作的,红灯亮表示距离在50厘米以内,黄灯亮表示距离在50厘米到100厘米,绿灯亮表示距离在100厘米以外比较安全。基于单片机的倒车雷达的设计28图510距离小于50厘米图511距离大于50厘米小于100厘米图512距离大于100厘米虽然听不到喇叭的鸣叫声,但是可以由芯片外围的信号灯来指示,红灯亮表示上电工作状态,而绿灯亮表示芯片忙,即芯片正在发声。图513工作状态基于单片机的倒车雷达的设计29当湿度相同时,温度越高,声速越快,假设实际距离不变,则测出来的距离就会变短。反之亦然。图514湿度一定时温度略低图515湿度一定时温度略高当温度相同时,湿度越高,
41、声速越快,假设实际距离不变,则测出来的距离就会变短。反之亦然。图516温度一定时湿度略高图517温度一定时湿度略低基于单片机的倒车雷达的设计30但是由于显示出来的温度和湿度数据都有进行四舍五入,所以以上的图片仅供测试用。图518硬件连接图全貌为了方便在板子上的连接,先画出了PCB板,可以帮助合理摆放实物位置和快速连线。PCB图见附录。图519PCB图3D视图正面图520PCB图3D视图背面基于单片机的倒车雷达的设计31有些器件没有对应的PCB封装,所以自己制作PCB库文件。图521自制元件的PCB封装图虽然像1602之类的也没有对应的封装,但是焊板子的时候可以给他们加一个座,所以封装统一使用S
42、PIXX类型。图522倒车雷达实物图基于单片机的倒车雷达的设计32结论这次设计中,我完成了初期预计的所有功能,还新增了湿度对声速的校正以及语音播报。为了毕设的顺利完成,我准备资料450M,查阅文献多篇包括三篇英文文献,使用辅助软件5个,代码量470行,占用4525字节,数据空间118字节,主要元件16种。在这次的毕业设计中,我不仅学到了使用超声波测距的基本原理,也了解了更多超声波的在通信中的应用。通过动手设计电路、进行软件编程,我可以更加灵活的使用嵌入式的系统进行开发。而本次的实践也让我了解到通信在交通中扮演的重要角色,对我以后研究生阶段的学习会有很大的帮助。当然,由于个人的能力有限,在我的设
43、计中还存在很多不足之处,而且由于成本的限制和主控芯片的限制,我所设计的倒车雷达系统并没有连接摄像头的后视功能,也没有使用GPS导航对车身全方位监控,而这一功能在很多高端车中都已经具备。当然经过这次设计我还有一个更大胆的提议,针对后轮驱动的汽车,可以在车身后可视的基础上加上对电机驱动的切换,使司机可以用正常向前行驶的方式进行倒车。希望我以后也可以将这一功能实现。基于单片机的倒车雷达的设计33致谢这次毕业设计的完成,我首先要感谢我的指导老师老师,王老师对我的帮助最大,从刚开始的选题到之后系统的总体设计,都离不开老师指点,在毕设中遇到的问题也是老师帮我耐心解答,王老师渊博的知识和丰富的实践经验也给我
44、很大的启迪。此外,我还要感谢帮助过我的同学们,是他们和我一起奋斗让我更有动力。最后还要感谢我的母校和大学中教导过我的各位老师,使他们为我之后的发展打下坚实的基础。感谢对本文进行评审的各位老师,恳请您提出宝贵的意见。基于单片机的倒车雷达的设计34参考文献1郭天祥新概念51单片机C语言教程入门、提高、开发、拓展全攻略M北京电子工业出版社,20092周立功等增强型80C51单片机速成与实践M北京北京航空航天大学出版社,20033刘同法等单片机外围接口电路与工程实践M北京北京航空航天大学出版社,20094周灵彬单片机系统的PROTEUS设计与仿真M北京电子工业出版社,20075南建辉等MCS51单片机
45、原理及应用实例M北京清华大学出版社,20046肖金球单片机原理与接口技术M北京清华大学出版社,20047赵亮跟我学51单片机一单片机最小系统组成与I/O输出控制J电子制作,2011,173778刘鑫等基于单片机的倒车雷达的设计J电子设计工程,2012,19张波,王朋亮基于STC89C51单片机超声波测距系统的设计J机床与液压,2010,18565810张燕,陈爱国,高荣贵声速的温湿度修正研究J压电与声光,2011,111盛春明超声波测距仪J电子制作,2010,512BRADFORDULTRASONICRANGINGSYSTEMDESIGNJSENSORREVIEW,1993,1313TOMAS
46、ZJ,LICZNERSKI,DARIUSZKOSZULTRASONICSYSTEMFORACCURATEDISTANCEMEASUREMENTINTHEAIRJ2011,12960965基于单片机的倒车雷达的设计35附录程序/主程序INCLUDEINCLUDEINCLUDEINCLUDEINCLUDE“1602H“INCLUDE“BASICH“INCLUDE“DHT11H“INCLUDE“SR04H“INCLUDE“SYN6288H“INTFLAG0/距离级别1表示禁止,2表示警告,3表示通行,4表示数据过大SBITLED_RP23SBITLED_YP22SBITLED_GP21SBITBEL
47、LP20FLOATS_DATA0/距离数据,单位厘米FLOATTEMPERATURE0/温度数据,单位摄氏度FLOATHUMIDITY0/湿度数据CHARS_STR10CHARSP_STR20CHART_STR8CHARH_STR8/报警函数,根据级别发生警报VOIDWARNINGINTISWITCHFLAGCASE1/红色警告LED_G1LED_Y1FORI0I1000S_DATA999FLAG4S_DATAS_DATA33145/340SQRT1TEMPERATURE/273151000544HUMIDITYSPRINTFS_STR,“S31FCM“,S_DATASPRINTFSP_STR
48、,“距离31F“,S_DATASPRINTFH_STR,“H20FRH“,HUMIDITYSPRINTFT_STR,“T20FC“,TEMPERATURESPEECHSP_STRLCD_CLEAR/1602显示距离数据LCD_WRITE_STRING0,0,T_STRLCD_WRITE_STRING7,0,H_STRLCD_WRITE_STRING0,1,S_STR/防止发射信号干扰,等待发音完成DELAYMS1000DELAYMS1000DELAYMS1000DELAYMS1000DELAYMS1000DELAYMS1000/判断数据大小并修改FLAG值IFS_DATA1000FLAG3EL
49、SEIFS_DATA500FLAG2ELSEFLAG1/警报WARNINGBELL0/显示模块INCLUDEINCLUDEINCLUDE“BASICH“SBITRSP26/寄存器选择位,将RS位定义为P20引脚SBITRWP25/读写选择位,将RW位定义为P21引脚SBITENP24/使能信号位,将E位定义为P22引脚SBITBFP07/忙碌标志位,将BF位定义为P07引脚DEFINERS_CLRRS0DEFINERS_SETRS1DEFINERW_CLRRW0DEFINERW_SETRW1基于单片机的倒车雷达的设计37DEFINEEN_CLREN0DEFINEEN_SETEN1DEFINEDATAPORTP0/判忙函数BITLCD_CHECK_BUSYBITRESULTRS_CLRRW_SETEN_SET_NOP_RESULTBITDATAPORTEN_CLRRETURNRESULT/写入指令函数VOIDLCD_WRITE_COMUNSIGNEDCHARCOMWHILELCD_CHECK_BUSY/忙则等待RS_CLRRW_CLREN_SETDATAPORTCOM_NOP_EN_CLR/写入数据函数VOIDLCD_WRITE_DATAUNSIGNEDCHARDATAWHI