超声波(Fy-srf05)使用

标题:超声波(Fy-srf05)使用

第一章:超声波模块介绍

一、精度

该模块能够准确测量2CM-400CM距离,精确度在5mm之间,还是较为精确的,得到好多人的青睐。

二、接线

VCC——5V或者3V3,官方手册为5V,实测3V3也可以

OUT——通过判断OUT为高低电平,确定模块是否上电,一般不用

Trig——触发信号,给该引脚供应大于10us高电平,模块会自动发出8个40KHz信号,再由计算接收端Echo高电平时间计算距离

Echo——接收端,回响信号接收,在接收回响信号后产生一个和距离成比例的方波,通过该方波时间可计算距离

三、使用

第一步:配置在工作模式,通过配置Trig完成

1、先给置0,为了去除毛刺,可以给一段延迟

2、给大于10uS的高电平

3、给低电平,之后超声波会发出8个40KHz的信号,此时开启定时器开始定时

第二步:通过Echo高电平时间测量距离

1、读取Echo电平,当为高电平时,即为信号发出完成标志,记录开始计时时,计数器的值

2、读取Echo电平时间,低电平时停止读取,此时读取时间便为发出信号到接收完成的时间

3、关闭定时器

三、对应时序图为:

img

四、计算公式

距离=时间*声速(340m/s)该距离为两倍的距离

时间的计算要结合定时器的PSC,定时器的ARR最好设置为最大以PSC=72为例:

时间=(计时结束的定时器值-信号发出时的定时器值)*72MHz/72/1000000(S)

五、代码部分(以HAL库为例)

一、STM32CubeMX配置

配置时钟以及Trig,Echo,主频72MHz

在这里插入图片描述

二、keil5 MDK-ARM配置测距函数

uint16_t Measure(void)
{
	uint16_t StartTime,EndTime;
	uint16_t value,i;
	for(i=0;i<10;i++)
	{
		__HAL_TIM_SET_COUNTER(&htim1,0);//设置定时器1的初始计数值为0
		HAL_TIM_Base_Start(&htim1);//开启定时器
		HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,0);//将Trig引脚置低电平
		HAL_Delay(5);
		HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,1);//将Trig引脚置高电平
		HAL_Delay(15);
		HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,0);//将Trig引脚置低电平
		
		while(HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)==0);//等待信号发出,信号发出后,Echo为高电平
		StartTime=__HAL_TIM_GET_COUNTER(&htim1);//定时器计时开始的值
		while(HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)==1);//信号接收后,Echo为低电平,高电平时间就是信号发出到接收时间
		EndTime=__HAL_TIM_GET_COUNTER(&htim1);//定时器计时结束的值
		HAL_TIM_Base_Stop(&htim1);//关闭定时器
		value=value+(EndTime-StartTime)*34/2000;//距离计算公式:距离=时间*声速/2
	}
		value=(value/10);//多测几次,取平均值
		return value;//返回测距值
}

建议调试时用串口调试,也可参考我的第一篇文章,用OLED显示
详细代码,可看阿里云百度网盘:链接: https://pan.baidu.com/s/1BcOKo7JuCt3bORH-3b3XcQ?pwd=fwrx 提取码: fwrx 复制这段内容后打开百度网盘手机App,操作更方便哦

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值