结合温度补偿的超声波测距系统设计
C语言编程。主程序完成初始化工作、超声波发射和接收顺序的控制、距离上下限超限报警。定时中断服务子程序完成超声波回波接收,外部中断服务子程序主要完成时间值的读娶距离计算、结果的输出等工作。
主程序首先是对系统环境初始化,设定时器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个数据,去掉一个最大值和最小值,再求其平均值,用来作为最终的测量数据。
由图4可见,不同的实测温度下,在30~300cm范围内测量线和实际线几乎完全重合,此时测量的精确度最高。所以本设计系统的可测距离为28~400cm,但是最佳测量距离为30~250cm.
5结论
本设计完成的测距系统进行了有效的温度补偿,测量精度可达0.01m,而且测量结果清晰稳定,响应时间短,0.5s刷新一次数据,测量的实时性和连续性好。本系统可在做细微调整、改进后用于多个应用领域,比如简单的移动机器人、汽车防碰撞等。
- 基于DS18B20和AT89C2051的家用温度测量器设计研究(03-07)
- 基于DS18B20的家用温度测量器方案设计(07-01)
- 浅析基于DS18B20与AT89C2051的温度测量器设计方案(10-17)
- 超声波测距器的设计(10-30)
- 详解超声波测距系统电路的设计(02-06)
- 基于超声波测距的导盲系统设计(10-29)