[STM32F1] VSCODE STM32 裸机之超声波测距(HC-SR04)

[复制链接]
 楼主| zero949079783 发表于 2021-11-5 23:11 | 显示全部楼层 |阅读模式
开发环境:VSCODE(gcc编译链)+STM32CubeMX(也可以使用HUAWEI-LiteOS-Studio) 。
代码:链接:https://pan.baidu.com/s/1uXfIR0GFQOBZPl1NfQP08w  
提取码:6b0c

基本工作原理:
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声
波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;


1636124828(1).png

以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将
发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号
时间间隔可以计算得到距离。公式:uS/58=厘米或者 uS/148=英寸;或是:距离=
高电平时间*声速(340M/S)/2;建议测量周期为 60ms 以上,以防止发射信号对
回响信号的影响。

HAL库代:
  1. void HCSR04_Read_Data(float *cmA,float *cmB,uint16_t *cmC)
  2. {
  3.    

  4.         while(ECHO_IN() ==1);
  5.        
  6.         TRIG_H();                                       
  7.         delay_us(1);     //10uS 以上脉冲触发信号              
  8.         TRIG_L();
  9.        
  10.         while(ECHO_IN() ==0);           //ECHO_IN为0时,无信号
  11.     htim6.Instance->CNT = 0;        //清空
  12.         HAL_TIM_Base_Start(&htim6);     //开启定时器
  13.         while(ECHO_IN() ==1);           //有信号返回,ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间
  14.         HAL_TIM_Base_Stop(&htim6);                //关闭定时器
  15.        
  16.     //测试距离=(高电平时间*声速(340M/S))/2;
  17.         *cmA =(((htim6.Instance->CNT)*340)/1000000.0)/2*100;   //声速换算
  18.         *cmB = ((htim6.Instance->CNT))/58.0 ;                                   //厘米换算
  19.         *cmC = ((htim6.Instance->CNT))/58;                                           //整数换算
  20.           
  21. }
固件库3.5代码

  1. void HCSR04_Read_Data(float *cmA,float *cmB,uint16_t *cmC)
  2. {
  3.         while(ECHO_IN() ==1);
  4.        
  5.         TRIG_H();                                       
  6.         delay_us(15);    //10uS 以上脉冲触发信号
  7.         TRIG_L();
  8.        
  9.         while(ECHO_IN() ==0);   //ECHO_IN为0时,检ECHO_IN为0时,无信号
  10.         TIM_SetCounter(TIM6,0); //清空
  11.         TIM_Cmd(TIM6,ENABLE);   //开启定时器
  12.         while(ECHO_IN() ==1);   //有信号返回,ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间
  13.         TIM_Cmd(TIM6,DISABLE);        //关闭定时器
  14.        
  15.         //测试距离=(高电平时间*声速(340M/S))/2;
  16.         *cmA =((TIM_GetCounter(TIM6)*340)/1000000.0)/2*100;   //声速换算  
  17.         *cmB = (TIM_GetCounter(TIM6))/58.0 ;                                                                        //厘米换算
  18.         *cmC = (TIM_GetCounter(TIM6))/58;                                                                                        //整数换算
  19.        
  20. }




1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.jpg





cyclefly 发表于 2021-11-6 13:49 | 显示全部楼层
这个测试精度怎么样,
我也需要测距
但是看这个价格太便宜,一直没用,担心精度不够
 楼主| zero949079783 发表于 2021-11-6 14:22 | 显示全部楼层
cyclefly 发表于 2021-11-6 13:49
这个测试精度怎么样,
我也需要测距
但是看这个价格太便宜,一直没用,担心精度不够 ...

只能达到厘米级的精度。显示可以测到毫米
cyclefly 发表于 2021-11-6 15:14 | 显示全部楼层
好的,回头也试试
学习了
 楼主| zero949079783 发表于 2021-11-6 17:46 | 显示全部楼层
cyclefly 发表于 2021-11-6 15:14
好的,回头也试试
学习了

要高精度可以用激光测距,可以达到毫米级
xch 发表于 2021-11-9 18:52 | 显示全部楼层
做得好可以到1um 分辨率吧。
 楼主| zero949079783 发表于 2021-11-9 19:15 | 显示全部楼层
xch 发表于 2021-11-9 18:52
做得好可以到1um 分辨率吧。

1US计时,小数点后面最多3位
xch 发表于 2021-11-9 19:18 | 显示全部楼层
zero949079783 发表于 2021-11-9 19:15
1US计时,小数点后面最多3位

不是1μS,是1μm。1uS 分辨率是幼儿园级别的玩具。
 楼主| zero949079783 发表于 2021-11-9 19:21 | 显示全部楼层
xch 发表于 2021-11-9 19:18
不是1μS,是1μm。1uS 分辨率是幼儿园级别的玩具。

看你在什么产品上面
guijial511 发表于 2021-11-9 21:05 来自手机 | 显示全部楼层
这个能到1um?
paotangsan 发表于 2021-12-3 13:32 | 显示全部楼层
裸机的实时性如何
renzheshengui 发表于 2021-12-3 13:33 | 显示全部楼层
测距范围能有多少啊
tpgf 发表于 2021-12-3 13:36 | 显示全部楼层
精度能达到多少啊
wakayi 发表于 2021-12-3 13:37 | 显示全部楼层
超声波的限制是什么
wowu 发表于 2021-12-3 14:31 | 显示全部楼层
开发环境友好吗
xiaoqizi 发表于 2021-12-3 14:34 | 显示全部楼层
系统能提高性能吗
 楼主| zero949079783 发表于 2021-12-4 00:00 | 显示全部楼层
xiaoqizi 发表于 2021-12-3 14:34
跑系统能提高性能吗

硬件是基础,软件是灵魂,你觉得呢
hearstnorman323 发表于 2022-11-19 16:50 | 显示全部楼层
如何定时器测量呢?               
Wordsworth 发表于 2024-11-12 07:05 | 显示全部楼层

从定时器为TIM2,从模式选择为门控模式,触发源选择ITR0,开启定时器2中断。
Clyde011 发表于 2024-11-12 08:08 | 显示全部楼层

根据实际需求选择用哪种方式
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

91

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部