
做超声波测距电路最难的不是把原理图拼出来而是把发射功率、接收灵敏度、时序控制这三件事同时做好。很多朋友照着网上的模块抄一版发现测近处乱跳、测远处测不到问题几乎都出在这三个环节的匹配上。这篇文章我按照自己实际画板、调试的流程把从发射到接收的完整链路拆开讲一遍包括参数计算、器件选型和踩坑实录希望能给你省点折腾的时间。先说个大概这套方案适合做液位检测、避障小车、倒车雷达这一类应用动手前需要准备示波器、信号发生器和基本的焊接工具。如果你是想直接买模块焊上的这篇可能帮不上太大忙但如果你打算自己设计电路、吃透每个环节的原理那这篇内容正好踩在你的需求点上。1. 测距原理与系统架构先搞清楚信号怎么走1.1 声波往返时间法一个简单但容易被忽略的公式超声波测距的核心原理并不复杂就是发射一束超声波等它碰到障碍物反射回来用往返时间换算距离。很多人上来就写公式距离 声速 × 时间 / 2这个公式确实够了但真正设计电路时有几个隐含条件必须先想清楚。首先是声速本身不是固定值。在标准大气压、15℃干燥空气中声速大约是 340m/s但温度每升高 1℃声速大约会增加 0.6m/s。也就是说夏天 35℃ 的车间和冬天 0℃ 的室外同一套电路测同一个目标读数可能差出 3% 以上。对精度要求高的应用必须加温度传感器做补偿这个后面细说。其次是波长的概念。我们常用的 40kHz 超声波在常温下的波长是λ 声速 / 频率 ≈ 343 / 40000 ≈ 8.6mm这个 8.6mm 直接决定了测距分辨率的理论极限。波长越短轴向分辨率越高但空气中的衰减也越厉害。40kHz 是一个工程上兼顾了分辨率、衰减和器件成本的折中频率所以市面上绝大多数超声波测距模块都选它自己设计时也应该从这个频率起步。最后是往返路径的概念。超声波从发射换能器出来经过障碍物反射再回到接收换能器实际走过的路径可能不是直线。当障碍物表面倾斜时反射声波可能直接偏出接收换能器的波束角导致测不到。所以电路设计得再好换能器的安装角度和波束角选择不对照样白搭。1.2 从模块到自制系统整体模块划分与设计思路搞清楚原理之后就可以把整块电路拆成几个功能模块了。我习惯这样划分控制核心、发射链路、接收链路、电源与接口。控制核心负责产生 40kHz 的脉冲串、发射时刻记录、接收回波时刻捕获以及距离计算和输出。可选方案很多最简单的用纯逻辑电路比如 555 定时器加单稳态触发器但基本没人这么干了性价比最高的还是带定时器 PWM 和输入捕获功能的 MCUSTM32、GD32 这类芯片在测试里表现都很稳。发射链路的核心任务是把控制核心输出的低压脉冲放大成足以驱动换能器发出高响度声波的驱动信号。这里涉及驱动管选型、升压变压器设计、匹配电感计算是最容易翻车的一个环节后面单独展开。接收链路的核心任务是把接收换能器捕捉到的微伏到毫伏级回波信号经过放大、滤波、整形变成控制核心能可靠识别的电平跳变。这里的难点是信号太弱、噪声太多、动态范围太大处理不好就误触发或者漏触发。电源与接口部分通常需要稳定的 5V 和 3.3V 供电。如果系统里还有舵机或者电机建议用 LDO 或 Buck 方案做分路供电避免电机启动瞬间的压降干扰测量。嵌入式应用的电源电路设计原则是“干净优先”纹波尽量控制在 50mV 以内不然会直接影响接收链路的信噪比。2. 发射电路设计把电脉冲变成声波2.1 两种驱动拓扑对比单端驱动与推挽驱动发射电路的设计目标很明确让换能器发出尽可能强的声波同时保证电路效率不过低、器件不过热。最常见的驱动方式有两种单端驱动和推挽驱动。单端驱动就是用一个开关管把变压器的初级一端接地另一端接电源脉冲到来时管子导通初级电流上升存储在变压器磁场中的能量在断开瞬间释放到次级激励换能器发声。这种方式的优点是电路简单一个三极管或 MOSFET 就能搞定缺点是变压器的磁芯只工作在磁化曲线的一侧磁利用率低输出功率有限而且开关管断开的瞬间反峰电压很高需要额外的吸收回路。推挽驱动用两个开关管交替导通变压器初级两端轮流接电源和地磁芯工作在对称的双向励磁状态。同样的磁芯体积推挽拓扑能输出的功率比单端大得多波形也更对称谐波分量少对接收链路的干扰更小。代价是驱动电路稍微复杂一点需要互补的 PWM 信号。不过现在 MCU 的定时器都能输出互补带死区的 PWM这个复杂度基本可以忽略。我在实际项目里优先选推挽方案原因有两个一是同样用 5V 供电推挽拓扑次级能拿到更高的峰峰电压声压级直接上去了二是绕组电流连续变压器不容易饱和可靠性明显更好。2.2 升压变压器设计与参数匹配发射换能器要正常发声驱动电压通常需要几十伏的量级。以常见的压电陶瓷换能器为例在 40kHz 激励下峰值电压至少要 15V 才能有可用的声压输出推荐做到 40V 以上。如果控制核心和驱动级都工作在 5V必须用变压器升压。变压器设计的第一步是确定匝比。我常用的估算公式是次级峰值电压 ≈ 初级供电电压 × 匝比 × 占空比相关因子实际设计中单端驱动按占空比 50% 估算推挽驱动按全波整流后的等效值估算。选 1:10 的匝比5V 供电时次级可以拿到大约 50V 的峰值电压对 40kHz 换能器来说已经足够。匝比太高虽然电压更足但绕组的分布电容会变大高频响应变差反而得不偿失。变压器的第二步是考虑匹配电感。压电换能器的等效模型是一个电容并联一个电阻在企业级应用中常常用并联电感把电容调谐掉使负载在 40kHz 附近呈现纯阻性这样驱动级输出的能量才能高效转换成声能以最大效率辐射。具体参数可以这样估算假设换能器静态电容约 2500pF目标谐振频率 40kHz需要并联的电感量是L 1 / ( (2πf)² × C ) ≈ 1 / ( (6.2832 × 40000)² × 2.5 × 10⁻⁹ ) ≈ 6.3mH直接绕一个 6.3mH 的磁芯电感并联在换能器两端就可以。这个电感也可以直接用变压器次级的漏感来凑但那样不好控制不如用独立的电感更稳妥。2.3 发射脉冲时序规划脉冲串长度与盲区的第一道坎发射电路不只要考虑能量还要考虑时序。我们通常不是发一个脉冲而是发一串脉冲让换能器累积振动能量把声波推出去。这个脉冲串的长度需要根据应用场景权衡。我一般发 8 个 40kHz 方波脉冲持续时间也就是 8 个周期约 200μs。脉冲串太短换能器还没来得及振动到最大幅度就被切断了声压不足太长余振时间拉长盲区变大而且近距离目标容易淹没在发射尾音里。发射结束之后换能器因为惯性还会继续振动一段时间这个现象叫余振。余振幅度随时间指数衰减可能需要 0.4ms 到 1ms 才能降到接收电路能分辨的水平对应的盲区大约是 7cm 到 17cm。缩短盲区的方法包括在发射信号结束前加入相位反转的阻尼脉冲、在接收输入级设计钳位保护、以及用软件屏蔽发射后的前几百微秒。这些措施不是选做而是想做近距离测量就必须做。3. 接收电路设计把微弱声波捞出来3.1 回波信号到底有多弱从自由衰减模型看接收链路接收链路面对的第一个现实问题是回波信号真的非常弱。超声波在空气中传播时声强随距离的增加按平方衰减同时介质吸收也会消耗能量。在 40kHz 频率下传播 2 米再反射回来接收换能器输出的信号幅度通常只有几百微伏到几毫伏。如果你的发射功率不足、目标反射率又低这个数值可能会掉到几十微伏。这就意味着接收电路第一级放大器的等效输入噪声必须足够低否则信号直接淹没在噪声底里后面怎么处理都白搭。设计接收链路时我给自己定的指标是灵敏度不低于 1mV能可靠检测 300μV 级别的回波同时对近处的强回波不能饱和。为了达到这个指标接收链路通常分成三级处理前置放大、带通滤波、比较器整形。每一级都有各自的任务不能混在一起做否则调试起来会非常痛苦。3.2 前置放大与带通滤波如何把 40kHz 从底噪里提出来接收换能器出来的信号第一站是前置放大器。这个放大器的主要指标不是增益有多高而是噪声要低。很多朋友一上来就做 60dB 放大结果把噪声也放大了 1000 倍得不偿失。正确做法是先做一个噪声系数低的运放用约 20 倍到 50 倍的增益把信号抬到毫伏级以上再用滤波器做选频。运放选型方面我推荐用 JFET 输入型的运放比如 TL072、TL082或者更现代一点的 OPA2134。它们的输入阻抗高、噪声密度低、带宽也够用关键是便宜好买。需要注意的是单电源供电时要给虚拟地或者干脆选轨到轨运放简单省事。第二级做带通滤波中心频率定在 40kHz带宽尽量控制在 4kHz 到 8kHz。带宽太宽噪声进来太多带宽太窄回波信号本身是带一定频率偏移的反而会被削掉。多反馈拓扑的带通滤波器一致性比较好我用得最多配合双运放可以同时完成二阶级联滤波和放大。整个接收链路的总增益大致这样估算回波 500μV → 前放 40 倍 → 2mV → 带通滤波级 20 倍 → 40mV → 后级再放大 10 倍 → 400mV。这个幅度给比较器做判决已经足够了。这里所有参数都要根据实际换能器调试别死搬这一组值。3.3 比较器与阈值检测最后一公里的判决接收链路的最后一步是把模拟信号变成数字电平。我习惯用比较器把放大滤波后的回波信号与一个可调阈值电压比较信号超过阈值就翻转输出MCU 捕获这个翻转沿记录时间戳。阈值设置非常有讲究。阈值设得太高远距离弱回波检测不到测距范围缩短阈值设得太低噪声尖峰会误触发距离读数随机跳动。稳妥做法是先用示波器观察回波包络幅度测一下噪声底然后把阈值设置在噪声底的两倍以上。对于有多个目标或需要抗干扰的场景我还会考虑用迟滞比较器就是通过正反馈电阻给阈值加一点滞回这样输出就不会在临界点反复抖动。比如阈值设 200mV迟滞窗口 20mV信号只要超过 210mV 输出翻转回落到 190mV 以下才恢复能有效消除临界状态下的振荡。4. 关键元器件的选型思路与完整链路解析4.1 换能器选型频率、灵敏度与波束角整个系统里最核心的器件是换能器它的性能直接决定了测距范围、精度和可靠性。选型需要关注的参数有三个谐振频率、灵敏度、波束角。谐振频率一般就是 40kHz但需要确认是发射换能器还是接收换能器。发射换能器关注发送声压级接收换能器关注接收灵敏度厂家规格书上会有明确标注不要混用。有些模块为了节省成本发收用同一型号性能和优化过的收发分离方案有差距。波束角决定了测量的覆盖范围。窄波束角适合测远处目标能量集中、反射信号强宽波束角适合避障覆盖范围大但容易收到侧面目标的干扰。做小车避障的话常用 60° 到 80° 的宽波束做液位计就用 10° 左右的窄波束。安装时换能器要露出外壳不能被遮挡否则声波被外壳吸收灵敏度大打折扣。4.2 运放、比较器、驱动管的选型表接收链路的运放我建议用低噪声 JFET 输入型的 TL072、TL082。它们单颗封两个运放做前放和滤波刚好。如果你要把系统做小可以用 SOT-23-5 封装的单运放比如 OPA340但噪声指标要检查。比较器用常见的 LM393 即可开漏输出配上拉电阻电平兼容性很好。发射链路的驱动管小功率场景用 AO3400 这类低压 MOSFET 就够导通电阻低、开关速度快、价格也便宜。如果追求更高的峰值功率可以考虑加一级图腾柱驱动电路用两个三极管把 PWM 信号整形后再推 MOSFET 栅极。换能器端并联的匹配电感用磁芯电感注意电流额定值要覆盖峰值电流否则电感会饱和匹配完全失效。变压器可以选用现成的 EE 或 EP 磁芯骨架绕制时需要把初级和次级隔离处理好避免绕组间分布电容带来的高频损耗。4.3 完整的信号链路与各级参数计算把前面所有模块串起来一个典型的发射接收链路如下STM32 定时器产生 40kHz、8 个脉冲的对称 PWM → 推挽驱动级利用两个 MOSFET 交替导通 → 1:10 升压变压器输出约 50V 峰峰电压 → 并联 6.3mH 匹配电感后施加到发射换能器。同一时刻接收换能器接收回波 → 前放 TL072 反相放大 40 倍 → 多反馈带通滤波器中心频率 40kHz、Q 值约 5、增益 20 倍 → 第二级放大 10 倍 → LM393 比较器与 200mV 阈值比较 → 输出到 STM32 输入捕获引脚。关于 STM32 这部分定时器配置可以参考下面的代码片段这是我在测试里验证过的基础配置// 使用TIM1通道1输出40kHz PWM8个脉冲 void ultrasonic_emit(void) { TIM1-PSC 84 - 1; // 84MHz / 84 1MHz TIM1-ARR 25 - 1; // 1MHz / 25 40kHz TIM1-CCR1 12; // 占空比约50% TIM1-BDTR | TIM_BDTR_MOE; // 使能PWM输出 delay_us(200); // 8个脉冲约200us TIM1-BDTR ~TIM_BDTR_MOE; // 关闭PWM输出 }这段代码的思路是开启 PWM 输出 200μs也就是发射 8 个周期然后立刻关闭输出进入接收等待阶段。配合输入捕获中断记录回波到达时刻MCU 就能算出时间差。5. 常见坑与调试经验实录5.1 盲区为什么消不掉几乎每一个第一次做超声波测距的人都会问为什么最近只能测 20cm 左右再近就读不出来了这个现象就是盲区来源有两个换能器本身的余振和接收电路的饱和。换能器余振是物理特性发射停止后压电陶瓷片还会继续振荡这个振荡通过空气和结构直接耦合到接收换能器形成很强的起始信号强度远超正常回波。接收电路如果此时还在高增益状态必然饱和恢复需要时间。解决思路分硬件和软件两层。硬件上给接收输入端加一对背靠背的钳位二极管限制饱和深度让放大器更快从过载恢复软件上在发射脉冲结束后的一段时间内关闭接收检测直接用延时代码跳过盲区。两个措施配合使用盲区能压到 5cm 左右基本就到了物理极限。5.2 温漂是超声测距的天然误差源前面提到过声速随温度变化。如果你测一个液位白天和晚上读出的数值不一样先别急着怀疑电路拿温度计看一下是不是温度变了。补偿方法不复杂MCU 里挂一个 DS18B20 或者 NTC 测温然后按下面这个公式实时计算声速v ≈ 331.4 0.6 × T其中 T 是摄氏温度。这个公式在 -20℃ 到 50℃ 范围内误差能控制在 1% 以内对大多数应用足够了。湿度也在影响声速但影响幅度比温度小一个数量级工程上基本不考虑。5.3 环境噪声与串扰的排查工业现场经常有无刷电机、变频器、电磁阀这类强干扰源它们产生的超声波频段虽然不在 40kHz但高次谐波能量完全可能串进接收链路。我遇到过的高频噪声尖峰能把比较器打得乱跳距离读数像抽风一样。排查手段有两种。一种是用示波器接在比较器输入端观察回波窗口里的波形确认尖峰的位置和幅度另一种是拔掉发射换能器只给接收链路通电看输出有没有误触发。环境噪声抑制主要靠带通滤波的 Q 值但这存在上限。另一个有效办法是多次测量取中值比如连续测 5 次去掉最大最小值取中间值能明显压制随机性干扰。5.4 问题排查速查表故障现象可能原因排查步骤完全测不到回波发射电路无输出示波器测变压器次级波形确认有 40kHz 高压脉冲近距离测距乱跳盲区处理不当或阈值太低加大软件盲区延时检查接收钳位电路远距离测距丢失发射功率不足或增益不够调高发射电压增加接收链路增益检查波束指向温度变化后误差大未做温度补偿接入温度传感器按公式补偿声速噪声干扰误触发滤波带宽过宽或阈值过低提高带通 Q 值、提高比较器阈值、加迟滞回波信号饱和前放增益过高降低前放增益加入自动增益控制电路我实际调试时一定会先用示波器打三个点变压器次级、前放输出、比较器输出。这三个点能直接定位问题在发射链路、模拟链路还是数字判决链路。省掉这一步直接改参数大概率会越调越乱。最后再分享一个心得这类电路设计的难点不在单个模块而在模块间的匹配。发射功率上去了接收饱和就可能变严重接收增益调高了环境噪声也跟着放大。所有参数都是互相牵制的调试时养成一次只动一个变量的习惯记录每次调整前后的波形和读数。这比任何技巧都管用。