超声波测距 HC-SR04:用回波飞行时间量距离
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**入门层(beginner)**数字逻辑基础第九十四篇。这一篇是输入捕获/脉宽测量最典型的实战:发出一个脉冲,测回波脉冲有多宽,再用声速把时间换算成距离。同一套「飞行时间(ToF)」思想也是激光雷达、超声波流量计的基础。
本文要回答的问题
- 一个 Trig 脉冲之后,模块和声脉冲发生了什么?
- Echo 高电平宽度代表什么?为什么算距离要除以 2?
- 声速不是常数,温度变化时怎么补偿?
- 用定时器/输入捕获怎么精确量 Echo 脉宽?
- 为什么不能连续狂触发?多模块怎么避免互相干扰?
一、工作过程:触发→发声→听回波→回一个宽度脉冲
- 主控在 Trig 端给一个 ≥10µs 的高电平(其余时间低);
- 模块自动发出 8 个 40kHz 超声波脉冲,并把 Echo 拉高;
- 声波遇到障碍物反射,模块检测到回波后把 Echo 拉低;
- 于是 Echo 的高电平宽度 ≈ 声波「去程+回程」的总飞行时间 t。
Trig ___|‾‾‾|_______________________ (≥10µs)
Echo ______________|‾‾‾‾‾‾‾‾‾‾|_____
└─ 高电平宽 = 往返 ToF ─┘
发 8×40kHz 收到回波二、时间换算距离:记得除以 2
声音走的是「模块→障碍→模块」的往返双程,所以单程距离:
距离 d = t × v声 ÷ 2(t 为 Echo 高电平秒数,v声≈340m/s)
工程上常用 µs 记时:340m/s = 0.034cm/µs,故 d(cm) = t(µs) × 0.034 / 2 ≈ t(µs)/58——量到 Echo 高电平约 5800µs,距离约 100cm。量程一般 2~400cm、精度约 3mm,太近(<2cm)是盲区(发射余振未消就回来的回波分辨不出)。
三、用输入捕获精确测 Echo 宽度
不要用软件轮询计时(中断抖动大、不准)。用定时器的输入捕获通道(正是频率/周期/脉宽测量的做法):
- Echo 配置为「上升沿捕获」:检测到上升沿立即把定时器当前计数值锁存、清零/记录起点;
- 切到「下降沿捕获」:下降沿锁存终点,二者之差即高电平计数,换算成 µs;
- 全程硬件打时间戳,与 CPU 是否被打断无关,精度就是一个定时器 tick。
也可用 Echo 接外部中断沿读自由计数器,但输入捕获最稳。触发 Trig 用一个 GPIO 拉满 10µs(可用另一定时器/PWM 单脉冲生成)。
四、声速的温度补偿与使用约束
声速随空气温度变化:v ≈ 331.3 + 0.6·T(°C) m/s(20°C 时 ≈343m/s)。要高精度就按当前温度(可接温度传感器)修正系数。其它工程约束:
- 测距周期别太密:两次触发间至少留 30~60ms,等上一次声波在空间消散,否则会把残余回波当本次结果(Echo 最大宽约 38ms 对应 4m 多);
- 软件滤波:单发可能受毛刺、软目标吸声、斜射影响,连测多次取中值或去掉最大/最小再平均,超出量程的野值丢弃;
- 多模块串扰:多个 HC-SR04 一起工作会互相收到对方声波,应轮流触发(一个测完再启动下一个)或不同方向错峰;
- 表面软、倾斜、多径会丢波,Echo 超时(如 >38ms 无下降沿)要判为「无回波」而不是得到一个荒谬距离。
五、超声波 vs 红外/ToF 激光
| 方案 | 原理 | 特点 |
|---|---|---|
| HC-SR04 超声波 | 声 ToF | 便宜、不受光照/颜色影响、能测透明/软表面一般;慢、有声锥角、受温度/软吸声影响、有盲区 |
| 红外/Sharp | 三角测距(模拟电压) | 便宜近距、非线性、受颜色反光影响 |
| ToF 激光(VL53L0X 等) | 光 ToF | 快、精度高、波束窄、受强反光/强光影响、走 I2C |
它们数字侧都一样:发一个触发、读一个时间/数值、换算物理量——掌握「输入捕获+物理常数换算+滤波」这套范式即可迁移。
与现有篇目的衔接
- 前置:输入捕获/脉宽/周期测量、定时器/计数器、PWM/单脉冲
- 配套:外部中断、1-Wire 温度做声速补偿、ADC 读模拟测距件
- 相关:1-Wire/DHT 类单总线时序、WS2812 单线时序、寄存器型 I2C ToF
总结
一句话总结:HC-SR04 超声波模块用声呐飞行时间测距,数字交互只有两根线——主控给 Trig 端一个至少 10µs 的高脉冲,模块便发出 8 个 40kHz 方波并把 Echo 拉高,收到障碍物反射的回波后再拉低,于是 Echo 的高电平宽度精确等于声波往返的飞行时间;因为是去程加回程的双程,距离 d = t × 声速 ÷ 2,记到微秒时约为 d(cm)≈t(µs)/58,声速随温度按 331.3+0.6T 变化可做温度补偿,量程约 2~400cm、过近有盲区;测量必须用定时器输入捕获在 Echo 上升沿锁存起点、下降沿锁存终点,靠硬件打时间戳避免软件轮询抖动,Trig 可用 GPIO 或单脉冲 PWM 生成;使用时两次触发要间隔 30~60ms 等余波消散、连测多次取中值并剔除超时野值、多个模块轮流触发防止互相串扰;相比受颜色反光影响的红外三角测距和快速窄波束但怕强反光的激光 ToF,超声波便宜、不怕光照和透明表面但较慢且有声锥角和温度依赖——三者在数字侧都遵循「发触发、量回波/读值、按物理常数换算、再软件滤波」的同一范式。