• HC-SR04超声波测距


    模块说明


      超声波模块Trig引脚输入了的10us的信号后,发射器会发送8个40KHz的的方波信号,当方波信号遇到障碍物时便会返回,接收器接收到了返回的方波信号便会输出一个高电平,高电平的持续时间便是方波信号的传输时间,以下是超声波模块的时序图:

    实验程序

      以下是超声波模块的初始化函数和实验函数,相关宏定义和延迟函数可以参考我其他的随笔;
    sr04.c

    #include "stm32f4xx.h"
    #include "bluetooth.h"
    #include "common.h"
    #include "sys_tick.h"
    #include "sr04.h"
    
    void sr04_init(void)
    {
    	GPIO_InitTypeDef		GPIO_InitStructure;
    	
    	//使能端口B、端口E的硬件时钟
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE );
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE );
    	
    	//PB6为输出模式,因为该引脚连接到Trig
    	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;//指定第6根引脚 
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ;//配置为输出模式
    	GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz ;//配置引脚的响应时间=1/100MHz .
    	//从高电平切换到低电平1/100MHz,速度越快,功耗会越高
    	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ;//推挽的输出模式,增加输出电流和灌电流的能力
    	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL ;//不使能内部上下拉电阻
    	GPIO_Init(GPIOB ,&GPIO_InitStructure);	
    	
    	//PE6为输入模式,因为要检测ECHO输出高电平的持续时间
    	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;//指定第6根引脚 
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN ;//配置为输出模式
    	GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz ;//配置引脚的响应时间=1/100MHz .
    	//从高电平切换到低电平1/100MHz,速度越快,功耗会越高
    	//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ;//推挽的输出模式,增加输出电流和灌电流的能力
    	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL ;//不使能内部上下拉电阻
    	GPIO_Init(GPIOE ,&GPIO_InitStructure);	
    	
    	//PB6引脚初始状态为低电平,根据时序图可以了解到
    	PBout(6)=0;
    }
    
    uint32_t sr04_get_distance(void)
    {
    	uint32_t t=0;
    
    	//PB6输出高电平
    	PBout(6)=1;
    	
    	//延时10us
    	delay_us(10);
    
    	//PB6输出低电平
    	PBout(6)=0;	
    	
    	//PE6要等待高电平出现
    	while(PEin(6)==0);
    	
    	//测量高电平的持续时间
    	while(PEin(6))
    	{
    		t++;
    		delay_us(9);//超声波每传输9us时间,距离为3mm,也就是传输3mm的时间为9us
    	}
    	
    	//因为该时间是包含发射和返回的时间,需要除以2
    	t/=2;
    	
    	return 3*t; //单位为mm
    }
    

    总结

      1.两次测量时间应大于60ms;
      2.被测物体的面积不少于0.5平方米且平面尽量要求平整;
      3.超声波的测量误差为3mm,可根据3mm的测距求出测量时间:(34010010mm)/1000000us=3mm/t --> t = 9us。

    模块资料下载

    链接:https://pan.baidu.com/s/1OOlTqa4WwsbH5iy7rrsyqg 
    提取码:ne5l 
    复制这段内容后打开百度网盘手机App,操作更方便哦
    
  • 相关阅读:
    yum插件yum-fastestmirror
    mysql利用yum安装指定数据存放路径
    快速搭建Seeddms文档管理系统
    Oracle单实例启动多个实例
    HTTP 304状态分析
    Oracle快速克隆安装
    Linux安装SQLite轻量级数据库
    redhat利用yum快速搭建LAMP环境
    将博客搬至CSDN
    GenericServlet 、Servlet和httpServler他们之间的关系
  • 原文地址:https://www.cnblogs.com/ding-ding-light/p/14468925.html
Copyright © 2020-2023  润新知