第3章 超声波测距器的设计资料文档格式.docx
- 文档编号:19843929
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:16
- 大小:472.60KB
第3章 超声波测距器的设计资料文档格式.docx
《第3章 超声波测距器的设计资料文档格式.docx》由会员分享,可在线阅读,更多相关《第3章 超声波测距器的设计资料文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
声波传播的速度“c”可以用下列公式表示。
c=331.5+0.607t(m/s)式中,t=温度(℃)也就是说,声音传播速度随周围温度的变化而有所不同。
因此,要精确的测量与某个物体之间的距离时,始终检查周围温度是十分必要的,尤其冬季室内外温差较大,对超声波测距的精度影响很大,此时可用18B20作温度补偿来减小温度变化所带来的测量误差,考虑到本设计的测试环境是在室内,而且超声波主要是用于测距功能,对测量精度要求不高,所以关于温度效应对系统的影响问题在这里不做深入的探讨。
(4)衰减
传播到空气中的超声波强度随距离的变化成比例地减弱,这是因为衍射现象所导致的在球形表面上的扩散损失,也是因为介质吸收能量产生的吸收损失。
超声波的频率越高,衰减率就越高,超声波的传播距离也就越短,由此可见超声波的衰减特性直接影响了超声波传感器有效距离。
(5)灵敏度特性
灵敏度是表示声音接收级的单位,使用下列公式予以表示。
灵敏度=20logE/P(dB)式中,“E”为所产生的电压(Vrms),“P”为输入声压(μbar),超声波传感器的灵敏度直接影响着系统测距范围。
当频率在40kHz时传感器所对应的灵敏度最高。
2、超声波传感器
完成产生超声波和接收超声波这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声波探头。
超声波传感器主要由压电晶片组成,既可以发射超声波,也可以接收超声波。
小功率超声探头多用作探测方面。
它有许多不同的结构,可分直探头(纵波)、斜探头(横波)、表面波探头(表面波)、兰姆波探头(兰姆波)、双探头(一个探头反射、一个探头接收)等。
超声传感器的核心是其塑料外套或者金属外套中的一块压电晶片。
构成晶片的材料可以有许多种。
由于晶片的大小,如直径和厚度也各不相同,因此每个探头的性能都是不同的,我们使用前必须预先了解清楚该探头的性能参数。
超声波传感器的主要性能指标包括:
(1)工作频率。
工作频率就是压电晶片的共振频率。
当加到它两端的交流电压的频率和晶片的共振频率相等时,输出的能量最大,灵敏度也最高。
(2)工作温度。
由于压电材料的居里点一般比较高,特别是诊断用超声波探头使用功率较小,所以工作温度比较低,可以长时间地工作而不失效。
医疗用的超声探头的温度比较高,需要单独的制冷设备。
(3)灵敏度。
主要取决于制造晶片本身。
机电耦合系数大,灵敏度高。
超声波为直线传播方式,频率越高,绕射能力越弱,但反射能力越强。
为此,利用超声波的这种性能就可制成超声波传感器。
另外,超声波在空气中的传播速度较慢,为340m/s,这就使得超声波传感器使用变得非常简便。
我们选用压电式超声波传感器。
它的探头常用材料是压电晶体和压电陶瓷,是利用压电材料的压电效应来进行工作的。
逆压电效应将高频电振动转换成高频机械振动,从而产生超声波,可作为发射探头;
而利用正压电效应,将超声振动波转换成电信号,可作为接收探头。
为了研究和利用超声波,人们已经设计和制成了许多种超声波发生器。
总体上讲,超声波发生器大体可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;
机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构如图3.1所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
图3.1超声波传感器结构
3.3硬件电路设计
硬件电路主要分超声波发射接收器、单片机控制电路、显示电路和报警电路四部分。
超声波测距器用STC89C52单片机作为核心控制单元,当测得的距离小于设定距离时,主控芯片将测得的数值与设定值进行比较处理,然后控制蜂鸣器和LED报警。
设计框图如图3.2所示。
图3.2系统设计方框图
3.3.1超声波模块
超声波模块采用现成的HC-SR04超声波模块,该模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm。
模块包括超声波发射器、接收器与控制电路。
基本工作原理:
采用IO口TRIG触发测距,给至少10μs的高电平信号;
模块自动发送8个40kHz的方波,自动检测是否有信号返回;
有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340m/s))/2。
实物如图3.3所示。
其中VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出等四支线。
图3.3超声波模块实物图
超声波探测模块HC-SR04的使用方法如下:
IO口触发,给TRIG口至少10us的高电平,启动测量;
模块自动发送8个40kHz的方波,自动检测是否有信号返回;
有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间,测试距离=(高电平时间*340)/2,单位为m.程序中测试功能主要由两个函数完成。
3.3.2单片机系统及显示电路
单片机与显示系统电路原理图如图3.4所示。
图中VCC为5V的工作电源,5个发光二极管(D1~D5)显示被测距离长短的趋势。
当大于等于100cm,5个发光二极管全亮,且不发声。
距离小于100cm时开始报警,离障碍物的距离越近报警声越急促。
当被测距离大于等于75cm小于100cm时,4个发光二极管亮;
当被测距离大于等于50cm小于75cm,3个发光二极管亮;
当被测距离大于等于30cm小于50cm时,2个发光二极管亮;
当被测距离小于30cm,1个发光二极管亮,蜂鸣器急促报警。
图3.4单片机与显示系统电路原理图
3.3.3声音报警电路
用一个蜂鸣器和三极管8550、电阻接到单片机的P2.3引脚上,构成声音报警电路,其中三极管的放大作用就是:
集电极电流受基极电流的控制(假设电源能够提供给集电极足够大的电流的话),并且基极电流很小的变化,会引起集电极电流很大的变化,且变化满足一定的比例关系:
集电极电流的变化量是基极电流变化量的β倍,即电流变化被放大了β倍,所以我们把β叫做三极管的放大倍数(β一般远大于1,例如几十,几百)。
如果我们将一个变化的小信号加到基极跟发射极之间,这就会引起基极电流Ib的变化,Ib的变化被放大后,导致了Ic很大的变化。
如果集电极电流Ic是流过一个电阻R(蜂鸣器相当于电阻R)的,那么根据电压计算公式U=R*I可以算得,这电阻上电压就会发生很大的变化。
我们将这个电阻上的电压取出来,就得到了放大后的电压信号了。
如图3.5示为声音报警电路:
图3.5声音报警电路图
3.4系统的程序设计
3.4.1测距分析
最常用的超声测距的方法是回声探测法,超声波发射器向某一方向发射超声波,在发射时刻的同时计数器开始计时,超声波在空气中传播,途中碰到障碍物面阻挡就立即反射回来,超声波接收器收到反射回的超声波就立即停止计时。
由于超声波也是一种声波,其声速v与空气温度有关,一般来说,温度每升高1℃,声速增加0.6m/s。
表3.1列出了几种温度下的声速关系:
表3.1超声波波速与温度的关系表
温度(℃)
-30
-20
-10
10
20
30
100
声速(m/s)
313
319
325
323
338
344
349
386
在使用时,如果传播介质温度变化不大,则可近似认为超声波速度在传播的过程中是基本不变的。
如果对测距精度要求很高,则应通过温度补偿的方法对测量结果加以数值校正。
声速确定后,只要测得超声波往返的时间,即可求得距离。
这就是超声波测距仪的基本原理。
如图3.6所示:
t
超声波发射障碍物
S
H
θ
超声波接收
图3.6超声波的测距原理
[3-1]
[3-2]
式中:
L---两探头之间中心距离的一半.
又知道超声波传播的距离为:
[3-3]
v—超声波在介质中的传播速度;
t—超声波从发射到接收所需要的时间.
将[3-2]、[3-3]代入[3-1]中得:
[3-4]
其中,超声波的传播速度v在一定的温度下是一个常数(例如在温度T=30度时,V=349m/s);
当需要测量的距离H远远大于L时,则[4-4]变为:
[3-5]
所以,只要需要测量出超声波传播的时间t,就可以得出测量的距离H.
超声波在空气中的传播速度一般为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物面的距离H,即:
H=340t/2。
3.4.2主程序
主程序流程图如图3.7所示。
首先设计上电时让蜂鸣器叫一声,目的是提示已开机。
等待1ms后执行任务。
随后是对系统环境初始化:
设置单片机IO口P0、P1、P2、P3为高电平;
设置EA=1,开启总中断;
设置TMOD=0x11,使定时器0和定时器1工作方式为方式1;
设置TR0=1和TR1=1,允许定时器0和定时器1定时计数;
设置ET0=0,关闭定时器0的中断;
设置ET1=1,开启定时器1的中断。
设置完毕后,发射超声波信号,待检测到超声波信号时,执行测距报警。
图3.7主程序流程图
3.4.3超声波测距程序
单片机发送端c_send(P3.2口)向TRIG(触发信号输入)发送10μs的高电平触发,这时发射超声波,也关闭了定时器0并且把定时器0清零,保证定时器0准确计数,由于采用的是12MHz的晶振,计数器每计一个数就是1μs。
然后单片机发送端c_recive(P3.3口)等待,待检测到EHCO(回响信号输出)为高电平时,开启定时器0定时计数,读取高电平持续时间,并比较是否大于40ms,如果大于40ms,就关闭定时器0,反之,就计算出距离,再关闭定时器0。
超声波发射探测流程如图3.8所示:
图3.8超声波发射探测流程图
3.4.4报警程序
报警工作流程如图3.9所示:
图3.9报警程序流程图
定时器1设TH1=(65536-2000)/256,TL1=(65536-2000)%256,即设置为2ms中断一次,中断150次为一个周期,即300ms,就是一个周期执行一次超声波发射探测流程,为了使超声波模块能测的得距离更加准确。
然后来比较超声波探头离障碍物的距离是否大于等于100cm:
(1)小于100cm时,通过定时器1的中断计的次数来比较离障碍物的距离,是否越来越近或越来越远,来改变蜂鸣器发声越来越快或越来越近;
大于等于75cm小于100cm,亮4个灯,P1=0xf0;
大于等于50cm小于75cm,亮3个灯,P1=0xf8;
大于等于30cm小于50cm,亮2个灯,P1=0xfc;
小于30cm,亮1个灯,P1=0xfe,并且急促报警。
(2)大于等于100cm时,beep=1,P1=0xe0,蜂鸣器不发声,亮5个灯。
3.4.5系统的参考程序
#include<
reg52.h>
//调用单片机头文件
#defineucharunsignedchar//无符号字符型宏定义变量范围0~255
#defineuintunsignedint//无符号整型宏定义变量范围0~65535
intrins.h>
sbitc_send=P3^2;
//超声波发射
sbitc_recive=P3^3;
//超声波接收
sbitbeep=P2^3;
//蜂鸣器IO口定义
bitflag_300ms;
longdistance;
//距离
uintset_d;
ucharflag_csb_juli;
//超声波超出量程
uintflag_time0;
//用来保存定时器0的时间
/***************5个LED指示灯****************/
sbitled1=P1^0;
sbitled2=P1^1;
sbitled3=P1^2;
sbitled4=P1^3;
sbitled5=P1^4;
/***********************1ms延时函数*****************************/
voiddelay_1ms(uintq)
{
uinti,j;
for(i=0;
i<
q;
i++)
for(j=0;
j<
120;
j++);
}
/******************小延时函数*****************/
voiddelay()
_nop_();
//执行一条_nop_()指令就是1us
/*********************超声波测距程序*****************************/
voidsend_wave()
c_send=1;
//10us的高电平触发
delay();
c_send=0;
TH0=0;
//给定时器0清零
TL0=0;
TR0=0;
//关定时器0定时
while(!
c_recive);
//当c_recive为零时等待
TR0=1;
while(c_recive)//当c_recive为1计数并等待
{
flag_time0=TH0*256+TL0;
if((flag_time0>
40000))//当超声波超过测量范围时,
{
TR0=0;
flag_csb_juli=2;
break;
}
else
flag_csb_juli=1;
}
if(flag_csb_juli==1)
{
TR0=0;
//关定时器0定时
distance=flag_time0;
//读出定时器0的时间
distance*=0.017;
//距离=速度*时间;
0.017cm/uS=(34000cm/1000000uS)/2
}
/*********************定时器0、定时器1初始化******************/
voidtime_init()
EA=1;
//开总中断
TMOD=0X11;
//定时器0、定时器1工作方式1
ET0=0;
//关定时器0中断
TR0=1;
//允许定时器0定时
ET1=1;
//开定时器1中断
TR1=1;
//允许定时器1定时
/****************报警函数***************/
voidclock_l()//下限报警函数距离超近声音超快
staticucharvalue,value1;
if(distance<
=100)
value++;
//消除实际距离在设定距离左右变化时的干扰
if(value>
=2)
value1++;
if(value1>
=distance*2)//这里是控制报警声越来越快
{
value1=0;
beep=~beep;
//蜂鸣器报警
}
else
value=0;
beep=1;
/***************主函数*****************/
voidmain()//主函数
beep=0;
//beep代表P3.2口,接蜂鸣器。
beep=0目的是开机叫一声
delay_1ms(150);
//延时
P0=P1=P2=P3=0xff;
//初始化单片机IO口为高电平
send_wave();
//测距离函数
time_init();
//定时器初始化程序
//测距离函数
while
(1)
{
if(flag_300ms==1)
{
flag_300ms=0;
send_wave();
if(beep==1)
send_wave();
if(distance<
30)
P1=0xfe;
//1个灯亮
elseif(distance<
50)
P1=0xfc;
//2个灯亮
75)
P1=0xf8;
//3个灯亮
100)
P1=0xf0;
//4个灯亮
else
P1=0xe0;
//5个灯亮全亮
/*********************定时器1中断服务程序************************/
voidtime1_int()interrupt3
{
staticucharvalue;
//定时2ms中断一次
TH1=0xf8;
TL1=0x30;
//2ms
value++;
clock_l();
//下限报警函数距离超近声音超快
if(value>
=150)
flag_300ms=1;
3.5功能扩展
本设计给出了一个简单的超声波测距系统。
设计者可以对该设计进行功能扩展。
设计一个带显示距离的汽车倒车雷达系统,通过LCD液晶显示距离或影像。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 超声波测距器的设计资料 超声波 测距器 设计 资料