《基于51单片机的超声波测距电路(共17页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的超声波测距电路(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上南 华 大 学 电气工程学院2010年十二月“超声波测距电路”作品简介(论文)作品名称:基于单片机的超声波测距电路 姓名: 某 某 班级: 自动化?班 学号: ? 联系电话: ? 摘 要距离,又可称为位移量,是工业五大量度之一。测距广泛用于诸如汽车倒车、物位检测、智能避障等方面。距离的测量对于生产工作是至关重要的。现行的测距方法有很多种,本电路采取了超声波测距方案。由于超声波指向性强、传输距离远,采用超声波测距是一种既方便又快捷的方法。本方案使用了MCS-51单片机作为主控芯片,且采用了集成芯片CX20106A作为超声波接收电路的主要芯片,如此大大简化了外围电路的复杂
2、程度,提高了电路的稳定性。通过测试,本电路基本上可以测得探头到障碍物之间的距离,达到了目的。关键词:超声波测距,MCS-51单片机,CX20106A ABSTRACT Distance,which is also called displacement quantity,is one of the five industrial measurements.The distance measurement is widely used in the area such as car backing,level detection,automatic obstacle avoidance and
3、so on.The distance measure is vital to the industrial production. There are many ways in current distance measurement, this circuit adoptes ultrasonic ranging scheme. Because of ultrasonic directivity of strong, long distance transmission, using ultrasonic ranging is a convenient and quick way. This
4、 solutions use MCS - 51 single-chip microcomputer as the master chip, and adopted integrated chips CX20106A as ultrasonic receiving circuit of the main chip, thus greatly simplifies the buffer circuit the complex degree, improves the stability of the circuit.Through testing, this circuit can basical
5、ly measure the distance between the sensor and the obstacle,this shall be good.KEY WORDS: ultrasonic,MCS 51 singlechip,CX20106A目 录1、 作品名称(4)2、 方案的比较与选择(4)3、 电路设计思路及总体结构(5)4、 电路的设计与成型(5)4.1供电部分(5)4.2微控制器部分(6)4.3超声波发射部分(6)4.4超声波接收部分(7)4.5温度补偿部分(8)4.6显示部分(9)4.7整体电路及其PCB图(9)5、电路软件的设计(10)5.1初始化部分(11)5.2超
6、声波发射部分(12)5.3温度检测部分(12)5.4定时及中断部分(13)5.5液晶显示部分(13)5.6主程序(14)6、总结(14)7、参考文献(15)1、作品名称:基于单片机的超声波测距电路。2、 方案的比较与选择:目前基于电子技术测量距离的常用方法主要有雷达测距、激光测距、光电测距和超声测距等。其中由于雷达测距和激光测距的条件较为苛刻且成本高,故不在方案选择的考虑范围之内。下面着重比较光电测距和超声测距两种方案。方案1:采用光电测距。一般来说,光电测距使用红外光电管作为发射接收传感器,如图2.1为红外发光二极管和接收管。图2.1 红外发射/接收管 红外发射/接收信号滤波、放大信号处理、
7、计算距离显示 图2.2 系统流程图红外测距反应灵敏,且安全可靠,但测量范围很窄,并且如果要求提高精度的话,需要提高成本。方案2:采用超声波测距。图2.3 超声波发射/接收头超声波发射/接收信号滤波、放大信号处理、计算距离显示 图2.4 系统流程图 采用超声波测距的优缺点如下:优点:超声波对色彩和光照度不敏感,可在黑暗、有粉尘和测量透明物体的环境下使用;超声波对电磁干扰不敏感,可在有电磁干扰等恶劣环境下工作;超声波易于集成化、小型化。缺点:超声波会受温度、气流、材质等影响;超声波测距如欲达到一定精度,需要复杂的外围电路支持。方案的确定:经比较方案1与方案2,可知选用超声波测距不失为一种可行的办法
8、。超声波测距的方法主要有相位检测法、声波幅值检测法、渡越时间检测法三种。相位检测法的测量精度高,但检测范围有限;声波幅值检测法易受环境反射波的影响;渡越时间检测法工作原理简单、直观,在硬件控制和软件设计方面容易实现。本电路采用渡越时间检测法,其原理为通过检测超声波的发射和接收之间的渡越时间t,通过公式s=vt计算出障碍距离,其中v为超声波在空气中的传播速度。3、 电路设计思路及总体结构:MCU显示部分温度补偿部分分析本电路的方案,总体为下面几个部分:供电部分超声波发射部分 超声波接收部分图3.1 结构框图根据总体结构可知,本电路的工作流程为:超声波发射超声波接收检测时差计算出距离显示如此就能细
9、分每个环节的工作了。下面将就每个部分进行详细解析。4、 电路的设计与成型:根据总体结构,电路可分解为以下部分,在此进行详细分析。4.1供电部分:供电部分为整个电路提供可靠的电源。图4.1.1为电源电路部分。 图4.1.1 电源电路 电源电路部分依旧使用78系列稳压芯片作为稳压芯片。由于本电路只需要使用到5V电压,故此方案简单方便且合用。4.2微控制器部分:本电路采用了STC89C52作为主控电路,图4.2.1为微控制器电路。图4.2.1 微控制器电路 STC89C52为STC公司的一款通用单片机,其操作简便,功能强大,适用于简单的控制系统的数据处理和动作控制方面。4.3超声波发射部分:超声波发
10、射部分需要用单片机产生一个频率为40kHz左右的方波来带动发射头的压电晶片来起振,从而发射出超声波。 图4.3.1 超声波换能器 图4.3.2 压电式超声波传感器结构如图4.3.3为超声波发射部分的电路:图4.3.3 超声波发射电路由于单片机端口输出功率不够,所以经单片机产生的40 kHz方波脉冲信号T分成两路,一路经一级反相器后送到超声波换能器的一个电极;另一路经两级反相器后送到超声波换能器的另一个电极。再加上两个上拉电阻TR1和TR2,可有效提高74LS04的带负载能力。4.4超声波接收部分:超声波接收部分的任务是接收到返回的超声波信号并对其进行滤波、放大、整形。由于用分立元件搭建超声波接
11、收电路的效果很差,而且电路元件的参数不容易用常用元件达到,故超声波接收电路采用了索尼公司生产的集成芯片CX20106,得到一个负脉冲送给单片机的P3.2(INT0)引脚,以产生一个中断。CX20106的内部结构如图4.4.1所示:图4.4.1 CX20106内部结构CX20l06A是日本索尼公司生产的红外接收芯片,也适用于超声波接收。其采用单列8脚直插式,小型封装,+5V供电,使用方便,功能强大。超声波接收电路如图4.4.2所示。图4.4.2 超声波接收电路超声波接收电路工作过程如下:接收的回波信号先经过前置放大器和限幅放大器,将信号调整到合适幅值的矩形脉冲,由滤波器进行频率选择,滤除干扰信号
12、,再经整形,送给输出端7脚。当接收到与CX20106滤波器中心频率38kHz相符的回波信号时,其输出端7脚就输出低电平。将此低电平信号输出给单片机的外部中断0,即可产生一个中断信号。4.5温度补偿部分:由常识可知,声波在空气中的传播速度首温度的影响。如果在计算距离时忽略这个影响,会造成不小的误差,尤其在对距离测量有精度要求时,温度因素更加不可忽略了。所以本电路特地加上了温度补偿环节。如图4.5.1为温度测量电路。图4.5.1 温度测量电路本电路采用了DALLAS公司生产的集成温度传感器DS18B20作为测温电路芯片,它具有结构小巧、操作简便且功耗小的优点,被广泛用在各种温度测量的场合。4.6显
13、示部分: 本电路采用12864液晶显示器作为显示部分,其突出优点就是可以显示汉字等字符,且与单片机的借口简单,操作方便。如图4.6.1为显示部分的电路图。图4.6.1 显示部分电路图4.7整体电路及其PCB图:整体电路(不包含单片机部分)的电路图如图4.7.1所示。图4.7.1 整体电路如图,接口P1用来与单片机交流。PCB图如图4.7.2所示。图4.7.2 PCB印制板图5、电路软件的设计: 图5.1 软件流程图由图可知,软件部分包括初始化部分、超声波发射部分、定时及中断部分、温度检测部分和液晶显示部分。下面分别对这几部分进行列举:5.1初始化部分:初始化部分完成对温度检测部分、液晶显示部分
14、和定时中断部分的初始化,其函数分别如下:温度检测初始化函数:void init_18B20(void) reset_18B20();/总线复位 wbyte_18B20(0xcc);/忽略检查ROM匹配操作 wbyte_18B20(0x4e);/设置写模式(写暂存器) wbyte_18B20(0x1f);/写温度计配置寄存器12864液晶初始化函数:void init_12864() delay_ms_12864(40); /大于40MS的延时程序 psb=1; /设置为8BIT并口工作模式 delay_12864(1); /延时 res=0; /复位 delay_12864(1); /延时 r
15、es=1; /复位置高 delay_12864(10); worder_12864(0x30); /功能设定 delay_12864(37); /大于37uS的延时程序 worder_12864(0x08); /显示状态开/关 delay_12864(100); /大于100uS的延时程序 worder_12864(0x10); /游标或显示移位控制 delay_12864(100); /大于100uS的延时程序 worder_12864(0x0c); /显示状态,D=1,显示开 delay_12864(100); /大于100uS的延时程序 worder_12864(0x01); /清除显示
16、 delay_12864(10); /大于10mS的延时程序 worder_12864(0x06); /Enry Mode Set,光标从右向左加1位移动 delay_12864(100); /大于100uS的延时程序定时中断初始化程序:void int_init()TMOD=0x02;/设置定时器为8位自动重装模式TH0=206;/定时器0,计时中断一次为50us,用于记INT0时间TL0=206;EA=1;/开总中断ET0=1;/开定时器0中断EX0=1; IT0=1;TR0=0;5.2超声波发射部分:超声波发射部分由空函数“_nop_()”进行延时并把端口反相,如此在延时适当的时候就能从
17、端口得到40kHz的方波脉冲了。超声波发射部分的函数如下:void waveo()_nop_();_nop_();_nop_();_nop_();_nop_();wave=wave;5.3温度检测部分:由于DS18B20为单总线结构,所有数据都是串行输入输出的,所以需要单片机对其进行控制。这里需要注意,单总线协议的时序要求非常严格,所以编写程序时需要多加小心。以下为温度检测部分的程序。uint getdat_18B20()float c;uint temp;uchar h,l;conv_18B20();reset_18B20();delay_18B20(1);/稍作延时wbyte_18B20(
18、0xcc);wbyte_18B20(0xbe);/发送读取温度数据的命令l=rbyte_18B20();/读取低8位h=rbyte_18B20();/读取高8位flag_18B20=h&0x80;if(flag_18B20) /最高位为1,温度为负temp=h;temp=temp8;/读取的高8位数据装在temp高8位temp=temp|l;temp=temp+1;c=temp*0.0625;temp=c*100+0.5;elsetemp=h;temp=temp8;temp=temp|l;c=temp*0.0625;temp=c*100+0.5;return(temp); /温度整数部分2位,
19、小数部分2位5.4定时及中断部分:定时部分用来量度超声波发射及接收之间的时差,中断部分用来确定接收到回波的具体时间。以下为定时及中断的程序:定时器0:void timer0() interrupt 1tim+;外部中断0:void EX0_int()interrupt 0TR0=0;cal();display();其中,定时器0中的tim用来计数,代表tim个定时时间内,超声波跑了一个来回;外部中断中,先把定时器给关掉,然后调用cal()子函数对渡越时间进行处理,接着把距离计算出来。最后调用display()函数,把结果显示在液晶屏上。5.5液晶显示部分:液晶显示部分用来把数据显示出来,以下为
20、其函数。void worder_12864(uchar dat)/给12864写指令rs=0;/rs为0表示指令,为1表示数据rw=0;/rw为0表示写,为1表示读delay_12864(10);en=1;delay_12864(10);P0=convert(dat);/convert()只用在开发板上,若是自己做的正常的12864则去掉之delay_12864(10);en=0;void wdata_12864(uchar dat)rs=1;rw=0;delay_12864(10);en=1;delay_12864(10);P0=convert(dat);delay_12864(10);en
21、=0;5.6主函数:为了节省空间,本程序的测温部分和显示部分都被封装在了头文件里,主函数中只需要负责初始化部分和发出脉冲部分,以下为其函数体:void main()uchar q=10;init_12864();init_18B20();int_init();while(1)TR0=1;while(q-)waveo();q=10;delay();在主函数的循环体while(1)中,先发出五个40kHz脉冲,然后延时20ms。延时过后再检测回波信号,这样可以避免接收头直接接收到从发射头发射来的信号,避免了误差。6、总结:以前看到学长们跑的小车上有俩大眼珠似的东西,能自动壁障,羡慕的不得了。后来知
22、道那是超声波探头,就决定一定要把它玩起来。但是当时技术水平有限,加上找不到合用的资料,所以一直拖着没做。到上个月老师布置下来题目,其中有一个超声波测距的题目,就想索性做这个吧,不做可惜了,再说两个探头这么漂亮呢。到真正开始着手做时,才发现远没这么简单。在网上海搜了一堆资料,最后选中了西安交大的一个学长的毕业设计。等研究完了学长的报告后才发现自己原来写的论文有多不规范。唉!还好有这么一篇范文,看来需要加强一下论文的写作的技巧了。其实硬件电路是抄的学长的,其原理是后来详加研究才搞明白的。由于硬件电路除了单片机最小系统部分外,超声波的发射接收以及信号处理只用到了两块芯片及很少的外围电路,所以从画原理
23、图到画好PCB板只用了一下午时间。然后把电路板做出来也只是用了一个上午。再然后就是软件部分了,也就是在软件部分,我卡了壳。卡壳的地方是产生40kHz方波脉冲的定时器程序。由于在记回波时间时还需要开一个定时器,这下可好了,高定时自动屏蔽了低定时,怎么调整都无法达到同时工作。不行了,找书!翻了一大堆书,51定时器相关的地方都找了,还是找不到。于是,两天时间就在调试、查找和出错、再调试中过去了,唉!真是小硬件大难题啊!最后没法了,只能使用延时函数试试看了。由于要求产生的频率较高,所以对定时的要求也很高,所以我在一开始就剔除了用延时函数来定时的方案。没想到最后还是得请老将出马了,唉!调试好方波发生的程
24、序后,通电,居然真的有反应了!嘿!竟然真的有用!然后后续的调试、优化程序便是水到渠成了。虽然在测量精度上不敢恭维,但算是有些线性的反应了。我从这次的经历得到了一个经验,那就是在做事前先把事情搞明白了再去做,不然有可能会在莫名其妙的地方花上几倍于搞明白的时间,这就得不偿失了。对待整体是这样,对待分立体也是这样;对待大工程是这样,对待小项目也是这样。看来这个学问还不小嘞。总之,做这个题目让我收获了很多,我非常高兴我学到了知识以外更有用的东西。前面的路还很长,但我相信我会越走越稳的! 2011.1.14 于南华大学7、参考文献:1张毅刚.新编MCS-51单片机应用设计M.哈尔滨. 哈尔滨工业大学出版社,20042康华光.电子技术基础M.北京:高等教育出版社,20013黄智伟全国大学生电子设计竞赛制作实训M北京:北京航空航天大学出版社,2007专心-专注-专业