基于AT89S52单片机的超声波测距设计.docx
《基于AT89S52单片机的超声波测距设计.docx》由会员分享,可在线阅读,更多相关《基于AT89S52单片机的超声波测距设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于AT89S52单片机的超声波测距设计
基于AT89S52单片机的超声波测距设计
摘要:
超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最普遍的一种,它广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。
本文介绍了一种基于DSI8B20的AT89S52单片机超声波测距系统,阐述了DS18B20测温原理.由温度可算出实际环境下的超声波速度,利用AT98S52的计数器可以获得超声波在两探头之间的飞行时间,已知超声波的传播速度和飞行时间可以获得两探头之间的距离。
整个系统结构简单、工作可靠,有良好的测量精度。
关键词:
AT89S52;DS18B20;控制;超声波速度;飞行时间;距离。
一、超声波测距原理:
在测距方面,按测量范围或测量精度可分很多种类。
但根据测量须传感器主要分为电测和光测,电测精度相对较低,对环境要求不是特别高;光测精度在一定范围内可达纳米级,但对环境要求很高;而超声波测距主要足因为其结构简单容易集成且体积小,且能满足一定的精度而被广泛应用于工业中。
目前测量距离一般都采用波在介质中的传播速度和时间关系进行测量。
常用的技术主要有激光测距、微波雷达测距和超声波测距三种。
超声波具有指向性强、能量消耗缓慢且在介质中传播的距离较远的优点,因而经常用于距离的测量。
超声波测距主要应用于建筑施工工地以及一些工业现场和移动机器人的研制上,可在潮湿高温,多尘等恶劣环境下工作。
例如:
液位、厚度、管道长度等场合。
相比于其它定位技术而言,超声波定位技术成本低、精度高、操作简单、工作稳定可靠,非常适合于短距离测量定位。
AT89S52单片机为许多控制提供了高度灵活和低成本的解决办法。
充分利用它的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。
本文介绍一种以AT89S52单片机为核心的低成本、高精度、LED数字显示超声波测距仪的硬件电路和软件设计方法。
实际使用证明该仪器工作稳定,性能良好。
超声波测距器系统设计框图如图所示:
由单片机AT89S51编程产生40kHz的方波,由P1.0口输出,再经过放大电路,驱动超声波发射探头发射超声波。
发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的检波放大、积分整形及一系列处理,送至单片机。
单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制显示出来。
该测距装置是由超声波传感器、单片机、发射/接收电路和LED显示器组成。
传感器输入端与发射接收电路相连,接收电路输出端与单片机相连接,单片机的输出端与显示电路输入端相连接。
其时序图如图:
单片机在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。
计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。
二、系统各部分电路设计:
2.1发射模块设计:
超声波发射电路原理图,单片机P1.0端口输出的40KHz方波信号一路经一级反相器后送到超声波换能器的一个电极,另一路经两级反相器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器两端可以提高超声波发射强度。
输出端采用两个反向器并联,可以提高驱动能力。
上拉电阻R1、R2一方面可以提高反相器74LS04输出高电平的驱动能力;另一方面可以增加超声波换能器的阻尼效果,以缩短其自由振荡的时间。
压电式超声波换能器是利用压电晶体的谐振来工作的。
超声波换能器内部结构如图5所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率,压电晶片将会发生共振,并带动共振板振动产生超声波,这是它就是一个超声波发生器;反之,如果两电极未加外电压,当共振板接收到超声波时,将压迫压电晶片振动,将机械能转换为电信号,这时它就成为超声波接收换能器了。
超声波发生换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
图
图
2.2接受模块设计:
集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路,如图,用CX20106A接收超声波(无信号时输出高电平)具有很高的灵敏度和抗干扰能力。
适当的更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。
图
2.3测温及报警模块:
测温及报警电路如图3所示,采用MAXIM公司的DS18B20作为温度传感和测量装置,测量范围在之间,测量分辨率可选9位或12位,在范围内保证精度.因此完全可以满足普通条件下的测温要求。
DS18B20采TO一92型封装只有3个引脚,一根电源线,一根地线,一根数据线,每片DS18B20有一个64位串行代码存储器。
这里用P3.7口作为与DS18B20的数据输入输出口。
报警电路在所测温度高于所设温度范围时发出报警声。
2.4显示模块的设计:
LED(Light-EmittingDiode,发光二极管)有七段和八段之分,也有共阴和共阳两种。
LED数码管结构简单,价格便宜。
图,图1-7(b)是它的原理图,图1-7(c)为八段共阳LED显示管原理图。
八段LED显示管由八只发光二极管组成,编号是a、b、c、d、e、f、g和SP,分别与同名管脚相连。
七段LED显示管比八段LED少一只发光二极管SP,其他与八段相同。
图2.4.1八段LED数码显示管原理和结构
单片机对LED管的显示可以分为静态和动态两种。
静态显示的特点是各LED管能稳定地同时显示各自字形;动态显示是指各LED轮流地一遍一遍显示各自字符,人们由于视觉器官惰性,从而看到的是各LED似乎在同时显示不同字形。
为了减少硬件开销,提高系统可靠性并降低成本,单片机控制系统通常采用动态扫描显示。
但是由于本系统所用的单片机引脚少,剩余引脚很多,而且也只需显示三位字符,所以,采用了静态的显示方式,且采用了软件译码,这样单片机引脚输出可直接接到LED显示管上。
这样省去了外部复杂的译码电路。
3、系统程序设计:
超声波测距器的软件设计主要有主程序、超声波发生子程序、超声波接收中断程序即显示子程序组成。
由于C程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率并且容易精确计算程序运行的时间,而超声波测距器的程序既有较复杂的计算,又要求精确计算程序运行时间,所以控制程序可采用C语言和汇编语言混合编程。
3.1超声波测距器的算法设计:
图,即超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。
这样,只要计算出从发出超声波信号到接收到返回信号所用时间,就可算出超声波发生器与反射物体的距离。
该距离的计算公式如下:
d=s/2=(v×t)/2
其中:
d为被测物体与测距器的距离;s为声波的来回路程;v为声速;t为声波来回所用的时间。
超声波的速度v与温度有关。
表1列出了几种不同温度下的超声波声速。
在使用时,如果温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返的时间,即可求得距离。
表1不同温度下超声波声速表
温度/ºC
-30
-20
-10
0
10
20
30
100
声速/(m/s)
313
319
325
323
338
344
349
386
图3.1.1超声波测距原理图
3.2主程序:
主程序首先要对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA并对显示端口P0和P2清0;然后调用超声波发生子程序送出一个超声波脉冲。
为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这也就是超声波测距器会有一个最小可测距离的原因)后才打开外中断0接收返回的超声波信号。
由于采用的是12MHz的晶振,计数器每计一个数就是1µs,所以当主程序检测到接收成功的标志后,将计数器T0中的数(即超声波来回所用的时间)按式d=(v×t)/2=(172T0/10000)cm计算,即可得被测物体与测距器之间的距离。
设计时取20ºC时的声速为344m/s。
测出距离后,结果将以十进制BCD码方式送往LED显示约0.5s,然后再发送超声波重复测量过程。
图7所示为主程序流程图。
3.3超声波发生子程序和超声波接收中断程序:
主程序流程图
超声波发生子程序的作用是通过P1.0端口发送两个左右的超声波脉冲信号(频率约40kHz的方波),脉冲宽度为12µs左右,同时把计数器T0打开进行计时。
超声波发生子程序较简单,但要求程序运行时间准确,所以采用汇编语言程序。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入超声波接收中断程序。
就立即关闭计时器T0,停止计时,并将测距成功标志字赋值1。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2,以表示本次测距不成功。
四、调试及性能分析:
超声波测距器的制作和调试都较为简单,其中超声波发射和接收采用Φ15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4-8cm,其余原件无特殊要求。
若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰性能。
根据测量范围要求不同,可适当的调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调整好后,便可将程序编译好下载到单片机运行。
根据实际情况,可以修改超声波发生子程序每次发送的脉冲个数和两次测量的间隔时间,以适应不同距离的测量需要。
五、电路图:
单片机及显示系统电路图
超声波发射电路原理图
超声波检测接收电路图
温度控制报警电路图
参考文献:
《51系列单片机原理与实践教程》西安电子科技大学出版社邹应全编;
《传感器及其应用实例》机械工业出版社何希才薛永毅编;
《传感器与检测技术》电子工艺出版社徐科军编;
《超声波测距误差分析》苏炜龚壁建潘笑.
附录:
程序:
/*超声波测距器单片机程序*/
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
externvoidcs_t(void);
externvoiddelay(uint);
externvoiddisplay(uchar*);
datauchartestok;
/*主程序*/
voidmain(void)
{
datauchardispram[5];
datauinti;
dataulongtime;
P0=0xff;
P2=0xff;
TMOD=0x11;
IE=0x80;
while
(1)
{
cs_t();
delay
(1);
testok=0;
EX0=1;
ET0=1;
while(!
testok)display(dispram);
if(1==testok)
{
time=TH0;
time=(time<<8)|TL0;
time*=172;
time/=10000;
dispram[0]=(uchar)(time%10);
time/=10;
dispram[1]=(uchar)(time%10);
time/=10;
dispram[2]=(uchar)(time%10);
dispram[3]=(uchar)(time/10);
if(0==dispram[3])dispram[3]=17;
}else
{
dispram[0]=16;
dispram[1]=16;
dispram[2]=16;
dispram[3]=16;
}
for(i=0;i<300;i++)display(dispram);
}
}
/*超声波接收程序(外中断0)*/
voidcs_r(void)interrupt0
{
TR0=0;
ET0=0;
EX0=0;
testok=1;
}
/*超时清除程序(内中断0)*/
voidovertime(void)interrupt1
{
EX0=0;
TR0=0;
ET0=0;
testok=2;
}
/*文件2:
cs_t.asm*/
/*超声波发生子程序*/
NAMECS_T
?
PR?
CS_T?
CS_TSEGMENTCODE
PUBLICCS_T
RSEG?
PR?
CS_T?
CS_T
CS_T:
PUSHACC
MOVTH0,#00H
MOVTL0,#00H
MOVA,#4D
SETBTR0
CS_T1:
CPLP1.0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZACC,CS_T1
POPACC
RET
END
/*文件3:
display.asm*/
/*4位共阳LED动态扫描显示程序*/
NAMEDISPLAY
?
PR?
_DISPLAY?
DISPLAYSEGMENTCODE
?
CO?
_DISPLAY?
DISPLAYSEGMENTDATA
EXTRNCODE(_DELAY)
PUBLIC_DISPLAY
RSEG?
CO?
_DISPLAY?
DISPLAY
?
_DISPLAY?
BYTE:
DISPBIT:
DS1
DISPNUM:
DS1
RSEG?
PR?
_DISPLAY?
DISPLAY
_DISPLAY:
PUSHACC
PUSHDPH
PUSHDPL
PUSHPSW
INCDISPNUM
MOVA,DISPNUM
CJNEA,#4D,DISP1
DISP1:
JCDISP2
MOVDISPNUM,#00H
MOVDISPBIT,#0FEH
DISP2:
MOVA,R1
ADDA,DISPNUM
MOVR0,A
MOVA,@R0
MOVDPTR,#DISPTABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,DISPNUM
CJNEA,#2D,DISP3
CLRP0.7
DISP3:
MOVP2,DISPBIT
MOVR6,#00H
MOVR7,#0AH
LCALL_DELAY
MOVP0,#0FFH
MOVP2,#0FFH
MOVA,DISPBIT
RLA
MOVDISPBIT,A
POPPSW
POPDPL
POPDPH
POPACC
RET
DISPTABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH
END
/*文件4:
delay.asm*/
/*延时100个机器周期*/
NAMEDELAY
?
PR?
_DELAY?
DELAYSEGMENTCODE
PUBLIC_DELAY
RSEG?
PR?
_DELAY?
DELAY
_DELAY:
PUSHACC;2
MOVA,R7;1
JZDELA1;2
INCR6;1
DELA1:
MOVR5,#50D;2
DJNZR5,$;2
DJNZR7,DELA1;2
DJNZR6,DELA1;2
POPACC;2
RET;2
END
附录2:
实物图
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文