超声波传感器测距原理Word下载.docx
《超声波传感器测距原理Word下载.docx》由会员分享,可在线阅读,更多相关《超声波传感器测距原理Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
由于超声波的传播距离与它的振幅成正比,为了使测距范围足够远,可对振荡信号进行功率放大后再加在超声波传感器上。
图3中T为超声波传感器,是超声波测距系统中的重要器件。
利用逆压电效应将加在其上的电信号转换为超声机械波向外辐射;
利用压电效应可以将作用在它上面的机械振动转换为相应的电信号,从而起到能量转换的作用。
市售的超声波传感器有专用型和兼用型,专用型就是发送器用作发送超声波,接收器用作接收超声波。
兼用型就是收发一体,只一个传感器头,具有发送和接收声波的双重作用,称为可逆元件。
图3超声波发射电路
超声传感器结构
超声波发生器T是一个超声频电子振荡器,当把振荡器产生的超声频电压加到超声换能器的压电陶瓷上时,压电陶瓷组件就在电场作用下产生纵向振动。
压电组件在超声振荡时,仿佛是一个小活塞,其振幅很小,约为(1~10.2)Lm,但这种振动加速度很大,约(10~103)gn,于是把电磁振荡能量转化为振动能量,这种巨大的超声波能量,沿着特定方向传播出来。
其关键技术是使超声波波束变细,除待测物外不受其它构造物的影响。
超声传感器是产生超声波必需的能量转换装置,它把超声电磁振荡的能量转换为声波。
.通过上述超声换能结构,配以适当的收发电路,可以使超声能量的定向传输,并按预期接收反射波,实现超声遥控、测距、防盗等检测功能。
2、超声波接收电路
超声波接收及信号处理电路是此系统设计和调试的一个难点。
超声波接收器接收反射的超声波转换为40KHz毫伏级的电压信号,需要经过放大、处理、用于触发单片机中断INT0。
一方面传感器输出信号微弱,同时根据反射条件不同信号大小变化较大,需要放大倍数大约为100到5000倍,另一方面传感器输出阻抗较大,这就需要高输入阻抗的多级放大电路,这就会引入两个问题:
高输入阻抗容易接收干扰信号,同时多级放大电路容易自激振荡。
参考各种资料最后选用了SONY公司的专用集成前置放大器CX20106达到了比较好的效果。
CX20106由:
前置放大器、限幅放大器、带通滤波器、检波器、积分器、整型电路组成。
其中的前置放大器具有自动增益控制功能,可以保证在超声波传感器接收较远反射信号输出微弱电压时放大器有较高的增益,在近距离输入信号强时放大器不会过载。
其带通滤波器中心频率可由芯片脚5的外接电阻调节。
其主要指标:
单电源5V供电,电压增益77-79DB,输入阻抗27KΩ,滤波器中心频率30K-60KHz。
功能可描述为:
在接收到与滤波器中心频率相符的信号时,其输出脚7脚输出低电平。
芯片中的带通滤波器、积分器等使得它抗干扰能力很强。
CX20106采用8脚单列直插式塑料封装,内部结构框图如图4。
超声波接收器能将接受到的发射电路所发射的红外光信号转换成数十伏至数百伏的电信号,送到CX20106的①脚,CX20106的总放大增益约为80dB,以确保其⑦脚输出的控制脉冲序列信号幅度在~5V范内。
总增益大小由②脚外接的R1、C1决定,R1越小或C1越大,增益越高。
C1取值过大时将造成频率响应变差,通常取为1uf。
C2为检波电容,一般取。
CX20106采用峰值检波方式,当C2容量较大时将变成平均值检波,瞬态响应灵敏度会变低,C2较小时虽然仍为峰值检波,且瞬态响应灵敏度很高,但检波输出脉冲宽度会发生较大变动,容易造成解调出错而产生误操作。
R2为带通滤波器中心频率f0的外部电阻,改变R2阻值,可改变载波信号的接受频率,当f0偏离载波频率时,放大增益会显著下降,C3为积分电容,一般取330pf,取值过大,虽然可使抗干扰能力增强,但也会使输出编码脉冲的低电平持续时间增长,造成遥控距离变短。
⑦脚为输出端,CX20106处理后的脉冲信号由⑦脚输出给单片机处理从而获得显示输出。
图4CX20106内部结构框图
本系统中应用的接收电路见图5,当89C51的为高电平时三级管V1导通,+5V电源通过继电器线圈和V1的发射结到地,使继电器K1接通,R2和R3并联组成5Ω电阻通过C1组成RC电路,控制红外接收专用集成电路CX20106的增益,使其7脚输出一定幅度的电压信号到89C51的口以触发中断。
另外该芯片价格在三到五元,非常节省系统成本。
图5 超声波接收电路
3、距离显示电路
图6显示电路
超声波显示电路如图6所示。
是利用单片机的串行输出。
只用单片机的TXD,RXD端即可显示数字。
三、软件程序设计
本系统采用模块化设计,由主程序、发射子程序、接收子程序、定时子程序、显示子程序等模块组成,图8为程序流程图。
该系统的主程序处于键控循环工作方式,当按下测量键时,主程序开始调用发射子程序、查询接收子程序、定时子程序,并把测量结果用显示子程序在数码显示器上显示出来。
图8软件程序框图
定时器中断子程序
外部中断服务子程序
四、具体程序
#include<
>
#include<
/*定义数据类型*/
#defineuintunsignedint
#defineucharunsignedchar
/*定义系统常数*/
longinttime;
/*时间*/
bitCLflag;
/*测量标志*/
charcshu;
/*串数*/
#defineT12us(256-12)/*定时器设初值T=(256-T12us)*12/12MHZ*/
/*定义功能位,串口用于显示*/
sbitVOLCK=;
/*发射*/
sbitMING=;
/*外部中断0检测接收信号*/
charidatadisp[9];
/*显示数据*/
charidatanumber[9];
charcodetable[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
/*码表0,1,2,3,4,5,6,7,8,9*/
voiddispfb()/*显示5位数据*/
{chari;
for(i=0;
i<
5;
i++){
disp[i]=table[number[i]];
}
disp[3]=disp[3]+1;
/*置小数点*/
6;
SBUF=disp[i];
while(TI==0);
TI=0;
/*通用延时子程序*/
voiddelay(intj)
{inti;
j;
)i++;
/*初始化定时器,CTC0、CTC1用于定时*/
voidinit_CTC(void)
{
TMOD=0x21;
/*设CTC1工作于模式2*/
ET0=0;
/*不允许CTC0中断*/
voidinit_INT()/*外部中断初始化为高优先级,并开中断*/
IP=0x01;
/*置外部中断INT0优先级为高*/
TCON=0;
/*设置外部中断0的中断方式为电平触发*/
voidserve_INT0()interrupt0
/*外部中断0,用于检测接收信号*/
TR0=0;
/*关闭定时器0*/
EX0=0;
/*关中断*/
time=(long)TL0;
time+=(long)TH0*256;
CLflag=1;
/*CTC1中断服务程序,中断一次,用于发射*/
voidCTC1_INT()interrupt3
VOLCK=~VOLCK;
cshu++;
voidCTC0_INT()interrupt1
ET0=0;
voidTimetojuli()/*将测量的时间转换为距离*/
longi;
i=(long)time;
i=i*340;
i=i/2;
number[4]=i/;
/*十米*/
i=i-number[4]*;
number[3]=i/1000000;
/*米*/
i=i-number[3]*1000000;
number[2]=i/100000;
/*分米*/
i=i-number[2]*100000;
number[1]=i/10000;
/*厘米*/
i=i-(long)number[1]*10000;
number[0]=i/1000;
/*毫米*/
uchargetkey();
/*读键盘*/
/*主程序*/
voidmain()
inti,key;
init_CTC();
/*初始化定时器*/
init_INT();
/*初始化外部中断*/
for(i=6;
i>
4;
i--)disp[i]=0xff;
cshu=0;
/*传数*/
delay(200);
/*延时*/;
IE=0x80;
/*开中断*/
ET1=0;
TR1=0;
TL1=T12us;
TH1=T12us;
while
(1)
key=getkey();
if(key==0x0fe&
&
CLflag==1)/*测量*/
key=0;
CLflag=0;
TL0=0;
TH0=0;
/*定时器0的初始时间*/
TR0=1;
/*启动定时器0,开始记时*/
TR1=1;
/*启动定时器1,发送信号*/
ET1=1;
while(cshu<
12);
/*发十个脉冲串*/
delay(95);
EX0=1;
while(!
CLflag);
if(cshu>
=10&
CLflag==1)
{Timetojuli();
dispfb();
}
uchargetkey()
charflag;
ucharkey,keytemp;
flag=0;
keytemp=P1;
if(keytemp==0xff)return(255);
else{
flag=1;
delay(100);
key=P1;
if(key==keytemp)return(key);
elsereturn(255);
五、实验结果及分析
表2是利用本文的测距仪进行实际测量的结果。
由表中数据可见,在20~150cm范围内误差相对较小;
小于20cm范围内误差较大,这是因为超声波距离测量存在一定范围的盲区,盲区的出现是因为发出信号必须有一个上升时间,当距离太近时计算机系统已不能处理迅速返回的反射波信号,所以距离小于0.2米测量误差明显增加。
300cm以后的数据误差明显增大,这是由于发射功率不够大,接收到的信号很微弱,引入了一些干扰因素。
但电路引入温度补偿电路后总的实验结果误差在厘米级,基本上可以满足测量要求。
实际距离/cm
测量结果/cm
19
31
39
51
60
69
88
100
误差℅
5
2
126
147
195
221
235
251
270
312
4
表2 测距仪实测结果
结束语
本系统利用超声波传感器实现无接触式空气测距,没有考虑环境温度对超声波传递速度的影响,故本系统在常温下具有测量精度高、抗干扰能力强、反应速度快等特点,可适用于各种水文液位测量、障碍物的识别以及车辆自动导航等领域,因此具有广阔的应用前景。
仅供个人用于学习、研究;
不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;
notforcommercialuse.
Nurfü
rdenpersö
nlichenfü
rStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'
é
tudeetlarechercheuniquementà
desfinspersonnelles;
pasà
desfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文