标题:超声波(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、关闭定时器
三、对应时序图为:
四、计算公式
距离=时间*声速(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,操作更方便哦