美文网首页玩转51单片机
【外设1】超声波传感器的驱动

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

作者: 创客乌托邦 | 来源:发表于2018-05-16 16:20 被阅读6次

    一、简介

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

    二、实验平台

    单片机型号:STC12C5A60S2

    外设模块型号:HC-SR04

    编译软件:KEIL

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

    三、版权声明

    博主:文武大侠

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

    原文地址:

    联系方式:644746740@qq.com

    老蔡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


      image.png

    4.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】超声波传感器的驱动

        本文链接:https://www.haomeiwen.com/subject/fmgedftx.html