超声波测距模块总结报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
超声波测距模块总结报告
董升亮
Senscomp公司的超声波测距系统包括两个部分,分别是测距模块(6500)和静电换能器(600)。前者驱动后者,后者负责发送和接收超声波,之后用户便可根据超声波发收这一时间间隔计算出与目标物之间的距离。经过多次户外实验与优化,目前可实现一片单片机对4个超声波测距模块的控制,并且每个的探测距离都可达到10米左右。
一、超声波测距原理
超声波是指频率高于20khz的机械波。为了以超声波作为检测手段,必须产生超声波和接收超声波。完成这种功能的装置就是超声波换能器或超声波探头。超声波换能器有发送器和接收器,600系列换能器同时具有发送和接收声波的作用。超声波换能器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距原理也很简单,就是测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就可以得到二倍的声源与障碍物之间的距离。
即:D=C*T/2。其中,D为600换能器到障碍物之间的距离;C为超声波此时在空气中的传播速度;T为超声波的发收时间。在空气中,声波的传播速度一般受温湿度的影响,在没有温湿度传感器或对测量精度要求不高的情况下,一般取340m/s。在以上几次实验中,程序中采用C=340m/s。
二、6500驱动模块
我们所采用的这款6500驱动模块,手册上说可以实现6英寸-35英尺(0.152m-10.668m)的准确测距,但由于所采用的600模块是自发自收的,在发送过程中从障碍物返回的信号就无法捕获。另外,超声波换能器有一定的惯性,发送结束后还留有一定的余振,这种余振经换能器同样产生电压信号,扰乱了系统捕捉返回信号的工作。因此,在余振未消失以前,还不能启动系统进行回波接收(要等待2.38ms),以上两个原因造成了超声传感器具有测量一定的测量范围。模块最近可以到测量37cm。当然实际实验过程中会在这些标准上稍有浮动。该模块操作简单,但要特别注意的是它的噪声干扰问题。该模块共有九个引脚如图1。
图1
1引脚:接地
2引脚:BLNK,多返回模式时,用于控制(拉低)ECHO信号
3引脚:不用
4引脚:INIT,拉高启动模块发射超声波。拉低时,ECHO也同时拉低
5引脚:不用
6引脚:OSC,6500模块内部时钟,一般用不到
7引脚:ECHO,当超声波遇到障碍物返回至换能器时,该引脚拉高。该引脚需要一个470KΩ的电阻上拉至Vcc
8引脚:BINH,可使能探测37cm以内的障碍物
9引脚:Vcc,4.5V-6.8V供电,我们采用5V供电
说明:在这9个引脚当中,我们只用到其中的4个(Vcc,GND,INIT,ECHO)。另外一点值得强调的是,由于BLNK和BINH受内部噪声影响比较大,因此这两个引脚直接连接到GND。并且6500模块与单片机控制板之间的连接排线长度尽量要短。
6500驱动模块具有两种工作方式。第一种工作方式测量的是换能器到其前方第一个障碍物之间的距离。第二种工作方式可探测多个障碍物的回波,其区分能力为间隔3英寸以上的障碍物。
图2 单返回模式,控制时序实例
三、600系列换能器
此超声波换能器是集发送与接收一体的一种换能器。传感器里面有一个圆形的薄片,薄片的材料是塑料,在其正面涂了一层金属薄膜,在其背面有一个铝制的后板。薄片和后板构成了一个电容器,当给薄片加上频率为49.4khz、电压为300vacpk-pk左右的方波电压时,薄片以同样的频率震动,从而产生频率为49.4khz 的超声波。当接收回波时,6500内有一个调谐电路,使得只有频率接近49.4khz的信号才能被接收,而其它频率的信号则被过滤。
换能器在将电信号转化成声波的过程中,所产生的声波并不是理想中的矩形,而是一个类似花瓣一样形状,发送超声波的波束角大约为30度,见图3。在实际应用中,该波束应为一个立体的圆锥形,这也导致两个问题:
1)随着探测距离的延长,探测障碍物方位的准确性下降。即无法对障碍物进行准确定位。
2)探测距离越远,能量扩散越严重,在障碍物不理想的情况下,返回信号减弱,以至于在标准探测范围内,返回脉冲也达不到600换能器的判断
阈值。
图3
四、单片机控制模块
系统采用PIC30F4011控制芯片,同时集成串口和CAN总线两种数据传输方式。该电路共配置了8个6500模块接口,目前已经用到了其中的4个。为了减小相互之间的干扰,每个模块之间都采用了LC滤波电路。同时在每个模块的电源到地之间增加了一个1uF的旁路电容和一个470uF的铝电解电容,前者用来消除内部干扰对BINH引脚的影响,后者起储能作用,这两者视情况可选择使用。其电路连接如图4,PCB布线如图5。两者中的电感用相近引脚间距的电容做了代替。
图4
图5
五、程序控制模块
由于该单片机控制多个超声波测距模块,因此在编程过程中要首先考虑到各个模块之间的相互影响,最基本的要求是某一个模块突然的硬件错误不会对其他模块的正常运行造成影响。最初考虑到在uCOS-II上进行编程,但实施过程中发现要借用互斥信号量与多个邮箱,任务多且复杂,既费时又费力,并且会对超声波往返时间的计时产生影响,同时也使对程序的阅读更加困难。最终放弃了这个方案。
新方案采用多重循环来进行模块控制调度,为避免陷入死循环,程序中采用了goto语句。在此程序中,我们定义了一个整型变量Con6500,让他分别等于1、2、3、4来分别控制这四个模块,同时还用到了3个定时器:
Timer1:用于设置6500模块探测周期。
Timer2:用于记录各个模块超声波往返时间。
Timer3:用于防止某一模块超时。
程序中对各个模块的返回引脚均采用查询的方式,整个程序的关键代码如下:int main(void)
{
//CAN、UART、Timer、IO初始化
Con6500=1;//从第一个模块开始探测
//……
while(1)
{
StartChk:while(Timer1Lock==1)//有一个6500模块开启
{
while(Con6500==1)//开启的是第一个模块(6500-1)
{
TMR3=0;//为第一个模块计时,以避免其超时
while(1)//查询6500-1返回引脚
{