超声波测距器1功能要求超声波测距器可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度、物体厚度等的测量。其测量范围为0.10~4.00m,测量精度为1cm。测量时与被测物体无直接接触,能够清晰、稳定地显示测量结果。2方案论证我们知道,由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。利用超声波检测距离设计比较方便,计算处理也较简单,并且在测量精度方面也能达到日常使用的要求。超声波发生器可以分为两大类:一类是用电气方式产生超声波;另一类是用机械方式产生超声波。电气方式包括压电型、电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前在近距离测量方面较为常用的是压电式超声波换能器。根据设计要求并综合各方面因素,本例决定采用AT89C51单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成。超声波测距器系统设计框图如图1所示。3系统硬件电路的设计硬件电路主要分为单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。3.1单片机系统及显示电路单片机采用89C51或其兼容系列。系统采用12MHz高精度的晶振,以获得较稳定的时钟频率,并减小测量误差。单片机用P1.O脚输出超声波换能器所需的40kHz方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管9012驱动。单片机系统及显示电路如图2所示。3.2超声波发射电路超声波发射电路原理图如图3所示。发射电路主要由反向器74LS04和超声波换能器构成,单片机Pl.0脚输出的40kHz方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器两端可以提高超声波的发射强度。输出端采用两个反向器并联,用以提高驱动能力。上拉电阻R10、R11一方面可以提高反向器74LS04输出高电平的驱动能力;另一方面可以增加超声换能器的阻尼效果,以缩短其自由振荡的时间。压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部结构如图4所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器了。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。3.3超声波检测接收电路集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利瑁它制作超声波检测接收电路,如图3.5所示。实验证明,用CX20106A接收超声波(无信号对输出高电平)具有很高的灵敏度和较强的抗干扰能力。适当地更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。4系统程序的设计超声波测距器的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。由于C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率并且容易精确计算程序运行的时间,而超声波测距器的程序既有较复杂的计算(计算距离时),又要求精确计算程序运行时间(超声波测距时),所以控制程序可采用C语言和汇编语言混合编程。下面对超声波测距器的算法、主程序、超声波发生子程序和超声波接收中断程序逐一介绍。4.1超声波测距器的算法设计图6示意了超声波测距的原理,即超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。这样,只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。该距离的计算公式如下:d=s/2=(v×t)/2(1)其中:d为被测物与测距器的距离;s为声波的来回路程;v为声速;t为声波来回所用的时间。超声波也是一种声波,其声速v与温度有关。表3.1列出了几种不同温度下的超声波声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。表3.1不同温度下超声波声速表温度/℃30-20-lOO102030100声速/(m.s一1)3133193253233383443493864.2主程序主程序首先要对系统环境初始化,设置定时器TO工作模式为16位定时/计数器模式,置位总中断允许位EA并对显示端口PO和P2清0;然后调用超声波发生子程序送出一个超声波脉冲。为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这也就是超声波测距器会有一个最小可测距离的原因)后才打开外中断O接收返回的超声波信号。由于采用的是12MHz的晶振,计数器每计一个数就是1μs,所以当主程序检测到接收成功的标志位后,将计数器TO中的数(即超声波来回所用的时间)按式(3-2)计算,即可得被测物体与测距器之间的距离。设计时取20℃时的声速为344m/s,则有d=(v×t)/2一(172To/1OOOO)cm(2)其中:To为计数器TO的计数值。测出距离后,结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。图7所示为主程序流程图。4.3超声波发生子程序和超声波接收中断程序超声波发生子程序的作用是通过P1.O脚发送两个左右的超声波脉冲信号(频率约40kHz的方波),脉冲宽度为12μs左右,同时把计数器TO打开进行计时。超声波发生子程序较简单,但要求程序运行时间准确,所以采用汇编语言编程。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INTO引脚出现低电平),立即进入超声波接收中断程序。进入该中断后,就立即关闭计时器TO,停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器TO溢出中断将外中断O关闭,并将测距成功标志字赋值2,以表示本次测距不成功。5调试及性能分析5.1调试超声波测距器的制作和调试都较为简单,其中超声波发射和接收采用Φ5的超声波换能器TCT40-1OF1(T发射)和TCT40-1OS1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。若能将超声接收电路用金属壳屏蔽起来,则可提高抗干扰性能。根据测量范围要求不同,可适当地调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。硬件电路制作完成并调整好后,便可将程序编译好下载到单片机试运行。根据实际情况,可以修改超声波发生子程序每次发送的脉冲个数和两次测量的间隔时间,以适应不同距离的测量需要。5.2性能指标根据文中电路参数和程序,测距器可测量的范围为0.07~2.50m。测距器的最大误差不超过1cm。6控制源程序清单6.1单片机汇编源程序清单;********************************************;*超声波测距器*;*AT89C5212MHZ晶振共阳LED显示器*;********************************************;测距范围7CM-11M,堆栈在4FH以上,20H用于标志;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离;VOUTEQUP1.0;红外脉冲输出端口;;********************************************;*中断入口程序*;********************************************;ORG0000HLJMPSTARTORG0003HLJMPPINT0ORG000BHLJMPINTT0ORG0013HRETIORG001BHLJMPINTT1ORG0023HRETIORG002BHRETI;;********************************************;*主程序*;********************************************;START:MOVSP,#4FHMOVR0,#40H;40H-43H为显示数据存放单元(40H为最高位)MOVR7,#0BHCLEARDISP:MOV@R0,#00HINCR0DJNZR7,CLEARDISPMOV20H,#00HMOVTMOD,#21H;T1为8位自动重装模式,T0为16位定时器MOVTH0,#00H;65毫秒初值MOVTL0,#00HMOVTH1,#0F2H;40KHZ初值MOVTL1,#0F2HMOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHMOVR4,#04H;超声波肪冲个数控制(为赋值的一半)SETBPX0SETBET0SETBEASETBTR0;开启测距定时器start1:LCALLDISPLAYJNB00H,START1;收到反射信号时标志位为1CLREALCALLWORK;计算距离子程序SETBEACLR00HSETBTR0;重新开启测距定时器MOVR2,#64H;测量间隔控制(约4*100=400MS)LOOP:LCALLDISPLAYDJNZR2,LOOPSJMPStart1;;****************************************************;*中断程序**;****************************************************;T0中断,65毫秒中断一次INTT0:CLREACLRTR0MOVTH0,#00HMOVTL0,#00HSETBET1SETBEASETBTR0;启动计数器T0,用以计算超声来回时间SETBTR1;开启发超声波用定时器T1OUT:RETI;T1中断,发超声波用INTT1:CPLVOUTDJNZR4,RETIOUTCLRTR1;超声波发送完毕,关T1CLRET1;MOVR4,#04HSETBEX0;开启接收回波中断RETIOUT:RETI;外中断0,收到回波时进入PINT0:CLRTR0;关计数器CLRTR1CLRET1CLREA;CLREX0;MOV44H,TL0;将计数值移入处理单元MOV45H,TH0;SETB00H;接收成功标志RETI;;****************************************************;*显示程序*;****************************************************;40H为最高位,43H为最低位,先扫描高位DISPLAY:MOVR1,#40H;GMOVR5,#0F7H;GPLAY:MOVA,R5MOVP0,#0FFHMOVP2,AMOVA,@R1MOVDPTR,#TABMOVCA,@A+DPTRMOVP0,ALCALLDL1MSINCR1MOVA,R5JNBACC.0,ENDOUT;GRRAMOVR5,AAJMPPLAYENDOUT:MOVP2,#0FFHMOVP0,#0FFHRET;TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH;共阳段码表0123456789不亮A-;;****************************************************;*延时程序*;****************************************************;DL1MS:M