超声波汽车倒泊防撞报警器是超声波测距的一个重要应用。在汽车倒泊时,利用超声波的反射可以探测汽车尾部与障碍物之间的距离,提供多级声光报警。本文介绍一种以MC68HC705J1A单片机为核心的低成本超声波汽车倒泊防撞报警器的设计方法,该报警器的感应时间小于0.5s,测距精度可达0.1m。
1 超声波测距原理
超声波测距原理是根据超声波遇到障碍物后可反射回来的特性,记录发射信号到收到个反射信号的时间t,利用公式s=c·t/2,计算出距离s。其中c是声速,标准状态下声速c=331.4m/s。超声波测距原理如图1所示。
2 超声波汽车倒泊防撞报警器的组成
超声波汽车倒泊防撞报警器的组成如图2所示。
报警器只在汽车倒泊时才使用,采用倒车灯的电源+12V供电。倒车时障碍物可能在车的后面,也可能在车的侧面。为了保证各种情况下探测障碍物的准确性,采用双路探测结构,取两路中距离较短的一路作为有效探测距离。超声波探测头具有电声转换和声电转换两种功能,分时用于发送信号和接收信号。声光报警电路由单片机直接控制,利用不同的蜂鸣器鸣叫声音和不同颜色的LED闪动实现多段报警。
3 超声波汽车倒泊防撞报警器的硬件电路设计
超声波汽车倒泊防撞报警器的硬件电路原理如图3所示(图中只给出了一路检测电路,另一路与此相同)。
MC68HC705J1A单片机是Motorola公司J系列单片机中性能价格比的单片机之一,广泛应用于各种中小型检测控制系统中。MC68HC705J1A是一个具有1240字节EPROM/OTPROM的8位微控制器,主要硬件资源有:1240字节EPROM、64字节RAM、14个双向输入/输出端口、多功能计数器、外部中断等,同时具有看门狗和非法地址检测、无小时钟频率选择等特点。在超声波汽车倒泊防撞报警器中,充分利用其双向并行口的输入和输出功能,进行信号的发送、接收及声光报警等控制。
超声波探测头选频频率为40kHz方波,由软件在单片机的发送管脚PA6和PA7上直接产生20个方波脉冲,再通过变压器升压变换,经超声波探测头发射出去。由于传感器本身的恢复过程,发射结束后仍有不大于500μs的阻尼震荡。发射信号同时回送到接收电路。
发射信号遇到障碍物后反射回来,由同一超声波探测头接收并送到接收电路。接收电路对反射信号进行多级放大和检波,后通过开关电路到达单片机的接收管脚PA0或PA1。当接收电路有信号时,开关三极管Q1导通,PA0或PA1为低电平;否则,三极管截止,PA0或PA1为高电平。检测PA0或PA1的管脚状态,就可以得到超声波探测头接收到个反射信号的时刻,从而计算出从发送信号到接收到个反射信号的时间,再进一步计算出障碍物与汽车的距离。发射信号波形、接收电路信号波形和单片机接收管脚信号波形如图4所示。
4 超声波汽车倒泊防撞报警器的软件设计
超声波汽车倒泊防撞报警器的软件采用汇编语言。程序流程如图5所示。
系统联调时发现,当检测环境比较复杂时,检测值会出现常数0或随机数的现象,因此,实际检测并不是以一次检测值进行计算的,而是将本次检测值与之前连续9次的检测值(共10次)进行比较(取平均值),从而得出一个终检测结果,再计算出距离,根据距离所属的范围报警。检测一次所需时间为50ms。
一般报警程序中所需的时间参数都是由定时器通过硬件计数进行中断控制,但是超声波检测中,在发射信号期间不允许中断,否则导致发射信号频率不精确;同时在检测过程中如果产生定时器中断,也会给计数带来误差。因此,报警程序不采用中断方式,而是将检测报警所需的时间参数与单次检测时间(50ms)结合起来,将蜂鸣器的鸣响频率和LED的闪动频率规定为500ms,即检测10次的时间。报警时间参数与检测次数之间的关系如表1所示。
检测主程序如下:
org 0300h
lda #00
sta counta ;报警计数器清0
lda #$fd
sta portad ;设置A口输入/输出方向
lda #$ff
sta portbd ;设置B口输入/输出方向
ldx buffer ;缓冲区首地址 → x
transmit: jsr transp ;调用发射20个脉宽为250μs方波子程序
jsr del450μs ;延时450μs
lda #00
sta ,x ;用于计时的缓冲单元清0
next: lda porta ;检测处理器接收管脚是否为低电平
and #$03
cmp #$02
bne check ;检测到低电平,退出计时
cmp #$01
bne check ;检测到低电平,退出计时
cmp #$03
bne check ;检测到低电平,退出计时
jsr del20μs
inc ,x ;计时缓冲单元内容加1
lda #$max
cmp ,x ;判断计时值是否超过限定值max
beq check ;若超过,退出计时
jmp next ;否则,继续检测计时
check: incx ;缓冲区地址加1
jsr distance ;调用计算距离子程序
jsr aver ;调用求平均值子程序,同时设置距离标志flag和报警参数
jsr alarm ;调用报警子程序,根据报警参数报警
jsr del30ms ;延时30ms
jmp transmit ;继续下一次检测
end
实际使用证明,该报警器性能比较稳定,已达到实用要求。硬件设计中充分考虑了反射信号的复杂性和不稳定性,对反射信号进行了一系列的滤波、放大与检波处理。软件设计采用结构化程序设计思想,结构简洁,尤其是独特的报警算法,避免了定时器中断对检测精度的影响。
分析可知,该报警器在性能上还可以做如下改进:
(1)采集数据的处理算法问题。该报警器采用的是连续10次采集数据求平均值的处理算法。当环境比较复杂时,采集数据会出现0或随机数情况,对平均值算法的结果有很大影响,不利于测距精度的提高,所以选择优化算法是软件设计仍需改进的难点之一。
(2)改进采样方式。该报警器采用查询方式采样数据,查询一次的步长是50ms,因此每次采样的误差是50ms。如果采用其它方式检测,例如中断方式,还可以将采样误差控制到小。
(3)温度对声速的影响。如果考虑环境温度变化对声速的影响,硬件设计中必须进行温度检测,在软件中进行温度补偿计算,进一步减小测距误差,使性能更加稳