《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > AT89C2051单片机结合温度补偿的超声波测距系统设计
AT89C2051单片机结合温度补偿的超声波测距系统设计
电子设计工程
张 敏 莫兆威
摘要: 本设计实现了一种以AT89C2051单片机为核心的超声波测距系统,它具有低成本,高精度,微型化数字显示的特点。为提高测量精度,在测量时使用了DS18B20温度传感器对系统进行有效的温度补偿。经实验证明,本系统电路设计合理、工作稳定、检测速度快、测量简单、易于做到实时控制。
Abstract:
Key words :

0 引言
超声波是一种在弹性介质中的机械震荡,它是由与介质相接触的震荡源所引起的,其频率在20kHz以上。由于超声波的速度相对于光速要小得多,其传播时间就比较容易检测,并且易于定向发射,方向性好,强度好控制,因而利用超声波测距在很多距离探测应用中有很重要的用途,包括无损检测、过程测量、机器人测量和定位,以及流体液面高度测量等。利用单片机控制超声波检测往往比较迅速、方便、计算简单、易于实现,并且测量精度高。

1 系统设计
超声波测距的最远距离和分辨能力,不仅需要良好的换能器,也需要合理的驱动电路及回波探测电路。对发射而言,为了使电能到机械能的转换效益最大,换能器必须工作在它的共振频率处。对接收电路而言,为了使机械能到电能的转换效率最大,最佳工作点必须取在反共振频率处,在传感器系统中,发射部分的共振频率要与接收部分的反共振频率相匹配。同时,温度对声速有着较大的影响,温度补偿无疑是减少误差的很好方法。本设计选用T40-16T/R超声波传感器,设计了一种以AT89C2051单片机为核心的低成本、高精度、微型化数字显示超声波测距仪。为了进一步提高系统测量精度和系统稳定性,在硬件上增加了温度传感器测温电路,采取声速预置和媒质温度测量相结合的办法对声速进行修正,降低了温度变化对测距精度的影响。有力提高了超声波测距系统的测量精度。
设计系统由单片机主控模块、显示模块、超声波发射模块、接收模块、温度测量补偿模块等五个模块组成,组成框图如图1所示。

a.JPG


超声波发射电路由单片机输出端直接驱动超声波发送,超声波接收电路输出端与单片机相连接,单片机的输出端与显示电路输入端相连接。单片机在TO时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。计算时间差即可得到超声波在媒介中传播的时间t,由此便可计算出距离。
2.1 超声波测距单片机控制系统
单片机AT89C2051采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.6端口监测超声波接收电路输出的返回信号。显示电路采用简单实用的3位共阳LED数码管,段码输出端口为单片机的P1口,位码输出端口分别为单片机的P3.2、P3.1、P3.0口,数码管位驱运用PNP三极管S9012三极管驱动。而温度测量采用简单的DS18B20温度传感器,测量结果送入P3.4口,利用公式算出声速。

2.2 超声波发射、接收电路
超声波发射、接收电路如图2所示。超声波发射电路由电阻R2及超声波发送头T40组成;接收电路由BG1、BG2X组成的两组三级管放大电路组成;检波电路、比较整形电路由C7、D1、D2及BG3组成。

b.JPG


40kHz的方波由AT89C2051单片机的P3.5驱动超声波发射头发射超声波,经反射后由超声波接收头接收到40kHz的正弦波,由于声波在空气中传播时衰减,所以接收到的波形幅值较低,经接收电路放大、整形,最后输出一负跳变,输入单片机的P3.7脚。由于单片机系统的晶振为12M晶振,所以只能产生半周期为12μs或13μs的方波信号,频率分别为41.67kHz和38.46kHz。本系统在编程时选用了后者。接收到的信号加到BG1、BG2组成的两级放大器上进行放大。每级放大器的放大倍数为70倍。放大的信号通过检波电路得到解调后的信号。这里使用的是IN4148检波二极管,输出的直流信号即两二极管之间电容电压。该接收电路结构简单,性能较好,制作难度小。
2.3 温度测量补偿电路
在空气中,常温下超声波的传播速度是334m/s,但其传播速度受空气中温度、湿度等因素的影响,其中受温度影响较大,如温度每升高1℃,声速就会增加约0.6m/s。因此在相同的间隔测量距离,由于波的传播时间是相同的,不同温度下的声速不同,所以最终造成测量出来的距离不相等,在距离测量精度要求很高的情况下,必须要对温度进行测量和补偿,以避免温度对测量精度的影响。本系统选用DS18B20温度传感器作为温度测量、误差补偿装置,与单片机交换信息仅需要一根I/O口线,其供电电源可来源于单片机I/O口数据线,而无需额外电源。不同温度下超声波在空气中传播速度随温度变化的关系如下:
v=331.4+0.61T (1)
式中,T为实际温度(℃),v为当前环境下声速,单位为m/s。

3 系统软件设计
软件设计部分采用模块化设计,由主程序、发射子程序、接收子程序、中断子程序、温度测量等组成。超声波测距的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序采用C语言编程。主程序完成初始化工作、超声波发射和接收顺序的控制、距离上下限超限报警。定时中断服务子程序完成超声波回波接收,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。

d.JPG

  主程序首先是对系统环境初始化,设定时器0为计数,设定时器1定时。置位总中断允许位EA。进行主程序后,进行定时测距判断,当测距标志位c1=1,即进行测量一次,程序设计中,超声波测距频度是2次/秒。测距间隔中,整个程序主要进行循环显示测量结果。当调用超声波测距子程序后,首先由单片机产生6~8个频率为38.46kHz超声波脉冲,加载至超声波发送头上。超声波头发送完超声波后,立即启动内部计时器T0进行计时,为了避免超声波从发射头直接传送到接收头引起的直射波触发,这时,单片机需要延时约1.5~2ms时间(这也就是超声波测距仪会有一个最小可测距离的原因,称之为盲区值)后,才启动对单片机P3.7脚的电平判断程序。当检测到P3.7脚的电平由高转为低电平时,立即停止T0计时。
当停止计时时,立刻启动测温程序,通过对温度的读取,算得此时声速。由于采用单片机采用的是12MHz的晶振,计时器每计一个数就是1μs,当超声波测距子程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)计算,即可得被测物体与测距仪之间的距离。测出距离后结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。我们知道,温度对声速的影响是很大的,因而应该先测量温度,再计算出此温度下的声速。

4 调试及数据分析
系统组装调试时先焊接各个模块,再进行模块的单独测试,原件安装完毕后,将写好程序的AT89C2051机装到测距板上,通电后将测距板的超声波头对着墙面往复移动,观察数码管在测量范围内能否正常显示。超声波发送功率较大时,测量距离远,则相应的下限值(盲区)应设置为较高值。
系统测距实验时在不同的实测温度下,整个系统在11个特定的距离都测量7次,共计77次测量。每组7个数据,去掉一个最大值和最小值,再求其平均值,用来作为最终的测量数据。

e.JPG


由图4可见,不同的实测温度下,在30~300cm范围内测量线和实际线几乎完全重合,此时测量的精确度最高。所以本设计系统的可测距离为28~400cm,但是最佳测量距离为30~250cm。

5 结论
本设计完成的测距系统进行了有效的温度补偿,测量精度可达0.01m,而且测量结果清晰稳定,响应时间短,0.5s刷新一次数据,测量的实时性和连续性好。本系统可在做细微调整、改进后用于多个应用领域,比如简单的移动机器人、汽车防碰撞等。

此内容为AET网站原创,未经授权禁止转载。