基于51单片机的超声波测距系统的设计
O 引言
超声波是指频率大于20 kHz的在弹性介质中产生的机械震荡波。由于超声波频率较高,穿透力强,指向性强,传输过程中衰减少,能量消耗缓慢,在介质中传播的距离较远,遇到杂质或分界面时会产生反射波,因此常被用于非接触式测距。并且超声波对光线、色彩和电磁场不敏感,因此超声波测距对环境有较好的适应能力。广泛应用于汽车倒车、机器人避障、工业测井、水库液位测量、管道长度测量等需要自动进行非接触测距的场合。
1 超声波测距原理
Pellarn和Galt于1946年提出了脉冲回波法,其工作原理是:用超声脉冲激励超声探头向外辐射超声波,同时接收从被测物体反射回来的超声波(简称回波),通过检测或估计从发射超声波至接收回波所经历的射程时间ToF(Time of Flight),按下式计算超声波探头与被测物体之间的距离d,即
其中。c为声波在空气介质中的传播速度。
2 系统构成
本系统硬件电路由单片机、超声波发射电路、超声波接收电路、测温电路、显示电路、报警电路等构成,如图1所示。
3 系统程序设计
3.1 主程序
主程序首先对系统环境初始化,设置定时器TO工作模式为16位定时/计数器模式,总中断允许位置1并给显示端口清0;然后调用超声波发生子程序送出若干个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起直射渡触发,从发射开始一直到“虚假反射波”结束这段时间内,不开放外部中断(INTO)申请,便可有效躲避干扰,但同时也会造成测试“盲区”。假设延时约0.1 ms后,才打开外部中断接收返回的超声波信号,当温度为20℃,测量盲区为d=1×10-2×344=1.72 cm。
3.2 超声波发生子程序和接收子程序
超声波发生子程序的作用是通过P1.0端口发送超声波换能器所需的40kHz的方波信号(脉冲宽度为12μs左右),同时把计数器TO打开进行计时。超声波发生子程序较简单,但要求程序运行准确,所以采用汇编语言编程。 超声波接收子程序利用外部中断O检测返回超声波,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断服务子程序,关闭定时器TO停止计时,并将测距成功标志位赋值1。如果当计时器溢出时还未检测到超声波返回信号,则说明障碍物过远,超出量程,将关闭外部中断,并标志此次测距不成功。
最大测试距离将取决于:两次脉冲群发送之间的最小时间间隔和脉冲的能量。一般来说,发射端脉冲个数越多,能量越大,所能测量的距离也越远。但也不是无限制的,本方案是读取定时器TO的计数值,最大能测试的距离是TO尚未溢出时检测到超声波回波信号,故在温度20℃下,最大测试距离为。在一些周期性发射超声波设备中,如果要测试的最大距离是10 m,则两次脉冲群之间的最小时间为。
由于采用12 MHz的晶振,机器周期为1μs,当主程序检测到接收成功的标志位后,将计数器TO中的数值按式(1)计算,即可测得被测物与测距仪之间的距离,取20℃时的声速为344 m/s。则有:
其中,TO为计数器TO的计数值。
4 提高测量精度
4.1 温度补偿
由于超声波的声速与温度有关,如果温度变化不大,可认为声速基本不变。如果测距精度要求很高,则应通过温度补偿的方法加以校正。
可知,超声波在空气中的传播速度与温度T(单位:摄氏度)有如下近似关系:
其中,C0为0℃时的声波速度为331.45 m/s,T为实际温度(℃)。在常温下,温度每变化1摄氏度,超声波速度变化约为O.6 m/s,所以通过测温电路测量出当前温度,就可以计算出超声波在当前温度下的传输速度。
测温电路采用的主要元器件是美国Dallas半导体公司生产的单总线数字温度传感器DSl8B20,其具有精度高、智能化、体积小、线路简单等特点。
4.2 角度补偿
由于发射与反射之间存在一定的夹角2α,当α很小时,可直接按式(1)计算距离;当α较大时,则必须进行距离修正,其修正公式为:
在式(4)中,夹角α与超声波发射装置和接收装置的安装位置有关,在实际应用中应保持两换能器中心轴线尽量平行并相距2 cm~4 cm,在近距离测量时更要考虑角度补偿。若能够将超声接收电路屏蔽起来,则可提高抗干扰性能。根据测量范围可适当调整与接收换能器并接的滤波电容的大小,以获得合适的接收灵敏度和抗干扰能力。
5 结论
为防止在测量过程中测距仪的抖动而引起的测量误差,一般情况下应测量几次取其平均值。由于系统的分辨率为1μs,系统引起的固定误差约为0.3mm,再加上本设计只考虑了温度补偿和角度补偿的影响,而没有考虑其他环境因素(如:气压、湿度……)的影响,所以在测量的时侯给测量结果带来了一定的误差。
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)