传感器系列之4.4超声测距传感器

4.4 超声测距实验

一、实验目的

  1. 了解超声波传感器的原理与应用
  2. 掌握超声波传感器的编程与操作方法
  3. 理解微处理器与超声波传感器之间的通讯

二、实验材料

  1. 具有USB 串口通讯的PC 机1 台
  2. ADS1.2 集成开发软件1 套
  3. J-Link-ARM 仿真器及软件1 套
  4. NXP LPC2378 实验节点板1 个
  5. LCD 显示实验板1 个
  6. 超声测距传感器模块1个

三、实验原理

  超声测距传感器实验环境由PC机(安装有Windows XP操作系统、ADS1.2集成开发环境和J-Link-ARM-V410i仿真器)、J-Link-ARM仿真器、NXP LPC2378实验节点板、超声测距传感器、实验模块和LCD显示实验模块组成,如图4.4.1所示。

  这里写图片描述
  图4.4.1 传感器实验环境

1.超声波

  如图4.4.1所示,人们可以听到的声音的频率为20Hz~2KHz,也就是可听声波,超出此频率范围的声音,20Hz以下的声音称为低频声波,20KHz以上的声音称为超声波(Ultrasound),一般说话的频率范围是10Hz-8KHz。超声波方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,超声波因其频率下限大约等于人的听觉上限而得名。

这里写图片描述
图4.4.2 声波频率分布

  超声波可以在气体、液体及固体中传播,其传播速度不同。超声波在介质中传播的波形取决于介质可以承受何种作用力以及如何对介质激发超声波。通常有如下三种:
(1)纵波波型
  当介质中质点振动方向与超声波的传播方向一致时,此超声波为纵波波型。任何固体介质当其体积发生交替变化时均能产生纵波。在工业中应用主要采用纵向振荡。
(2)横波波型
  当介质中质点的振动方向与超声波的传播方向相垂直时,此种超声波为横波波型。由于固体介质除了能承受体积变形外,还能承受切变变形,因此,当其有剪切力交替作用于固体介质时均能产生横波。横波只能在固体介质中传播。
(3)表面波波型
  是沿着固体表面传播的具有纵波和横波的双重性质的波。表面波可以看成是由平行于表面的纵波和垂直于表面的横波合成, 振动质点的轨迹为一椭圆,在距表面1/4波长深处振幅最强,随着深度的增加很快衰减,实际上离表面一个波长以上的地方,质点振动的振幅已经很微弱了。
  另外,超声波也有折射和反射现象,并且在传播过程中有衰减。在空气中传播超声波,其频率较低,,一般为几十KHz,而在固体、液体中则频率可用得较高。在空气中衰减较快,而在液体及固体中传播,衰减较小,传播较远。
  利用超声波的特性,可做成各种超声传感器,配上不同的电路,制成各种超声测量仪器及装置,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等,并在通讯、医疗、家电、军事、工业、农业等各方面得到广泛应用。
  能够产生超声波的方法很多,常用的有压电效应方法、磁致伸缩效应方法、静电效应方法和电磁效应方法等。当给压电晶片两极施加一个电压短脉冲时, 由于逆压电效应,晶片将发生弹性形变而产生弹性振荡。振荡频率与晶片的厚度和声速有关, 适当选择晶片的厚度可以得到超声频率范围的弹性波, 即超声波。此种方式发射出的是一个超声波波包,通常称为脉冲波。

2.超声波测距

  超声波测距系统主要应用于汽车的倒车雷达、及机器人自动避障行走、建筑施工工地以及一些工业现场例如:液位、井深、管道长度等场合。
  目前有两种常用的超声波测距方案。一种是基于单片机或者嵌入式设备的超声波测距系统,一种是基于CPLD(Complex Programmable Logic Device)的超声波测距系统。
  如图4.4.3所示,实验采用第一种方案,利用嵌入式设备编程产生频率为40KHz的方波,经过发射驱动电路放大,使超声波传感器发射端震荡,发射超声波。超声波经发射物反射回来,由传感器接收端接收,再经过接收电路放大、整形。以嵌入式微核心的超声波测距系统通过嵌入式设备记录超声波发射的时间和反射波的时间。当收到超声波的反射波时,接收电路输出端产生一个跳变。通过定时器计数,计算时间差,就可以计算出相应的距离。

这里写图片描述
图4.4.3 超声波测距原理

  超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。首先,超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为C=340m/s,根据计时器记录的时间T秒,就可以计算出发射点距障碍物的距离L,即:L= C×T /2 。这就是所谓的时间差测距法。
  由于超声波也是一种声波,其声速 C 与温度有关,表4.4.1列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。
表4.4.1 超声波波速与温度的关系

温度℃ -30 -20 -10 0 10 20 30 100
声速m/s 313 319 325 323 338 344 349 386

  由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为倒车距离测量的理想选择。

3.超声波传感器

  超声波为直线传播,频率越高,绕射能力越弱,但反射能力越强,为此,利用超声波的这种性质就可以制成超声波传感器。另外,超声波在空气中的传播速度较慢,这就使得超声波传感器的使用变得简单。
  超声波传感器是利用超声波的特性研制而成的传感器。超声波是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生振动产生的,它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,它可穿透几十米的深度。超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。因此超声波检测广泛应用在工业、国防、生物医学等方面以超声波作为检测手段,必须产生超声波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。
  超声波传感器主要由双压电晶片振子、圆锥共振板和电极等部分构成。两电极间加上一定的电压时压电晶片就会被压缩产生机械形变,撤去电压后压电晶片恢复原状。若在两极间按照一定的频率加上电压,则压电晶片也会保持一定的频率振动。经试验测得此型号压电晶片的固有频率为38.4 KHz,则在两极外加频率为40 KHz的方波脉冲信号,此时压电晶片产生共振,向外发射出超声波。同理,没有外加脉冲信号的超声波传感器在共振板接收到超声波时也会产生共振,在两极间产生电信号。
  超声波探头主要由压电晶片组成,既可以发射超声波,也可以接收超声波。小功率超声探头多作探测作用。它有许多不同的结构,可分直探头(纵波)、斜探头(横波)、表面波探头(表面波)、兰姆波探头(兰姆波)、双探头(一个探头反射、一个探头接收)等。
  超声探头的核心是其塑料外套或者金属外套中的一块压电晶片。构成晶片的材料可以有许多种。晶片的大小,如直径和厚度也各不相同,因此每个探头的性能是不同的,我们使用前必须预先了解它的性能。超声波传感器的主要性能指标,包括:
(1) 工作频率。工作频率就是压电晶片的共振频率。当加到它两端的交流电压的频率和晶片的共振频率相等时,输出的能量最大,灵敏度也最高。
(2) 工作温度。由于压电材料的居里点一般比较高,特别时诊断用超声波探头使用功率较小,所以工作温度比较低,可以长时间地工作而不产生失效。医疗用的超声探头的温度比较高,需要单独的制冷设备。
(3) 灵敏度。主要取决于制造晶片本身。机电耦合系数大,灵敏度高;反之,灵敏度低。

4.超声波测距一体模块HC-SR04

(1)模块性能
  如图4.4.4所示,HC-SR04模块性能稳定,测度距离精确,能和国外的SRF05、SRF02等超声波测距模块相媲美。模块高精度,盲区(2cm)超近,最大识别距离为300cm。

这里写图片描述
图4.4.4 HC-SR04模块实物图

  如图4.4.5所示,系统的工作是由软件和硬件的配合过程。先由嵌入式微处理器使555使能端置1,继而555送出40KHz频率的方波信号,经过压电换能器(超声波发射头)将信号发射出去,即发射超声波,同时该时刻启动定时器开时计时。该信号遇到障碍物反射回来在此称为回波。同时,压电换能器(超声波接收头)将接收的回波及接收超声波,通过信号处理的检波放大,通过三级放大后再送到比较器进行比较,输出比较电压,输出电压经过三极管以后,使之电压与嵌入式微处理器的I/O口相匹配最后送至处理器处理。
这里写图片描述
图4.4.5 超声波测距原理框图

(2)产品应用领域
机器人避障、物体测距、液位检测、公共安防、停车场检测。
(3)主要技术参数

主要技术参数
使用电压:DC5V
静态电流:小于2mA
电平输出:高5V
电平输出:底0V
感应角度:不大于15度
探测距离:2cm-450cm
高精度可达0.2cm

(4)接线方式及工作原理

接线方式:VCC、trig(控制端)、 echo(接收端)、 GND。
如图4.4.6所示,超声波传感器基本工作原理如下:
采用IO口TRIG触发测距,给大于10us的高电平信号;
模块自动发送8个40KHz的方波,自动检测是否有信号返回;
有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340m/s))/2。

这里写图片描述
4.4.6传感器的方向图

(5)控制方式
  本模块使用方法简单,通过嵌入式微处理器控制口发一个10us以上的高电平,启动超声波传感器模块发出8个40KHz的周期电平。然后开启定时器,再延时100us左右以避免发射探头的余振的干扰。接着通过在while循环中查询外部中断是不是已经捕获到回波信号,一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到接收到的回响信号的时间间隔就可以计算得到距离。
  
  如图4.4.7所示为超声测距模块的时序图,根据时序图,可以知道,回响信号的高电平就是我们用来测量距离的重要指标,通过距离与速度和时间的关系,从而求得相应的距离。
这里写图片描述
图4.4.7超声测距时序图

  一个 10us 以上脉冲触发信号,该模块内部将发出 8次40KHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号,回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号的时间间隔可以计算得到距离。建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。
图4.4.8给出了超声测距模块的发射端电路。
这里写图片描述
图4.4.8超声测距发射端电路图

  压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
图4.4.9给出了超声测距模块的接收端电路。

  集成电路CX20106是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38KHz与测距的超声波频率40KHz较为接近,可以利用它制作超声波检测接收电路。实验证明用CX20106接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。

这里写图片描述
图4.4.9 超声波接收电路

图4.4.10给出了超声测距模块的电路。

这里写图片描述
图4.4.10 超声波收发电路

5.超声波测距模块的影响因素

  超声波传感器应用起来原理简单,也很方便,成本也很低。但是目前的超声波传感器都有一些缺点,比如,反射问题,噪音,交叉问题。
1. 反射问题
  如果被探测物体始终在合适的角度,那超声波传感器将会获得正确的角度。但是不幸的是,在实际使用中,很少被探测物体是能被正确的检测的。 其中可能会出现几种误差:
1)三角误差
  当被测物体与传感器成一定角度的时候,所探测的距离和实际距离有个三角误差。

2)镜面反射
  这个问题和高中物理中所学的光的反射是一样的。在特定的角度下,发出的声波被光滑的物体镜面反射出去,因此无法产生回波,也就无法产生距离读数。这时超声波传感器会忽视这个物体的存在。

3)多次反射
  这种现象在探测墙角或者类似结构的物体时比较常见。声波经过多次反弹才被传感器接收到,因此实际的探测值并不是真实的距离值。
这些问题可以通过使用多个按照一定角度排列的超声波圈来解决。通过探测多个超声波的返回值,用来筛选出正确的读数。

(2) 噪音
  虽然多数超声波传感器的工作频率为40-45KHz,远远高于人类能够听到的频率。但是周围环境也会产生类似频率的噪音。比如,电机在转动过程会产生一定的高频,轮子在比较硬的地面上的摩擦所产生的高频噪音,机器人本身的抖动,甚至当有多个机器人的时候,其它机器人超声波传感器发出的声波,这些都会引起传感器接收到错误的信号。
这个问题可以通过对发射的超声波进行编码来解决,比如发射一组长短不同的音波,只有当探测头检测到相同组合的音波的时候,才进行距离计算。这样可以有效的避免由于环境噪音所引起的误读。

(3)交叉问题
  交叉问题是当多个超声波传感器按照一定角度被安装在机器人上的时候所引起的。超声波X发出的声波,经过镜面反射,被传感器Z和Y获得,这时Z和Y会根据这个信号来计算距离值,从而无法获得正确的测量。
  解决的方法可以通过对每个传感器发出的信号进行编码。让每个超声波传感器只听自己的声音。

四、实验内容

1.实验器材连线

  本实验所使用实物规格图如图4.4.10所示,实物图如图4.4.11所示。

这里写图片描述
图4.4.10 超声测距模块实物规格图

这里写图片描述
图4.4.11 超声波传感器模块

  将超声波传感模块安装到开发板上,然后用JLINK仿真器的一端用USB接口与电脑相连,一端的20Pin的JTAG引脚与NXP LPC2378节点板的J2相连,并给NXP LPC2378节点板上电,如图4.4.12所示。
这里写图片描述
图4.4.12 超声测距开发板连接图

2.距离测量

  本实验,通过测距程序完成超声波发射的控制、超声波回波信号的检测和距离的计算、左右距离的比较,并显示。
  首先由发射程序发射10us的高电平触发信号,控制超声波发射器发射8个40KHz的方波。发射器发射完信号,接收器回波电平将拉高。然后开启定时器,例如在定时器输入频率为f=12MHz,进行N=8分频后每个计数周期为 。再延时100us左右以避免发射探头的余振的干扰,然后通过在while循环中查询外部中断是不是已经捕获到回波信号,然后获得计时器计数值count,计算距离值。去掉多余的计数误差后 。
打开工程Distance,修改Main.c中的内容如下。

/*********************头文件及定义*************************/
#include "LPC23xx.h"
#include "Lcd.h"
#include "config.h"

void  delay(uint32  dly)
{  
    uint32  i;
    for(; dly>0; dly--)
        for(i=0; i<1000; i++);          // 约为100us
}
void  delay10us(uint32  dly)
{  
    uint32  i;
    for(; dly>0; dly--)
        for(i=0; i<160; i++);          // 约为10us
}
void ClearRect(int index)
{
    switch(index)
    {
    case 1:
        drawrect(0,12,128,16,0x2345);
        break;
    case 2:
        drawrect(0,40,128,48,0x2345);
        break;
    case 3:
        drawrect(0,100,128,48,0x2345);
        break;
    default:
        break;
    }
}

void LCD_Frame()
{
    //屏幕初始显示
    drawrect(0,0,128,12,0x0000);
    drawrect(0,12,128,16,0x2345);
    drawrect(0,28,128,12,0x0000);
    drawrect(0,40,128,48,0x2345);
    drawrect(0,88,128,12,0x0000);
    drawrect(0,100,128,48,0x2345);
    drawrect(0,148,128,12,0x0000);
}

int main()
{
    int idx;
    int xpos,ypos;
    long count,distance;
    char sndBuf[20];

    //通讯板IO控制引脚设置
    IO1DIR &=~(1<<16); //IOZ/A          输入--接收开关状态信号
    delay(10);
    //P3.0~P3.7定义为IO引脚
    PINSEL6 &= 0x0000;

    //定义P3.1为输入,P3.3为输出
    FIO3DIR0 = 0;
    FIO3DIR0 |= 1<<3;   

    //设置LCD屏幕引脚   
    PINSEL3=PINSEL3 & 0x00000000;
    IO1DIR=IO1DIR|0x05700000;

    //屏幕初始化    
    RESET0;//复位                           
    delay(50);
    RESET1;                     
    delay(100); 
    lcd_init();
    delay(20);
    LCD_Frame();  

    DispAscStr(0,12,"  ",2,&xpos,&ypos);
    DispChnStr(xpos,ypos,"超声模块测试",6,&xpos,&ypos);

    ClearRect(2);
    /*******************超声波测距************************/
    idx=0;
    while(1)
    {   
        delay10us(100);

        //发送10us启动电平
        FIO3PIN0 |= 1<<3;
        delay10us(1);
        FIO3PIN0 &= ~(1<<3);

        //等待高电平出现
        while(!(FIO3PIN0&(1<<1)));

        //配置定时器0
        T0TC=0;     //清除定时器值
        T0PR=0x10;  //预分频寄存器
        T0CTCR=0;   //定时器模式,检测PCLK边沿
        T0TCR=0x01; //计数器使能、计数器复位
        delay(1);
        //等待降为低电平
        while(FIO3PIN0&(1<<1));

        //显示距离值,大概80为1cm
        count=T0TC;
        distance =count/80;
        sndBuf[0]='d';
        sndBuf[1]='=';
        sndBuf[2]= distance /10000+'0';       //万
        sndBuf[3]= distance %10000/1000+'0';  //千
        sndBuf[4]= distance %1000/100+'0';    //百
        sndBuf[5]= distance %100/10+'0';      //十
        sndBuf[6]= distance %10+'0';          //个
        sndBuf[7]='c';
        sndBuf[8]='m';
        DispAscStr(0,40,sndBuf,9,&xpos,&ypos);      

        delay10us(3000);        
    }    
   /*****************************************************/
   return 0;
}

在实验中会存在一些盲区,造成测量盲区存在主要有两方面因素:超声波发射头在发射出一串方波信号后经过一段延时才打开外部中断入口,防止方波信号直接进入接收头作为回波引起中断,产生误测量,延时对应的距离即为盲区;另一方面,在测量较近距离时,回波信号会与发射余波重叠造成寻峰失败,同样产生测量盲区。

3.倒车实验

本实验模仿倒车,当距离小于20cm时,提示司机注意安全倒车距离,大于安全距离时显示距离障碍物的距离。修改Main.c中的代码如下:

    //模仿倒车,当距离小于20cm时发出警告,并显示当前距离值
        if(distance<20)
            DispAscStr(0,100,"warning",7,&xpos,&ypos);
        else
            drawrect(0,100,128,48,0x2345);  

4.声速测量

利用声速、传播时间、传播距离的关系,模仿实验条件,简单的测出实验环境下的声速的大概值。
例如在NXP实验节点板定时器输入频率为f=12MHz,进行N=8分频后每个计数周期为 ,假设超声波声速为c,则由 ,可知 。

// 计算公式
c=24*1000000/8*distance/count;
sndBuf[0]='v';
sndBuf[1]='=';
sndBuf[2]=c/10000+'0';       //万
sndBuf[3]=c%10000/1000+'0';  //千
sndBuf[4]=c%1000/100+'0';    //百
sndBuf[5]=c%100/10+'0';      //十
sndBuf[6]=c%10+'0';          //个
sndBuf[7]='m';
sndBuf[8]='/';
sndBuf[9]='s';
DispAscStr(0,120,sndBuf,10,&xpos,&ypos);            

5.自动门实验
本实验模仿自动门的功能。初始时,门关闭。当有人到达门前,原有的距离被改变,当人与测距器的距离达到临界值时(例如距离小于50cm),打开自动门。否则,认为没有人员的到来,关闭自动门。

  idx=0;//初始状态,门处于关闭状态
  if((distance<50)&&(idx==1))
   {
    drawrect(0,40,128,48,0x2345);
    DispAscStr(0,40,"status:open",11,&xpos,&ypos);
    idx=0;//关闭门
   }
   else if((distance>50)&&(idx==0))
   {
       drawrect(0,40,128,48,0x2345);
    DispAscStr(0,40,"status:close",12,&xpos,&ypos);
    idx=1;//打开门
   }
五、实验思考
  1. 超声波有哪些用途
  2. 超声波测距的原理是什么?
  3. 你认为超声波测距模块可以应用于哪些场合?
  4. 影响超声测距模块精确度的因素有哪些?
posted @ 2016-05-29 11:35  shugen  阅读(926)  评论(1编辑  收藏  举报