引言
超声波受环境影响小、指向性好,能广泛应用于物位测量和倒车雷达等场合[1]。近年来,超声测距克服了测量距离短、精度有限等约束,通过算法改进和抗干扰措施的采用,逐步向大量程、高精度方向发展。这就要求控制器具有高运算速度、低响应时间和较高的集成度。
C8051F300(简称“F300”)在这些方面具有杰出的性能。它具备高速8051微控制器内核(最高可达25 MIPS)、8位ADC、温度传感器和UART,在很少外围电路的情况下即可构成超声测距系统,成为优选控制器。
超声测距仪的实物示意图如图1所示。其中,探头部分采用本教研室自主研发的超声传感器,内嵌换能器和发射接收电路,可及时传回回波数据。经调理滤波的回波信号频率为24.4 kHz,幅值为±4 V,通过测距仪器执行算法和上传数据。
1 结构与接口
如上所述,回波信号幅值集中在±4 V之间,这个数值大小适中,也便于观察,但却不符合F300的I/O口对工作电压0~3.3 V的要求,所以在信号接入单片机前,必须先进行预处理,调整幅值。本系统采取了取绝对值再作小幅衰减的方法来实现预处理。
预处理电路如图2所示。该电路由1个负电压截止正电压导通的滤波电路和1个基本加法电路组成。
图1 超声测距仪实物示意图
图2 预处理电路
(1) 滤波电路
由模拟电路的知识可知(R2/R1=1):
经D1、D2的阻止作用,原正弦信号的负半周截止,正半周导通,再经反向得到的V2是一个只有下半周的正弦图像。
(2) 基本加法电路
V1经R3,V2经R4连接到反馈电阻R5上,构成加法器,输出信号:
两相抵消后,V1、V2、V3的波形依次如图3所示。
图3 信号波形
V3的幅值应该保持在0~3 V之间。但在实际转换过程中,很容易出现过高或过低的尖峰脉冲,而这些尖峰脉冲幅值必须控制在F300 I/O脚的耐压范围-0.3~+4.2 V以内;所以,在电路的后端连接了锗二极管D3以形成0.3 V左右的压降,充分滤除低电压成分。稳压管D4的引入也是为了保证高压不超过3.6 V,以免烧毁单片机。考虑到电阻阻值的容许误差、半波整流的非线性工作、放大器间的相互影响等因素,PCB布线过程中放置了正负电源附近的去耦电阻,放大器引脚沿线也安排了去耦电容,以减小两片放大器之间的相互影响。
此时,信号幅值已达到要求,可以直接送入单片机的P0.1脚。图4为单片机的电路结构框图。P0.6接LED(D1),指示采样状态,单片机工作在采样状态时D1亮;P0.7和复位脚则连接在JTAG口上,用于在线调试。复位电路接在F300的复位引脚,控制系统工作状态;另一支路连到JTAG,从而实现两接口的同时复位。
图4 电路结构框图
P0.4、P0.5负责数据的发送和接收,这部分电路是以3223EEY芯片为主体的。由于RS232规定高电平为3~15 V、低电平为-15~-3 V,DB9上最高可以承受±30 V的信号电平,所以RS232不能直接与TTL电平相连,使用时必须转换电平。3223EEY是继MAX232后一款优秀的电平转换芯片,具备一些显著优点:带有μp监控系统;可工作在低电源(3.3 V)状态以适应部分手提电脑;同时,为了在不传送时节约电源,它还含有自动关断功能(shutdown)。从功耗和便携使用角度看,该芯片非常适合本测距仪的指标要求。
2 界面实现
由于VB中带有专门用于通信的控件Mscomm,可以方便、快捷地实现通信,避免了复杂的API函数,所以在本系统的设计中VB成为程序语言的首选。
该界面设计的主要任务是实现通信和数据选取,利用Mscomm的Oncomm事件驱动方式,不必使用定时器就可以达到自动接收的目的。在众多Oncomm事件中,主要用到Case comEvReceive,当接收缓冲区的接收字节数达到RThreshold属性值的设置后,就会引发事件,开始接收程序,使用附加方式,不断地把字符叠加上去。如RThreshold=1,那么,一接收到字符就可以在text中实时显示字符内容。
为测试信道的通信状况,界面上安排了自检设置。当用户短接DB9的2、3脚时,发送和接收连在一起,用户向发送框中写入的字符可立即在接收框中重现;若未接收到字符,则显示“empty”,自检正确即证明信道状态正常。
通信正常后,上传数据有2个:温度T和阈值点数L。根据这2个值可以得到:
最终计算出测量距离。这些参量的选取都是由字符串函数left()、mid()实现的。随着采样点数的增多,若峰值迟迟不出现,测量字符的位数可能变多,即阈值点数变大,程序将无法执行非数字字符的数学运算,所以需要用InStr()函数设定一个参量i定位数字字符位置,再由mid()取出对应字符。
图5是一个测量距离为15 m时的主界面。字符的抽取采用了上面的方法,用变量i定位字符s的位置,再由(i+2)获取L的位置。
基于同样的考虑,测量距离不同时,L的位数变化,定位后mid函数的第3个参量也会有所变化;所以设置了“参数设置”子界面,用于不同环境下的参数调整,通过主界面的菜单选项调用。
图5 测量距离为15 m时的主界面
3 算法及内存安排
为避免噪声湮没回波,当进行远距离测量时,单片机要使用相关估计算法检测回波起点:将发射电路发送的超声信号作为参考,在每次发送超声的终止时刻,立即开始对接收器的输出采样,并计算采样值与参考信号的互相关。若相关值超过约定阈值,则说明采样值是换能器接收到的回波信号,相关峰值出现的时刻就是TOF。算法流程如图6所示。
图6 算法流程
预处理后的回波信号通过一个数字滤波器(LPF)输出:
可以有效防止相关时出现幅值抵消现象。s(n)再与发送信号的包络Tr(n)作互相关,互相关值为:
其中M是发送信号包络序列的长度[2]。由于内存有限,采样回来的数据不能实现一个接一个紧密连接相加、相关的运算,只能采一组加一组,再用这一组数据和发送信号包络作相关,随后采下一组重复以上过程。所以式(8)中m的取值为0~M,但这并不影响回波起点的判断。
设采样周期为Ts,互相关函数Cr峰值对应的序列位移为m=L,超声射程时间即为式(5)。
F300内部的集成模块多且实用,但受到体积限制,片内资源十分有限,仅为256字节。那么如何利用好有限的空间就成为程序编制的首要问题。
本系统采用先查询后中断,数组交替上传的方式解决这一问题。首先,F300内的多路开关被配置为单端方式,以片内温度传感器的输出作为输入,送入ADC0,完成第一次A/D转换,转换结果存储在变量中。随后改变多路开关配置,以外部回波作为输入,经简单的增益放大(PGA)开始第二次A/D转换。这次转换的结果以数组形式存储起来,数组满时送入处理器作算法处理,经过相加、相乘和比较运算后,最终的处理值保存在整型变量中,等待定时器的中断信号。
中断信号到来时,温度和处理值一起上传到通信界面上显示。若运算的数值一直没有超越门限,即回波未被检测出,第二次A/D转换就一直进行,数据丢弃,直到超越门限的值出现才结束采样,开始上传。
另外,P0.3脚被编程为输出0、1交替的单脉冲选通信号。这是因为发射电路中用于推挽变换的MOS管工作在高压状态,时间稍长容易烧坏,选通信号可以控制MOS管工作状态,起到保护作用。
图7为软件流程。
图7软件流程
4 结果及精度分析
图8是选通信号频率为5 Hz,占空比为1∶10,方波高电平为4.3 V时,单片机F300对回波的采样和处理信号波形。由于经A/D转换后,单片机采集的数据以数字计,所以坐标都是数字;同时,采取的选通信号是周期性的,故回波也呈现周期性,如图8(a)所示。经叠加,波形得到了改善,见图8(b)。由于内存受限,图8(c)中相关是一组一组完成的,应观察其包络。当一个较大的相关值出现时,该点就被认为是回波起点。
测量精度受温度的影响比较大。式(4)中T直接由F300测得,准确性取决于A/D采集温度值后的温度标定公式和温度传感器的自热效应是否准确。标定公式通常由公司根据经验提供,F300因其体积小、主频高,自热值也很高,上电温度即达到56.8℃。即使时钟频率设为3 MHz,片内温度也能达到47.11℃,与环境温度差距很大。一般情况下,可使用封闭房间温度作参照系确定自热值。本系统测距5 m以内时,由温度带来的误差达到0.15%,30 m时误差为 0.4%。
在目前可测得的距离范围内,该精度能够满足系统的精度要求。对于要求更高的场合,可采用单独的高精度测温传感器。如美国国家半导体公司的LM92,分辨率可以达到0.062 5℃ [3]。
结语
该超声测距仪因其主控制器F300主频高、配置灵活、集成度高等特点,有效提高了测距精度。加之体积小、价格低,为仪器的便携式提供了有利条件,是超声测距技术进一步发展的理想控制器。
图8 单片机的采样和处理信号波形
该装置用于大量程测距效果良好,有望在车辆导航定位技术中得到进一步的应用;实现由静态测量到动态测量的过渡,进而拓宽超声测距的使用范围。