【外设1】超声波传感器的驱动

一、简介

本文介绍如何用51STC单片机驱动超声波传感器来实现测距等功能。

二、实验平台

单片机型号:STC12C5A60S2

外设模块型号:HC-SR04

编译软件:KEIL

硬件平台:达芬奇51开发版

三、版权声明

博主:文武大侠

声明:喝水不忘挖井人,转载请注明出处。

原文地址:

联系方式:[email protected]

老蔡51单片机群:463850023

四、讲解

  超声波传感器对于51单片机外设来讲是很常见的,它的工作原理也很简单,所以看到此篇博客的同学按照我的步骤往下看完,一定会学明白的,如果有不明白的就暂停一下,自己想一想或者百度一下,再或者在下面留言,我会及时回复的。

4.1 超声波传感器原理

  由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
  超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。

      测距的公式表示为:L=C×T

  式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
  HC-SR04超声波模块可提供2cm~400cm的距离感测功能,测量精度可以达到3mm。模块包括超声波发射器,接收器与控制电路。

基本工作原理

  1. 采用Trig引脚触发,给至少10us的高电平脉冲信号
  2. 模块自动发送8个40kHz的方波,自动检测是否有信号返回
  3. 有信号返回,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间。距离=(高电平脉冲时间*340)/2


    【外设1】超声波传感器的驱动_第1张图片
    image.png

4.2 程序逻辑

【外设1】超声波传感器的驱动_第2张图片
image.png

4.2 用代码来实现它

//主程序
void main(void)
{  
    TMOD=0x01;         //ÉèT1Ϊ·½Ê½2£¬T0Ϊ·½Ê½1 GATE=0
    SCON=0x10;
    UartInit();
    TH0=0;
    TL0=0; 
    TR0=1;  
    ET0=1;             
    TI=1;
    EA=1;              
    while(1)
    {
        LED1 = ~LED1;
        StartModule();  //发送大于10us的高电平
        while(!RX);     //等待返回信号
        TR0=1;              //打开定时器
        while(RX);          //监测到返回信号主程序停止,定时器计时
        TR0=0;              //信号
        Conut();            //通过定时器的时间,算出距离
        delayms(100);       //100MS
    }
} 

StartModule()

void  StartModule() 
{
    unsigned char i, j, k;
    i = 68;
    j = 61;
    k = 50;
    TX=1;                            //800MS启动一次模块
    do
    {
        do
        {
            while (--k);
        } 
        while (--j);
    } 
    while (--i);
    TX=0;
}

void Conut(void)

void Conut(void)
{
    time=TH0*256+TL0;
    TH0=0;
    TL0=0;
    S=(time*1.87)/100/2 - 0.7;     //通过定时器时间计算距离公式
    if(flag==1)         //超出测量
    {
        flag=0;
        printf("-----\n"); 
    }
    printf("S=%f\n",S); 
}

休息一下 等会把代码上传到git上

你可能感兴趣的:(【外设1】超声波传感器的驱动)