您现在的位置是:首页 > 单片机

基于单片机的超声波测距系统的研究与设计

2020-05-28 05:02:40

基于单片机的超声波测距系统的研究与设计

电子科技 南京工程学院通信工程学院 沙爱军

>

  在日常生产生活中,很多场合如汽车倒车、机器人避障、工业测井、水库液位测量等需要自动进行非接触测距。超声波是指频率大于20 kHz的在弹性介质中产生的机械震荡波,其具有指向性强、能量消耗缓慢、传播距离相对较远等特点,因此常被用于非接触测距。由于超声波对光线、色彩和电磁场不敏感,因此超声波测距对环境有较好的适应能力,此外超声波测量在实时、精度、价格也能得到很好的折衷。

  为此,文中尝试以单片机AT89S52为核心,利用一对40 kHz压电超声传感器设计一款体积较小、价格低廉、精度较高、具有温度补偿、实时LCD显示和报警的超声波测距仪。

  1 超声波测距原理

  超声波传感器分机械方式和电气方式两类,它实际上是一种换能器,在发射端它把电能或机械能转换成声能,接收端则反之。本次设计超声波传感器采用电气方式中的压电式超声波换能器,它是利用压电晶体的谐振来工作的。它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。在超声波电路中,发射端输出一系列脉冲方波,脉冲宽度越大,输出的个数越多,能量越大,所能测的距离也越远。超声波发射换能器与接收换能器其结构上稍有不同,使用时应分清器件上的标志。

  超声波测距的方法有多种:如往返时间检测法、相位检测法、声波幅值检测法。本设计采用往返时间检测法测距。其原理是超声波传感器发射一定频率的超声波,借助空气媒质传播,到达测量目标或障碍物后反射回来,经反射后由超声波接收器接收脉冲,其所经历的时间即往返时间,往返时间与超声波传播的路程的远近有关。测试传输时间可以得出距离。

  假定s为被测物体到测距仪之间的距离,测得的时间为t/s,超声波传播速度为v/m·s-1表示,则有关系式(1)

s=vt/2 (1)

  在精度要求较高的情况下,需要考虑温度对超声波传播速度的影响,按式(2)对超声波传播速度加以修正,以减小误差。

v=331.4+0.607T (2)

  式中,T为实际温度单位为℃,v为超声波在介质中的传播速度单位为m/s。

一些温度下的声速

  2 系统总体设计方案

  本系统由超声波发射、回波信号接收、温度测量、显示和报警、电源等硬件电路部分以及相应的软件部分构成。系统原理框图,如图1所示。

系统原理框图

  整个系统由单片机AT89S52控制,超声波传感器采用收发分体式,分别是一支超声波发射换能器TCT40-16T和一支超声波接收换能器TCT40-16R。超声波信号通过超声波发射换能器发射至空气中,遇被测物反射后回波被超声波接收换能器接收。进行相关处理后,输入单片机的INT0脚产生中断,计算中间经历的时间,同时再根据具体的温度计算相应的声速,根据式(2)就可得出相应的距离用来显示,当然在一些场合也可根据需要,设置距离报警值。

  3 硬件设计

  3.1 超声波发射部分

  超声波发射部分是为了让超声波发射换能器TCT40-16T能向外界发出40 kHz左右的方波脉冲信号。40 kHz左右的方波脉冲信号的产生通常有两种方法:采用硬件如由555振荡产生或软件如单片机软件编程输出,本系统采用后者。编程由单片机P1.0端口输出40 kHz左右的方波脉冲信号,由于单片机端口输出功率不够,40 kHz方波脉冲信号分成两路,送给一个由74HC04组成的推挽式电路进行功率放大以便使发射距离足够远,满足测量距离要求,最后送给超声波发射换能器TCT40-16T以声波形式发射到空气中。发射部分的电路,如图2所示。图中输出端上拉电阻R31,R32,一方面可以提高反向器74HC04输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。

发射部分的电路

  3.2 超声波接收部分

  上述TCT40-16T发射的在空气中传播,遇到障碍物就会返回,超声波接收部分是为了将反射波(回波)顺利接收到超声波接收换能器TCT40-16R进行转换变成电信号,并对此电信号进行放大、滤波、整形等处理后,这里用索尼公司生产的集成芯片CX20106,得到一个负脉冲送给单片机的P3.2(INT0)引脚,以产生一个中断。接收部分的电路,如图3所示。

超声波接收部分

  可以看到,集成芯片CX20106在接收部分电路中起了很大的作用。CX20106是一款应用广泛的红外线检波接收的专用芯片,其具有功能强、性能优越、外围接口简单、成本低等优点,由于红外遥控常用的载波频率38 kHz与测距的超声波频率40 kHz比较接近,而且CX20106内部设置的滤波器中心频率f0五可由其5脚外接电阻调节,阻值越大中心频率越低,范围为30~60 kHz。故本次设计用它来做接收电路。CX20106内部由前置放大器、限幅放大器、带通滤波器、检波器、积分器及整形电路构成。工作过程如下:接收的回波信号先经过前置放大器和限幅放大器,将信号调整到合适幅值的矩形脉冲,由滤波器进行频率选择,滤除干扰信号,再经整形,送给输出端7脚。当接收到与CX20106滤波器中心频率相符的回波信号时,其输出端7脚就输出低电平,而输出端7脚直接接到.AT89S52的INT0引脚上,以触发中断。若频率有一些误差,可调节芯片引脚5的外接电阻R42,将滤波器的中心频率设置在40 kHz,就可达到理想的效果。

 3.3 其他主要电路

  (1)温度测量部分。

  由于声音的速度在不同的温度下有所不同,为提高系统的精度,采用了温度补偿功能。这里采用的主要元器件是是美国Dallas半导体公司生产的单总线数字温度传感器DS18B20,其具有精度高、智能化、体积小、线路简单等特点。将DS18B20数据线与单片机的P1.1口相连,就可以实现温度测量,如图4所示。

温度测量部分

  (2)LCD显示部分。

  本设计显示部分采用字符型TC1602液晶显示所测距离值。TC1602显示的容量为2行16个字。液晶显示屏有微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,与数码管相比,显得更专业、美观。使用时,可将P0与LCD的数据线相连,P2口与LCD的控制线相连,如图5所示。

LCD显示部分

  其中,TC1602第4脚RS为寄存器选择,第5脚RW为读写信号线,第6脚E为使能端。第7~14脚:D0~D7为8位双向数据线。这里要注意的是,为了布线方便,单片机端的D0~D7是接到LCD/602的D1~D0,正好相反,因此在编写软件时需要做处理,使读取正确。

  (3)报警部分。

  采用一个蜂鸣器,由P1.2输出一定频率的信号,在连接到蜂鸣器之前,经过一个三极管9 012的放大。报警部分的连线,如图6所示。

报警部分

  (4)电源电路:220 V经9 V变压器降压后,再经D1~D4桥式整流和7 805稳压后给电路各部分供电。

  (5)晶振电路:采用12 MHz的晶振。

  4 软件

  系统软件设计采用模块化设计,主要包括主程序设计、T1中断服务子程序、INT0外部中断服务子程序、测温子程序、距离计算子程序、显示子程序、延时子程序和报警子程序设计等。

  系统软件编制时应考虑相关硬件的连线,同时还要进行存储空间、寄存器以及定时器和外部中断引脚的分配和使用。本设计中P1.0引脚连接到7 HC04推挽放大电路再连接到超声波发射传感器,P1.0引脚输出的将是软件方式产生的40 kHz方波,而P3.2(INT0)则被用来接收回波。定时器T1,T0均工作在工作方式1,为16位计数,T1定时器被用来开启一次测距过程以它的溢出为标志开始一个发射测量循环,T0定时器是用来计算脉冲往返时间,它们的初值均设为0。

  系统初始化后就启动定时器T1从0开始计数,此时主程序进入等待,当到达65 ms时T1溢出进入T1中断服务子程序;在T1中断服务子程序中将启动一次新的超声波发射,此时将在P1.0引脚上开始产生40 kHz的方波,同时开启定时器T0计时,为了避免直射波的绕射,需要延迟1 ms后再开INT0中断允许;INT0中断允许打开后,若此时P3.2(INT0)引脚出现低电平则代表收到回波信号,将提出中断请求进入INT0中断服务子程序,在INT0中断服务子程序中将停止定时器T0计时,读取定时器T0时间值到相应的存储区,同时设置接收成功标志;主程序一旦检测到接收成功标志,将调用测温子程序,采集超声波测距时的环境温度,并换算出准确的声速,存储到RAM存储单元中;单片机再调用距离计算子程序进行计算,计算出传感器到目标物体之间的距离;此后主程序调用显示子程序进行显示;若超过设定的最小报警距离还将启动扬声器报警;当一次发射、接收、显示的过程完成后,系统将延迟100 ms重新让T1置初值,再次启动T1以溢出,进入下一次测距。如果由于障碍物过远,超出量程,以致在T0溢出时尚未接收到回波,则显示“ERROR”重新回到主流程进入新一轮测试。主程序和定时器T1、外部中断INT0中断服务子程序的框图分别,如图7~图9所示。

子程序的框图

子程序的框图

  此外,还有几点需要说明的是:

  (1)定时器T1之所以是65 ms溢出是因为它是16位定时/计数器(65 535)。在使用12MHz的晶振时,由于周期T=1/f=1/[(12×106)/12]=1μs,则一个机器周期是1μs,计数器每65 ms计数器溢出。

  (2)本设计中40 kHz方波的产生采用软件方式实现:控制P1.0口输出12μs的高电平,再输出13μs的低电平,这样得到一个周期的40 kHz的脉冲,再循环发送8次。

  (3)在CPU停止发送脉冲群后,由于电阻尼,换能器不能立即停止发送超声波,在一段时间内仍然会发送,故这段时间内不可立即开启INT0接收回波,要等待一段后以避免发送端的部分直射波未经被测物就直接绕射到接收端,这段被称为“虚假反射波”。从发射开始一直到“虚假反射波”结束这段时间,不开放INT0中断申请,可有效躲避干扰,但也会造成测试的“盲区”。本次设为1 ms,假定温度为20℃,则测量盲区为s=1×10-3×344/2≈17.2 cm。

  (4)最大测试距离将取决于:两次脉冲群发送之间的最小时间间隔和脉冲的能量。一般来说,发射端脉冲个数越多,能量越大,所能测的距离也越远。但也不是无限制的,本次读取定时器T0的计数值,最大能测试的距离是T0尚没溢出,故在温度20℃下,最大测试距离为s=vt/2=65 535×344/(2×106)=11.272 m。在一些周期性发射超声波设备中,如果要测试的最大距离是10 m,则两次脉冲群之间的最小时间为t=2×s/v=2×10/344≈60:ms 。

  5 结束语

  为了验证系统的测量精度,在实验室进行了实地测量。利用本系统对20~1 000 cm范围进行了多次测试,经补偿后最大误差达2 cm,线性度、稳定性和重复性都比较好。系统具有结构简单、体积小、实时LCD显示和报警、带温度补偿、抗干扰性能好等优点。系统的误差主要来自于发射探头发出的超声波是呈喇叭状扩散传播、被测物的表面不光滑且不一定垂直于两探头的轴线而导致所反射回来的波也许是从不同点获得,此外电子元器件自身的时延、干扰等也造成一定影响。可以根据具体场合,选择合适功率的探头,以及调整程序中脉冲的频率、宽度和个数等提高精度或测量距离,扩大系统的应用范围。