超声波测距仪设计正文.docx
《超声波测距仪设计正文.docx》由会员分享,可在线阅读,更多相关《超声波测距仪设计正文.docx(31页珍藏版)》请在冰豆网上搜索。
超声波测距仪设计正文
1前言
1.1课题的研究背景和意义
超声波是指频率高于20KHz的声波,属于机械波的范畴,遵循一般机械波在弹性介质中的传播规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质吸收而发生衰减等,正是因为有这些性质,使得超声波可以用于距离的测量,随着经济的发展,科技水平的不断提高,电子测量技术应用越来越广泛,超声波测量精度高,成本低,性能稳定则备受青睐,超声波测距技术被广泛的应用于人们生活和工作中。
由于超声波测距是一种非接触检测技术,不受光线、被测对象颜色的影响,比其他仪器更卫生,具有不污染、高可靠、长寿命等特点,被广泛应用于纸业、矿业、电厂、化工业、污水处理厂、食品、水文、等行业中,可在不同环境中进行距离的准确度在标定,可直接用于水酒精、糖等液位控制,能达到工业实用的指标要求。
还可以用于移动机器人的视觉系统中,这样可使机器人自动躲避障碍物行走,及时获得障碍物的位置信息,同时超声波测距系统具有以上的这些特点,在汽车倒车雷达的研制方面也得到了广泛应用。
1.2课题的国内外研究现状
目前国际国内,在超声波测距方面的研究方向和水平的不同,主要体现在对测距原理、超声波信号处理方法和超声波测距处理器的选用上。
常见的超声波测距原理分为渡越时间法和相位差法两种。
信号的处理方法大致分为阈值检验法、互相关延时估计法、伪随机码扩频测距法和最小均方法四种。
在处理器方面大多以单片机为主,其中以51系列应用最为广泛,采用运算速度更快,效率更高dsp芯片作为处理器,也正成为一个非常活跃的研究方向。
目前已研制的超声波测距仪中,量程一般为3-12m,美国AIRMAR公司生产的airducerAR30超声波传感器的作用距离可达30m,但价格昂贵,准确度方面已控制在测量误差的0.4%左右,,与真值的差距在厘米级的范围内,若采用互相关或伪随机法,最高可控制在0.05m内,在提高精确度方面,超声波测距还有很大的发展潜力和上升空间。
1.3课题设计的任务和要求
通过本课题的研究,将所学到的知识用在实践中并有所创新和进步。
该设计可广泛应用在生活、军事、工业等各个领域,它需要设计者有较好的数电、模电知识,并且有
一定的编程能力,综合运用所学的知识实现对超声波发射与接收信号进行控制,通过单片机程序对超声波信号进行相应的分析、计算、处理最后显示在1602液晶上。
1、利用单片机的优势设计该超声波测距仪。
2、该测距仪可直接从LCD显示屏上读出所测得的距离值,测量范围为2cm-450cm,该测距仪的测量精度高达0.3cm+1%。
3、利用按键设置测距的上下限,并进行声光报警提示。
4、设计产品用途:
广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。
2总体方案设计
2.1本设计的研究方法
本设计选用US-100超声波测距模块。
了解超声波测距的原理,只有对理论知识有一定的学习才能运用到实际操作中。
根据US-100超声波测距模块的硬件结构电路。
对电路进行分析能够产生超声波,实现超声波的发送和接收,从而实现利用超声波测距的方法测量物体之间的距离。
具体设计一个基于单片机的超声波测距器,包括单片机控制电路,发射电路,接收电路,液晶显示电路。
2.2系统整体方案的设计
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到农业生产等自动化的使用要求。
超声波发生器可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、电动型等;机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率、和声波特性各不相同,因而用途也各不相同。
目前在近距离测量方面常用的是压电式超声波换能器。
根据设计要求并综合各方面因素,本文采用STC89C52单片机作为控制器,用动态扫描法实现液晶数字显示,并通过按键设置系统报警的最小值和安全范围。
报警电路主要作用是对距离较近时进行报警。
根据实际情况,当距离大于3.5m时,可认为是安全状态,液晶显示“—”标志;在3.5m和1m之间时认为是正常的,显示实测距离;小于1m时,系统发出报警功能。
2.3系统整体方案的论证
超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。
实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。
此次设计采用反射波方式。
测距仪的分辨率取决于对超声波传感器的选择。
超声波传感器是一种采用压电效应的传感器,常用的材料是压电陶瓷。
由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比;而频率高分辨率也高,故短距离测量时应选择频率高的传感器,而长距离的测量时应用低频率的传感器。
2.4超声波测距原理
2.4.1超声波概述
超声波是一种频率超过20
的机械波。
超声波作为一种特殊的声波,同样具有声波传输的基本物理特性—反射、折射、干涉、衍射、散射。
超声波具有方向性集中、振幅小、加速度大等特点,可产生较大力量,并且在不同的媒质介面,超声波的大部分能量会反射。
利用超声检测往往比较迅速,方便,易于做到实时控制,并且在测量精度方面能达到工业使用的要求,主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如:
液位、井深、管道长度等场合。
超声波测量在国防、航空航天、电力、石化、机械、材料等众多领域具有广泛的作用,它不但可以保证产品质量、保障安全,还可起到节约能源、降低成本的作用。
超声波与光波、电磁波、射线等检测相比,其最大特点是穿透力强,几乎可以在任何物体中传播,了解被测物体内部情况。
超声检测设备还具有结构简单,成本低廉的优点,有利于工程实际使用。
2.4.2超声波传感器介绍
超声波传感器是一种将其他形式的能转变为所需频率的超声能或是把超声能转变为同频率的其他形式的能的器件。
目前常用的超声波传感器有两大类,即电声型与流体动力型。
电声型主要包括压电传感器、磁致伸缩传感器、静电传感器。
流体动力型包括有气体和液体两种类型的哨笛。
由于工作频率与应用目的不同,超声波传感器的结构形式是多种多样的,并且名称也有不同,例如在超声检测和诊断中习惯上都把超声波传感器称为探头,而工业中采用的流体动力型传感器称为“哨”或“笛”。
压电传感器属于超声波传感器中电声型的一种。
探头由压电晶片、楔块、接头等组成,是超声检测中最常用的实现电能和声能相互转换的一种传感器件,是超声波检测装置的重要组成部分。
压电材料分为晶体和压电陶瓷两类。
属于晶体的如石英、铌酸锂等,属于压电陶瓷的有锆钛酸铅,钛酸钡等。
其具有下列的特性:
把这种材料置于电场之中,它就产生一定的应变;相反,对这种材料施以外力,则由于产生了应变就会在其内部产生一定方向的电场。
所以,只要对这种材料加以交变电场,它就会产生交变的应变,从而产生超声振动。
因此,用这种材料可以制成超声传感器。
传感器的主要组成部分是压电晶片。
当压电晶片受发射电脉冲激励后产生振动,即可发射声脉冲,是逆压电效应。
当超声波作用于晶片时,晶片受迫振动引起的形变可转换成相应的电信号,是正压电效应。
前者用于超声波的发射,后者即为超声波的接收。
超声波传感器一般采用双压电陶瓷晶片制成。
这种超声传感器需要的压电材料较少,价格低廉,且非常适用于气体和液体介质中。
在压电陶瓷上加上有大小和方向不断变化的交流电压时,根据压电效应,就会使压电陶瓷晶片产生机械变形,这种机械变形的大小和方向在一定范围内是与外加电压的大小和方向成正比的。
也就是说,在压电陶瓷晶片上加有频率为f0交流电压,它就会产生同频率的机械振动,这种机械振动推动空气等媒介,便会产生超声波。
如果在压电陶瓷晶片上有超声机械波作用,这将会使其产生机械变形,这种机械变形是与超声机械波一致的,机械变形使压电陶瓷晶片产生频率与超声机械波相同的电信号。
压电式超声波发生器实际上是利用压电晶体的逆向压电效应来工作的。
超声波发生器内部结构如图2.1所示,它有两个压电晶片和一个锥形振子,当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动锥形振子振动,便产生超声波。
反之,如果两极间未外加电压,当锥形振子接收到超声波时,将压迫压电晶片作振动,将机械能转化为电信号,这时它就成为超声波传感器。
图2.1压电式超声波传感器结构图
压电陶瓷晶片有一个固定的谐振频率,即中心频率f0。
发射超声波时,加在其上面的交变电压的频率要与它的固有谐振频率一致。
这样,超声传感器才有较高的灵敏度。
当所用压电材料不变时,改变压电陶瓷晶片的几何尺寸,就可非常方便的改变其固有谐振频率。
利用这一特性可制作成各种频率的超声波传感器。
一般常用的超声波传感器有两种:
专用型和兼用型。
专用型是发送器用作发送超声波,接收器用作接收超声波;兼用型就是发送器和接收器是一体的传感器,既可以发送超声波,又可以接收超声波。
2.4.3超声波测距的原理
超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到发射波就立即停止计时。
假设超声波在空气中的传播速度为
,根据计时器记录的时间
,发射点距障碍物的距离
,如图2.2所示
图2.2超声波测距原理
图2.2中被测距离为H,两探头中心距离的一半用M表示,超声波单程所走过的距离用
表示,由图可得:
(1)
(2)
将式
(2)带入式
(1)得:
(3)
在整个传播过程中,超声波所走过的距离为:
(4)
式中:
为超声波的传播速度,
为传播时间,即为超声波从发射到接收的时间。
将式(4)带入式(3)可得:
(5)
当被测距离H远远大于M时,式(5)变为:
(6)
这就是所谓的时间差测距法。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离[2]。
由于是利用超声波测距,要测量预期的距离,所以产生的超声波要有一定的功率和合理的频率才能达到预定的传播距离,同时这是得到足够的回波功率的必要条件,只有得到足够的回波频率,接收电路才能检测到回波信号和防止外界干扰信号的干扰。
经分析和大量实验表明,频率为40
左右的超声波在空气中传播效果最佳,同时为了处理方便,发射的超声波被调制成具有一定间隔的调制脉冲波信号。
3单元模块设计
硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波接收电路、声光报警输出电路、供电电路等几部分,如图3.1所示。
单片机采用STC89C52,系统晶振采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P3.6端口产生10us高电平的触发信号,US-100超声波测距模块发射探头循环发出8个40kHz的方波信号,P3.7端口监测超声波接收电路输出的返回信号。
显示电路采用简单实用液晶1602显示超声波测得距离。
图3.1系统整体框图
3.1单片机主芯片电路
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
图3.2单片机芯片STC89C52的电路图
3.1.1时钟电路
首先介绍一下单片机的晶振电路,即时钟电路。
单片机的工作流程,就是在系统时钟的作用下,一条一条地执行存储器中的程序。
单片机的时钟电路由外接的一只晶振和两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。
单片机系统常用的晶振频率有6MHz、11.0592MHz、12MHz、本系统采用11.0592MHz晶振,电容选30pF,电路如图3.3。
图3.3晶振电路图
3.1.2复位电路
系统刚上电时,单片机内部的程序还没有开始执行,需要一段准备时间,也就是复位时间。
一个稳定的单片机系统必须设计复位电路。
当程序跑飞或死机时,也需要进行系统复位。
复位电路有很多种,有上电复位,手动复位等,电路如图3.4。
图3.3复位电路图
3.2US-100超声波测距模块
3.2.1概述
US-100超声波测距模块可实现2cm~4.5m的非接触测距功能,拥有2.4~5.5V的宽电压输入范围,静态功耗低于2mA,自带温度传感器对测距结果进行校正,同时具有GPIO,串口等多种通信方式,内带看门狗,工作稳定可靠。
本模块如图3.4和图3.5所示:
图3.4US-100正面图图3.5US-100背面图
3.2.2主要技术参数
表3.1
电气参数
US-100超声波测距模块
工作电压
DC2.4V~5.5V
静态电流
2mA
工作温度
-20~+70度
输出方式
电平或UART(跳线帽选择)
感应角度
小于15度
探测距离
2cm-450cm
探测精度
0.3cm+1%
UART模式下串口配置
波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验,无流控制。
3.2.3接口说明
本模块共有两个接口,即模式选择跳线和5Pin接口。
模式选择跳线的间距为2.54mm,当插上跳线帽时为UART(串口)模式,拔掉时为电平触发模式。
5Pin接口从左到右依次编号1,2,3,4,5。
它们的定义如下:
1号Pin:
接VCC电源(供电范围2.4V~5.5V);2号Pin:
当为UART模式时,接外部电路UART的TX端;当为电平触发模式时,接外部电路的Trig端;3号Pin:
当为UART模式时,接外部电路UART的RX端;当为电平触发模式时,接外部电路的Echo端;4号和5号Pin:
接外部电路的地。
3.2.4电平触发测距工作原理
在模块上电前,首先去掉模式选择跳线上的跳线帽,使模块处于电平触发模式。
电平触发测距的时序如图3.6所示:
3.6US-100测距时序图
图3.6表明:
只需要在Trig/TX管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。
当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出。
在此模式下,模块将距离值转化为340m/s时的时间值的2倍,通过Echo端输出一高电平,可根据此高电平的持续时间来计算距离值。
即距离值为:
(高电平时间*340m/s)/2。
注:
因为距离值已经经过温度校正,此时无需再根据环境温度对超声波声速进行校正,即不管温度多少,声速选择340m/s即可。
3.2.5超声波测距的系统及其组成
单片机STC89C52通过P3.6端口产生10us高电平的触发信号,使US-100超声波测距模块发射探头循环发出8个40kHz的方波信号,然后检测回波信号。
当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出,同时单片机P3.7端口监测超声波接收电路输出的返回信号。
电路如图3.7所示:
图3.7
3.3显示电路模块
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以它不能显示图形。
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地;第2脚:
VDD接5V电源正极;第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度);第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作;第6脚:
E(或EN)端为使能(enable)端;第7~14脚:
D0~D7为8位双向数据端;第15~16脚:
空脚或背灯电源,15脚背光正极,16脚背光负极。
液晶1602接口电路如图3.8所示:
图3.8液晶1602接口电路
3.4声光报警
当所测得的距离小于设置的报警距离时,P1.3口为低电平,红色发光二极管D6亮,提醒司机注意;当所测得的距离在安全距离范围内时,P1.4口为低电平,黄色发光二极管D8亮,从而可以起到光报警的作用。
当P1.2口输入低电平时三极管Q1导通蜂鸣器响,当P1.2口输入高电平时三极管Q1截止蜂鸣器不响,从而起到声音报警的作用。
电路如图3.9和3.10。
图3.9声音报警图3.10光报警
3.5电源电路
电源电路主要是为系统提供电源,在本设计中,为了使电路简单,我们直接用USB接口提供5V直流电源为电路供电。
图3.11中的第2个图是电源指示灯电路,指示是否给系统加电,
图3.11电源电路
3.6按键设置
通过按键设置系统报警的最小值和安全范围。
报警电路主要作用是在距离较近时进行报警。
根据实际情况,当距离大于3.5m时,可认为是安全状态,液晶显示“--”标志;在3.5m和1m之间时认为是正常的,显示实测距离;小于1m时,应提醒注意,系统发出报警功能。
通过按键S2选择最小值L或最大值H的设定;S5和S4设定其大小。
按键电路如3.12所示:
图3.12按键电路
4软件设计
4.1主程序设计
超声波测距的软件设计主要由超声波发生与接收程序及显示子程序组成。
超声波测距的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言编程。
主程序首先是对系统环境初始化,设定时器/计数器T0工作方式为方式1且为定时模式,开总中断允许位EA和T0中断允许位ET0。
所有的流程框图如下所示:
图4.1主程序设计框图
4.2超声波测距主程序的程序
#include//器件配置文件
#include
sbitRX=P3^7;
sbitTX=P3^6;
sbitLCM_RW=P1^6;//定义LCD引脚
sbitLCM_RS=P1^5;
sbitLCM_E=P1^7;
sbitSET=P3^2;
sbitUP=P2^6;
sbitDOWN=P2^7;
sbitBUZ=P1^2;
sbitD1=P1^3;
sbitD2=P1^4;
#defineLCM_DataP0
#defineBusy0x80//用于检测LCM状态字中的Busy标识
#defineucharunsignedchar
#defineuintunsignedint
unsignedlongSET_H=35,SET_L=10;
voidLCMInit(void);
voidDisplayOneChar(ucharX,ucharY,ucharDData);
voidDisplayListChar(ucharX,ucharY,ucharcode*DData);
voidDelay5Ms(void);
voidDelay400Ms(void);
voidDecode(ucharScanCode);
voidWriteDataLCM(ucharWDLCM);
voidWriteCommandLCM(ucharWCLCM,BuysC);
ucharReadDataLCM(void);
ucharReadStatusLCM(void);
ucharcodemcustudio[]={"Set:
L1.0MH3.5M"};
ucharcodeemail[]={"153607297@"};
ucharcodeDistance[]={"Distance:
"};
ucharcodeCls[]={""};
ucharcodeASCII[15]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};
staticucharDisNum=0;//显示用指针
uinttime=0;
unsignedlongS=0;
bitflag=0;
uchardisbuff[4]={0,0,0,0,};
//写数据
voidWriteDataLCM(ucharWDLCM)
{
ReadStatusLCM();//检测忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0;//若晶振速度太高可以在这后加小的延时
LCM_E=0;//延时
LCM_E=1;
}
//写指令
voidWriteCommandLCM(ucharWCLCM,BuysC)//BuysC为0时忽略忙检测
{
if(BuysC)ReadStatusLCM();//根据需要检测忙
LCM_Data=WCLCM;
LCM_RS=0;
LCM_RW=0;
LCM_E=0;
LCM_E=0;
LCM_E=1;
}
//读数据
ucharReadDataLCM(void)
{
LCM_RS=1;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
return(LCM_Data);
}
//读状态
ucharReadStatusLCM(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