1、XXXX学院 毕业设计(论文)题 目: 超声波测距倒车雷达设计 系 部: 电子工程系 专 业: 电气自动化 学 号: XXX 学生姓名: XX 指导老师: XX 职 称: XX 二O一五年四月二日XXX学院毕业论文(设计)任务书 课题名称:_ 超声波测距倒车雷达设计 系 部: 电子工程系 专 业: 电气自动化 姓 名: XX 学 号:_ XX 指导老师: XX 二O一五年四月二日超声波倒车雷达设计摘要 此次设计采取单片机STC89C52来控制整个超声波系统。由单片机控制产生超声波而且控制订时器开始计时,当接收电路接收到回波时,定时器产生中止,停止计时。信号发出到接收到回波信号所用时间是由单片机
2、计算完成,从而得到实测距离。距离显示在LED数码管上,并控制报警电路。整个硬件电路由电源电路、按键电路、显示电路、报警电路和超声波模块组成。按键电路用来控制报警距离增加或降低,方便且实用。此次设计含有轻易控制和工作稳定等优点。关键词:STC89C52 超声波 测距 目录第1章 序言11.1 课题研究目标及意义11.2 超声波测距系统中国外现实状况11.3 设计要求1第2章 系统总体方案选择22.1超声波介绍22.2 超声波测距系统原理22.3 方案选择2第3章 整体硬件电路设计43.1单片机系统电路43.1.1复位电路43.1.2 时钟电路53.2 蜂鸣器报警电路63.3 按键电路63.4 超
3、声波发射电路73.5 超声波接收电路73.6 超声波模块83.7 显示电路83.8 电源电路93.9 系统整体电路10第4章 软件部分114.1 主程序设计114.2 中止处理程序124.3 距离计算及显示电路设计134.4 报警电路设计144.5 按键电路设计14第5章 硬件组装及调试15结论17致谢18参考文件19附录20第1章 序言1.1 课题研究目标及意义经济发展带来社会进步,超声波测距被频繁用在大家日常工作之中。超声波拥有测量稳定、穿透能力强、易接收等特点,同时超声波测距不用接触到物体,适适用于了情况比较复杂环境。还因为超声波测距易于控制,而且达成了所要求测量工业指标,所以超声波测距
4、被用于获取距障碍物位置信息、移动机器人、汽车倒车雷达等方面研究。1.2 超声波测距系统中国外现实状况中国超声波测距关键针对固体和液体研究,在测距稳定性和正确性上有了很大程度提升。而且伴随科学技术不停提升,超声波技术在工业自动控制、汽车倒车系统等方面也有深入研究。另外在医学、生物科学等领域也有突出地位。国外也做了大量研究是相关提升超声波测距。Figneroa JF,Lamancusa JS在计算时间方法上又有了新突破,传输时间取得是经过相加峰值时延和相位时延。1.3 设计要求设计一个超声波测距系统,距离设定一个限定值,当超声波探头和被测物体距离小于设定值时,二者距离显示在四位七段数码管上并开始报
5、警。设计关键需求以下:(1) 电路测量距离为6m。而且误差率不得超出0.03%。(2) 和被测物体距离用数码管显示,并有报警功效。(3)设置按键电路,能对设置最小报警距离进行改变。第2章 系统总体方案选择2.1超声波介绍我们知道,声音发出是产生了振动。我们知道赫兹定义为声音振动频率,200赫兹振动频率是人耳朵能够接收到,高于0赫兹,我们定义为超声波。超声波含有穿透性好、轻易获取等特点,在医学、工业、军事、农业等方面有着巨大研究价值。2.2 超声波测距系统原理在超声波测距过程中,超声波发射端接收到脉冲为一系列方波。时间间隔大小为方波宽度,距离越远,脉冲宽度越大。脉冲个数也伴随测距远近而改变。超声
6、波测距方法是:测量出输出脉冲宽度即发出超声波到接收超声波时间间隔t,利用公式S=12vt,算出被测距离。超声波算法设计:X1是超声波发出时间,X2是超声波接收时间。我们知道声波传输速度为340m/s,所以被测距离L图2-1。 图21测距原理2.3 方案选择 单片机 控制器 本方案选择STC89C52单片机来控制整个电路,测得距离显示在四位数码管上,并依据所设置报警距离开始报警。超声波发射信号由单片机发出并送到发射电路上,发出超声波。接收电路由CX6A芯片和接收探头组成。报警电路中,电阻R15为限流电阻、晶体三级管为驱动蜂鸣器。本设计将发射探头和接收探头分离,这么能够避免信号发生混叠干扰,从而使
7、测量数据愈加正确。依据以上设计图2-2。 单片机 控制器 数码管显示超声波接收 蜂鸣器报警超声波发射 图2-2 系统框图结合实际需求,在网上查找了相关资料,决定选择HC-SR04超声波集成模块。此模块发出超声波能够测量范围在5m到2cm之间,能够正确到3mm,它发射角小于15,有利于正确测量。而且工作频率在39 kHz41 kHz左右,完全符合此次设计40kHz工作频率。因为超声波发射探头和接收探头是放在同一水平直线上,而且超声波信号在传输过程中会发生衰减,所以两个探头不能距离太远。又因为假如两个探头离太近会产生信号干扰,测量出来结果会产生误差。 第3章 整体硬件电路设计3.1单片机系统电路
8、此次设计采取了高速、功耗低STC89C52单片机。这款STC89C52单片机在功效上和以前51单片机一样,而且还扩展了功效,使得用起来愈加方便。 图3-1 STC89C52引脚图3.1.1复位电路在单片机规格书中,有这么一段描述:假如当RST端口连续两个周期以上高电平,系统就会复位。电路以下: 图3-2 复位电路在VCC供电时,RST电压和VCC一样。伴随从 C3电容充电,RST电位开始下降,并形成一个正向脉冲,只要脉冲宽度足够就能够实现复位。相关RC计算: (3-1) 机械周期=震荡周期*12 (3-2)相关复位时间t计算: (3-3)查看相关资料知道,当REST上电压高于0.7Vcc时,就
9、能够被看为高电平。此次用系统电压为5V,所以REST上超出3.5V就能够看成高电平,而且高电平时间超出2us,单片机就能够复位。最终计算RST电位,复位电路为一阶RC电路,所以电压和电流有一下关系: (3-4)因为;所以。设Reset pin 电压为,那么: 所以, 当初,。当且仅当 时,系统实现复位,而且电阻和电容RC满足条件。所以用R=10K、C=10F符合要求。3.1.2 时钟电路 时钟电路两个引脚分别接入XTAL1端口和XTAL2端口。在两个引脚之间接入一个12M晶振,两个22PF电容和晶振并联后接地。电容能够使电路愈加稳定,电路以下: 图3-3 时钟电路3.2 蜂鸣器报警电路报警电路
10、由蜂鸣器、三极管、电阻组成。蜂鸣器由三极管驱动。R15为1k电阻,作用是保护蜂鸣器。单片机P36端口和电阻R15连接,当单片机P36口发送一个低电平到报警电路时,NPN型三极管开始驱动蜂鸣器进行报警,报警电路图3-4。 图3-4报警电路3.3 按键电路 按键电路由三个切换开关,一个LED设置指示灯和一个限流电阻组成。电路图3-5以下: 图3-5按键电路按键电路功效是:当按下k1键位时,指示灯亮起,开始设置报警距离。K2按下,报警距离从原来距离开始增大,当按下K3键位报警距离开始减小。 限流电阻R14计算: R(U2U1)I (3-5)式中U2为提供5V电压,U1和I分别为发光二极管两端电压、电
11、流。此次设置指示灯用是绿色发光二极管,正向压降UF为2v,工作电流IF为20毫安。所以R14=(5-2)/0.02=150。3.4 超声波发射电路发射电路关键由5个非门组成74LS04芯片电路组成。单片机发出40 kHz脉冲不能直接由发射电路发出,要经过足够倍数放大后,才能由发射探头发出。所以74LS04反相器其实就是一个放大电路。超声波发射电路图3-6所表示。 图3-6 发射电路R16和R17为1K电阻,能够74LS04芯片放大输出能力。Vcc为整个电路提供电源。电路工作时,单片机产生40 kHz由P0.1端口发送到发射电路,信号由74LS04芯片放大并由超发出。3.5 超声波接收电路因为超
12、声波在传输过程中是有衰减,所以在中长距离测量中,反射回来信号被衰减了,所以有必需进行信号放大,放大倍数还比较大。查看相关资料,此次设计采取是CX6A芯片,此芯片含有信号放大、峰值检波、比较等功效。芯片CX6A电路组成了关键接收电路,比较完信号后会产生一个低电平发送到单片机进行中止,中止以后,开始进行数据处理。图3-7所表示。 图3-7接收电路3.6 超声波模块HR-SR04超声波模块包含了接收探头、发射探头、74LS04芯片放大电路和CX6A芯片电路。超声波模块图3-8所表示。 图3-8超声波集成模块HR-SR04有四个连接口,分别为VCC、GND、TRIG、ECHO四个接口。VCC:提供5V
13、电源GND:地线TRIG:信号输入端口ECHO:信号输出端口工作原理:此模块能够发出8个40 kHz方波脉冲,而且能够自动检测有没有信号返回。3.7 显示电路 此次设计显示电路由四位七段数码管、三极管和三个电阻组成。数码管由三级管来驱动,限流电阻R11、R12和R13是保护整个显示电路,图3-9。 图3-9 显示电路 LED是发光二极管简称,八只发光二极管组成了数码管,国际上记作:a、b、c、d、e、f、g、dp。dp为小数点。数码管要能够正常显示就必需要有驱动电路来驱动,此次设计采取了动态方法。动态驱动优点有:节省了大量I/O口,而且消耗低,所以此次设计采取动态驱动方法,四位数码管接线方法为
14、共阳极接法。3.8 电源电路电路由一个5V电源、一个发光二极管和限流电阻组成。发光二极管采取是红色,作为电源指示灯,电路图3-10所表示。 图3-10 电源电路 相关发光二极管限流电阻R2计算:能加到发光二极管两边电压为5V,使用时要串联一个限流电阻用以保护发光二极管。电阻R2计算为: R2(EUF)IF (3-6)式中E为电源电压,UF为发光二极管两端电压,IF为发光二极管两端电流。 发光二极管依据用途不一样,颜色也不一样。红色发光二极管工作电压是2V。发光二极管电流大约为20mA,此次设计采取是红色发光二极管。采取电源电压为5V,电源电压减红色二极管两端电压就是电阻R2电压,再用R2两端电
15、压除以红色二极管两端电流就能计算出R2。所以R2=(5-2)/0.02=150。3.9 系统整体电路 图3-11 系统电路图整个系统由电源电路提供5V电源,数据由超声模块传到单片机进行处理,最终显示在数码管上并开始报警。 第4章 软件部分此次设计采取思想是分块进行设计及编写程序代码。程序关键分为主程序和中止程序。主程序包含初始化单片机STC89C53、超声波发出和接收、距离计算、按键电路设置、距离显示和蜂鸣器报警等。4.1 主程序设计主程序是初始化单片机STC89C52,然后置1回波接收位。同时经过端口P3.0发送一个低电平来开启超声波发射电路,而且开启定时器T0开始计时。这时调动计算子程序依
16、据统计T0时间计算距离,计算完成后,调用子程序显示距离。和此同时,调用声音处理程序进行蜂鸣器报警。主程序依据反射回来信号继续工作,假如回波标志位为0则说明成功接收到了回波信号,这时开始置位而且发送一个低电平到发射电路,就这么不停循环,实现测距功效。依据以上描述主程序步骤图图4-1所表示。 开始系统初始化超声波模块复位发射超声波并开启T0开中止接收到回波同时中止停止计算测量距离显示距离同时蜂鸣器报警报警 延时 图4-1 主程序步骤图4.2 中止处理程序负责计算距离程序是中止处理程序。依据前面分析,当接收电路接收到回波信号以后,一样会产生一个低电平送至单片机P3.1端口。这时转入中止处理程序,定时
17、器T0和外部中止0就立即关闭。读取时间值,并给接收回波标志位清零。本设计中止处理程序程序步骤图图4-2所表示。计时停止指定报警声开启中止关闭返回距离计算处理显示距离并依据距离判定是否报警YN图4-2 中止处理程序步骤图在中止处理程序中,对于距离计算是比较关键。先从定时器T0那里读取时间值,再依据公式计算出距离,最终在实现各模块功效。4.3 距离计算及显示电路设计 依据公式S=17N/1000=0.017N(cm),能够看出来求出距离关键是N值,也就是定时器T0计数次数。当接收探头接收到回波信号时,电路会产生一个低电平送至单片机P3.1端口,这时,定时器停止工作,而且提取定时器计数次数N,计算出
18、距离。 此次设计采取扫描方法为简单实用动态扫描,用四位共阳极连接方法连接数码管显示距离。单片机P2口和数码管进行段动态扫描,因为距离显示是在改变不固定,所以数码管显示过程是在外部中止后进行。4.4 报警电路设计主程序依据计算公式算出和被测物体距离,经过数码管显示,而且调用报警子程序控制蜂鸣器进行报警。4.5 按键电路设计当按下k1键位,进入设置模式,默认报警距离在数码管上进行显示,每按k2一次显示距离增加十厘米,每按下k3一次显示距离降低十厘米,设置好新报警距离后再次按下k1键位时,单片机自动计算显示距离是否小于新设置报警距离,假如小于蜂鸣器开始报警。按键电旅程序步骤图4-3所表示。按下菜单键
19、重新设置报警距离距离增加距离降低再次按下菜单键设置完成计算距离显示距离是否报警 图 4-3 按键电旅程序步骤图 第5章 硬件组装及调试此次超声波测距设计以HR-SR04超声波模块为主体,中心频率为40 kH。硬件连接及焊接以下:单片机P2口(P20P27)对应焊接到数码管a、b、c、d、e、f、g、dp,进行段动态扫描。P1口(P11P13)控制数码管片选段。P30和P31分别接到超声波模块Echo、Trig 端口。报警电路引脚接到单片机P36端口。测量到一本书距离,实际距离为38cm,测得距离为37cm,误差范围在1cm2cm,比较稳定,实际测距情况图5-1所表示。 图5-1 测量情况显示按
20、下菜单键位,重新设置报警距离,报警距离为80cm。实际距离为95cm,测得距离为94cm,蜂鸣器开始报警,图5-2所表示。 图5-2 测量情况在现实测距中,测量值和真实值误差产生原因分析:可能和被测物体横截面积大小相关。被测物体横截面太小,超声波信号不能被完全反射回来。可能和被测物体光滑程度有光。表面不平滑物体轻易使信号散射开来,接收探头接收到信号变弱。 结论从开学选题到现在做毕业设计完成多个月时间里,此次课题选着从开始不了解到现在实物焊接成功和论文完成,我学习到了很多知识,让我了解从理论到实践过程艰辛。在设计这段时间里,从刚开始思索到课题完成,每一步全部在努力做到最好。对大学四年学习做了一次
21、比较全方面检练。依据任务书要求和实际结合,此次设计以单片机STC89C52为主,采取HR-SR04超声波集成模块对超声波发射和接收,利用四位数码管和和蜂鸣器进行显示和报警。而且设置了按键电路方便对报警距离进行修改。做出来实物基础满足任务要求,但在调试过程中发觉了一下多个问题:环境温度对距离测量有影响,当我在阳光下和在阴凉处对同一距离测出来数值不一样。查看相关资料,对于温度影响,在设计中能够考虑加上温度赔偿模块。被测物体表面材质不一样也影响距离测定,几次结果表明:表面粗糙物体比表面光滑物体引发误差更大。可能粗糙表面信号散射开,这么接收到回波信号弱,所以产生误差。经过上网了解,影响误差还有可能是余
22、波信号影响。在测距时,有一部分声波没经过反射直接传到接收探头那里。这种余波印象对测距影响还是挺大。单这种干扰能够经过软件算法方法去除。 致谢 此次毕业设计论文在老师耐心指导下,总算完成老师治学敬业态度让我很感动,很感谢老师辛劳付出,让我大学四年画上了一个完美句号。在此次设计中,老师不停对我设计提出很多疑问,让我能在这方面愈加深入思索,而且在我不知所措时,认真仔细指导我处理问题,这才使得设计课题能够顺利完成。同时还要感谢教过我指导我全部老师,你们在我大学四年里饰演了关键角色。你们给我不仅是知识,还有以后出入社会优异品质。谢谢你们提议和忠言,让我对立即踏入社会有了自信和目标。谢谢身边好友,大学里每
23、一步全部有你们印记。 参考文件1 Y. S. Huang M. S. YoungAn Accurate Ultrasonic Distance Measurement System with Self Temperature CompensationJInstrumentation science & technology,37(01):22-29.2 姚永平.STC89C51RC/RD+系列单片机指南DB/OL, -6-25.3 王安敏,张凯.基于AT89C52单片机超声波测距系统J仪表技术和传感器(06):44-494 戴曰章,吴志勇.基于AT89C51单片机超声波测距系统设计J计量和测试
24、技术(02):17-185 吴超,戴亚文.基于AT89S52单片机超声波测距系统设计J中原工学院学报.(10):65-686 张春光.基于单片机超声波测距系统设计J可编程控制器和工厂自动化(09):16-197 苏炜,龚壁建,潘笑超声波测距误差分析J传感器技术(06):8-118 李光飞,楼然苗,胡加文单片机课程设计实例指导M北京:航空航天大学出版社:86-919 李建法.超声波测距电路设计和单片机编程J.安阳师范学院学报.(05):47-4810 Sv. Noykov Ch. RoumeninCalibration and interface of a polaroid ultrasonic
25、 sensor for mobile robotsJSensors and Actuators,135(01):55-5811rtori S:ZHANG G X. Geometric Error Measurement and Compensation of Machines.Annals of the CIRP. 1995:599-60912olton W.Instrumentation&process measurement.Longman Scientific Technical. 199113张芬:基于C8051F320单片机超声波测距仪,中国地质大学(武汉)机械和电子信息学院,仪表技
26、术和传感器,(09):56-6214李为民:基于stc89单片机超声波测距仪, 陕西师范大学学报,(10):35-4815 Fox, J.D., Khuri-Yakub, B.T. and Kino, G.S., High Frequency Acoustic Wave Measurement in Air, in Proceedings of IEEE 1983 Ultrasonic Symposium, October 31-2 November, 1983, Atlanta, GA, pp. 581-4.16Martin Abreu, J.M., Ceres, R. and Freire
27、, T., Ultrasonic Ranging: Envelope Analysis Gives Improved Accuracy, Sensor Review, Vol. 12 No. 1, 1992, pp. 17-21.17Martin, J.M., Ceres, R., Calderon, L and Freire, T., Ultrasonic Ranging Gets Thermal Correction, Sensor Review, Vol. 9 No. 3, 198 附录总程序:#include /头文件#include / 延时 _crol_函数 文件#define u
28、int unsigned int#define uchar unsigned charuint Slong=30; / 报警距离值 假如需要修改报警距离,则改此处数值就可。void delay(uint); /申明延时子函数int m; /定义变量muchar a=0; /定义变量a。 初始值为0;unsigned int time=0;unsigned int timer=0;unsigned char posit=0;unsigned long S=0;unsigned char const discode =0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
29、0x80,0x90,0xBF,0xff/*-*/; /共阳数码管段选unsigned char const positon3= 0xfd,0xfb,0xf7; /数码管位选unsigned char disbuff3 =0,0,0,; sbit RX=P30; / 就是超声波Echo口线sbit TX=P31; / 就是超声波Trig口线bit flag =0; sbit speak=P36; /蜂咛器报警口线定义sbit shezhideng=P35; /设置指示灯 口线定义sbit k1=P32; / 按键口线定义sbit k2=P33;sbit k3=P34;void Display()
30、 /扫描数码管 以下为扫描数码管对应程序。 会进行数次赋值。 if(posit=0) P2=(discodedisbuffposit)&0xff; else P2=discodedisbuffposit; P1=positonposit; if(+posit=3) posit=0; void delay(uint xms) /延时函数 uint i,j; for(i=xms;i0;i-); for(j=110;j0;j-); void m_main() /程序一直在 m_main() 函数面循环。 if(!k1) /按下K1键 功效:每按下K1键,a就加1. 使程序在下面对应程序里跑。 del
31、ay(7); /延时去抖 if(!k1) a+; /变量a加1 while(!k1); /等候按键弹起 /*当a=0时*/ if(a=0) /当a=0时,系统为正常进行,会自动计算距离,会检测是否报警。 while(!RX); /当RX为零时等候 TR0=1; /开启计数 while(RX); /当RX为1计数并等候 TR0=0; /关闭计数 m=S; /将计算出值 赋给 变量m ; m值会在数码管上显示。 warn(); /报警函数 Conut(); /计算 shezhideng=1; /关闭设置指示灯 /*当a=1时*/ if(a=1) /当a等于1时 m=Slong; /将Slong值
32、赋给m ,使数码管显示报警值,然后好进行修改。 Conut(); /计算 shezhideng=0; /设置指示灯点亮 speak=1; /关闭报警 if(!k2) /按下按键 delay(10); /延时去抖 if(!k2) Slong+=10; /没按下一次,数值加10 while(!k2); /等候按键 弹起 else if(!k3) delay(10); if(!k3) Slong-=10; while(!k3); /*当a=2时*/ if(a=2) /当a等于2时 。 目标是 当再次按K1键时,使a=0. 达成循环作用。 a=0; / 使a等于0, 让程序进入 对应运行。 请看上面a
33、=0时系统为正常进行,会自动计算距离,会检测是否报警。 warn() /报警函数 if(SSlong) /当距离大于设定报警值时 speak=1; / 蜂咛器不报警。 Conut(void) /计算 所测距离值。 time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; /算出来是CM if(S=700)|flag=1) /超出测量范围显示“-” flag=0; disbuff0=10; /“-” disbuff1=10; /“-” disbuff2=10; /“-” else disbuff0=m%1000/100; disbuff1=m%1000%100/10; disbuff2=m%1000%10 %10; /*/ void zd0() interrupt 1 /T0中止用来计数器溢出,超出测距范围 flag=1; /中止溢出标志 /*/ void zd3() interrupt 3 / TH1=0xf8; TL1=0x30; Display(); / 刷新数码管 timer+; if(timer=50) timer=0; TX=1; _nop_(); /短暂延时 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _