前言

超声波测距是嵌入式里非常经典的传感器应用,倒车雷达、车位检测、障碍物预警都能看到它的身影。本次实验使用 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。

  1. STM32 向 Trig 引脚输出10μs 以上高电平触发脉冲;
  2. 模块自动向外发射 8 组 40kHz 超声波,同时 ECHO 引脚拉高;
  3. 超声波碰到障碍物反射回来,接收探头捕获回波后,ECHO 引脚拉低;
  4. 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;

}

编程踩坑要点

  1. Trig 必须输出≥10μs 脉冲,需要微秒级延时;
  2. 必须增加超时判断,无障碍物的时候避免程序死循环卡死;
  3. Echo 是 5V 信号,接入 3.3V 单片机 IO,必须做电平保护;
  4. 两次测量间隔大于 60ms,消除探头余振;
  5. 主循环中多次采样取平均值,抑制测量噪声抖动;
  6. 返回值 -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 量程

  1. 有效量程:2cm‑400cm,有效范围内误差一般小于 ±3cm;
  2. 近距离盲区:距离小于 2cm 无法测量,来自发射探头余振干扰;
  3. 靠近 4m 量程上限,数据抖动明显增大;
  4. 探头倾斜,反射声波偏离接收探头,会漏检或者测量值偏大;
  5. 环境温度改变声速,带来系统性测量误差;
  6. 海绵这类吸声材质,回波弱,容易检测失败。
    在这里插入图片描述

五、误差来源 & 常见故障排查

主要误差来源

  1. 盲区误差:近距离发射余振掩盖回波信号;
  2. 温度带来系统误差:温度改变空气中声速,是最大误差源;
  3. 探头安装角度,反射波无法回到接收端;
  4. 定时器计时分辨率限制;
  5. 被测物体材质,吸音材料会削弱回波。

调试踩坑

  1. VCC 接 3.3V:模块不工作,必须 5V 供电;
  2. 模块和单片机没有共地:信号错乱,数据乱跳;
  3. 没有超时判断:无障碍物,程序直接卡死;
  4. 测量间隔太短:探头余振没有消散,数据异常。

六、进阶优化思路

  1. 温度补偿:外接 DS18B20 温度传感器,使用公式 (v=331.4+0.607\times T) 实时修正声速,消除温度带来的系统误差;
  2. 本地可视化:LCD 屏幕实时显示距离;设置阈值,距离过小时声光报警,模拟倒车雷达;
  3. 软件滤波:中值滤波算法,剔除跳变异常值,提升数据稳定性;
  4. 多探头阵列:多路超声波,模拟停车场车位检测;
  5. 工程改造:户外使用增加 IP65 防护、防风凝露结构。

总结

HC‑SR04 利用 TOF 飞行时间原理,通过测量超声波往返时间计算距离。Trig 负责触发,Echo 输出代表往返时间的脉冲信号。实际使用中不能忽略盲区、温度、余振的影响。软件层面做好超时保护、多次采样滤波,硬件做好电平匹配,才能得到稳定可靠的测距结果。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐