# STM32 实战|HC‑SR04 超声波传感器测距实验,吃透 TOF 飞行时间测距原理 >
文章目录
前言
超声波测距是嵌入式里非常经典的传感器应用,倒车雷达、车位检测、障碍物预警都能看到它的身影。本次实验使用 HC‑SR04 超声波模块搭配 STM32 单片机,完成障碍物距离测量,搞懂触发、回声时序逻辑,同时分析盲区、温度、安装角度对测量精度的影响。

一、实验硬件清单
在进行本次实验之前,我们需要准备以下硬件设备:
- STM32 主控板
- HC‑SR04 超声波测距模块
- ST‑LINK 下载调试器
- 5V 供电电源
- 刻度尺(用于标定真实距离)
硬件接线
HC‑SR04 是 5V 器件,严禁直接 3.3V 供电,ECHO 输出为 5V 电平,接入 STM32 的 3.3V IO 口,建议串联 1kΩ 电阻做电平保护。
| HC‑SR04 引脚 | STM32 引脚 |功能说明
|VCC|5V|模块供电
|Trig | PA11|GPIO 推挽输出,输出≥10μs 触发高电平
| Echo |PA12 |GPIO 输入,接收回声脉冲信号
| GND | GND |单片机与模块共地,统一信号参考电位

二、核心工作原理
1. TOF 飞行时间测距
HC‑SR04 内部有两个分离探头:发射探头、接收探头,工作频率 40kHz。
- STM32 向 Trig 引脚输出10μs 以上高电平触发脉冲;
- 模块自动向外发射 8 组 40kHz 超声波,同时 ECHO 引脚拉高;
- 超声波碰到障碍物反射回来,接收探头捕获回波后,ECHO 引脚拉低;
- ECHO 高电平持续时间 t,就是超声波往返总时间。
距离计算公式:
(D=\frac{v \cdot t}{2})
- v:声速,常温 20℃约 343m/s;
- t:ECHO 高电平时间;
- ➗2:因为时间包含超声波去 + 返回两段路程。
超时机制:超过 38ms 没有收到回波,ECHO 自动拉低,代表超出量程;两次测量间隔建议大于 60ms,消除探头余振带来的数据干扰。
2. 压电效应
- 发射端:逆压电效应,电信号转换成机械振动,产生超声波;
- 接收端:正压电效应,声波振动转化为微弱电信号,模块内部放大处理输出 ECHO 电平。

三、关键代码逻辑说明
核心测距函数 HCSR04_GetDistance(),主要分为 5 步:输出触发脉冲、等待回声起始、定时器计时、等待回声结束、计算距离。
float HCSR04_GetDistance(void)
{
//1.产生10us触发脉冲
TRIG = 1;
delay_us(10);
TRIG = 0;
//2.等待ECHO变高,增加超时防止程序卡死
uint32_t timeout=38000;
while((ECHO==0)&&(timeout--));
if(timeout==0) return -1;
//3.开启定时器计时
TIM_Cmd(TIM2,ENABLE);
//4.等待ECHO变低
timeout=38000;
while((ECHO==1)&&(timeout--));
if(timeout==0){
TIM_Cmd(TIM2,DISABLE);
return -1;
}
//5.停止定时器,读取计时时间,计算距离
TIM_Cmd(TIM2,DISABLE);
float t = TIM_GetCounter(TIM2)/1000000.0f;
float distance = 343.0f * t / 2.0f;
return distance;
}
编程踩坑要点
- Trig 必须输出≥10μs 脉冲,需要微秒级延时;
- 必须增加超时判断,无障碍物的时候避免程序死循环卡死;
- Echo 是 5V 信号,接入 3.3V 单片机 IO,必须做电平保护;
- 两次测量间隔大于 60ms,消除探头余振;
- 主循环中多次采样取平均值,抑制测量噪声抖动;
- 返回值
-1代表超量程,程序要做异常处理。
主循环逻辑:每隔 100ms 调用测距函数,多次采样取平均,串口输出距离数值,也可以输出到 TFT 液晶屏显示。
四、实验实测结果(室温 20℃)
真实距离 (cm) 测量距离 (cm) 绝对误差 (cm) 现象
5 无法测量 — 进入盲区,小于 2cm 无法检测
20 20.4 0.4 测量稳定
50 50.7 0.7 误差较小
100 101.1 1.1 正常小幅波动
200 202.3 2.3 距离变大误差增大
420 返回无效 — 超出模块最大 4m 量程
- 有效量程:2cm‑400cm,有效范围内误差一般小于 ±3cm;
- 近距离盲区:距离小于 2cm 无法测量,来自发射探头余振干扰;
- 靠近 4m 量程上限,数据抖动明显增大;
- 探头倾斜,反射声波偏离接收探头,会漏检或者测量值偏大;
- 环境温度改变声速,带来系统性测量误差;
- 海绵这类吸声材质,回波弱,容易检测失败。

五、误差来源 & 常见故障排查
主要误差来源
- 盲区误差:近距离发射余振掩盖回波信号;
- 温度带来系统误差:温度改变空气中声速,是最大误差源;
- 探头安装角度,反射波无法回到接收端;
- 定时器计时分辨率限制;
- 被测物体材质,吸音材料会削弱回波。
调试踩坑
- VCC 接 3.3V:模块不工作,必须 5V 供电;
- 模块和单片机没有共地:信号错乱,数据乱跳;
- 没有超时判断:无障碍物,程序直接卡死;
- 测量间隔太短:探头余振没有消散,数据异常。
六、进阶优化思路
- 温度补偿:外接 DS18B20 温度传感器,使用公式 (v=331.4+0.607\times T) 实时修正声速,消除温度带来的系统误差;
- 本地可视化:LCD 屏幕实时显示距离;设置阈值,距离过小时声光报警,模拟倒车雷达;
- 软件滤波:中值滤波算法,剔除跳变异常值,提升数据稳定性;
- 多探头阵列:多路超声波,模拟停车场车位检测;
- 工程改造:户外使用增加 IP65 防护、防风凝露结构。
总结
HC‑SR04 利用 TOF 飞行时间原理,通过测量超声波往返时间计算距离。Trig 负责触发,Echo 输出代表往返时间的脉冲信号。实际使用中不能忽略盲区、温度、余振的影响。软件层面做好超时保护、多次采样滤波,硬件做好电平匹配,才能得到稳定可靠的测距结果。
更多推荐


所有评论(0)