
不用怀疑超声波测距电路设计核心难点从来不在“发射”也不在“接收”而在于把“发射—空中传播—回波接收—信号处理”这条完整的链路从原理图变成一块真正能稳定测距的板子。这块板子做出来不难但做到盲区小、距离远、测量稳定、不受环境干扰很多细节只有亲手调过才明白。这篇博文我按一个完整的项目流程来拆解先讲方案选型的思路再讲发射端怎么驱动、接收端怎么把微弱的回波从噪声里捞出来最后讲主控怎么把时间差换算成距离并把我在调试中踩过的坑一起列出来给大家做个参考。1. 系统方案与关键器件选型1.1 测距基本原理超声波测距的原理一句话就能讲清楚发射换能器发出一束超声波脉冲声波在空气中传播遇到障碍物后反射回来接收换能器收到回波信号。只要测出从发射到接收到回波的时间差 t再乘以声速 c除以 2就能得到障碍物到探头之间的距离。公式很简单距离 d (c × t) / 2。除以 2 是因为声波走了个来回实际距离是声程的一半。声速 c 在空气中并不是一个固定值。标准大气压下20°C 时声速大约是 343 m/s温度每升高 1°C声速大约增加 0.6 m/s。这个温度漂移听起来不大但在 2 米以上的测距场景里温差带来的误差就能到厘米级别。所以在精度要求高的场合必须加温度传感器做补偿。后面我会详细说补偿怎么实现。1.2 40kHz 换能器为什么是它市面上绝大多数超声波测距方案选择 40kHz 作为工作频率这不是随便定的。频率和探测距离是一对矛盾频率越高空气中衰减越大测距距离越近频率越低波长越长对小型障碍物的分辨能力越差而且探头体积会更大。40kHz 是长期工程实践折中出来的结果兼顾了探测距离、分辨率和器件成熟度。常见的压电陶瓷超声波换能器有“一发一收”型号比如国产的 TCT40-16T/R也就是发射头 16T、接收头 16R 这一对。发射头的中心频率在 40kHz 左右接收头的谐振频率和它对上。选型时注意两个关键参数发射灵敏度和接收灵敏度。发射灵敏度高的探头同样的驱动电压下声压更强接收灵敏度高的探头同样的声压下输出信号电压更大。这两个参数直接决定了整个测距系统的极限距离选型阶段务必优先看。顺带提一句有一种器件叫“收发一体”压电晶片也就是发射和接收共用同一个探头省了一个探头但需要额外的收发隔离电路来防止发射信号直接把接收电路打饱和。对新手来说一发一收是更稳妥的起点设计难度低很多调试也更方便。1.3 系统架构划分把整套电路按功能拆开就清晰了。整个系统可以划分为四个功能块发射驱动电路、接收信号调理电路、主控计时与数据处理电路、电源与接口电路。发射驱动电路要解决的问题是把主控给出的 40kHz 脉冲信号放大到足够高的电压去驱动压电陶瓷片让它能产生足够强的声压。接收信号调理电路要解决的问题是把接收探头输出的几十微伏到几毫伏级信号经过放大、滤波变成主控能识别的数字电平信号。主控部分我以前用 STM32 比较多也可以用普通单片机核心是利用定时器捕获回波脉冲的到达时刻。电源部分看似简单但超声波发射瞬间电流很大如果电源纹波控制不好接收电路的噪声就会跟着飙升。2. 发射驱动电路设计2.1 驱动方案对比发射驱动最常见的有三种方案三极管单管驱动、推挽驱动、变压器升压驱动。三种方案我都在实际项目中用过差别很明显。单管驱动电路最简单一个 NPN 三极管加一个集电极电阻主控 IO 口输出 40kHz 方波控制三极管导通和关断。但这种方案驱动电压只有电源电压 3.3V 或 5V加在探头上的有效电压太低发射声压偏弱有效测距距离很难超过 2 米。推挽驱动用两个三极管或 MOS 管组成半桥结构给探头两端提供正负对称的方波驱动相当于把驱动电压翻倍发射能量明显增强。我在 5V 系统里做过推挽驱动实测有效测距可以做到 3 米左右。变压器升压驱动是我个人最常用的方案。通过升压变压器把驱动电压从 5V 升到 20V 甚至更高同时利用变压器的阻抗变换匹配探头阻抗发射声压能提升好几个等级。配合低噪声接收链路实测 5 米以上没问题。缺点是电路多了一个磁性元件成本和体积略有增加但超声波测距里这点代价完全值得。2.2 变压器升压电路关键参数发射驱动电路的核心是升压变压器的设计。市场上有现成的超声波升压变压器卖中心抽头结构初级和次级的匝数比通常选 1:10 到 1:20 之间。我常用的是初级 2 个绕组各 10 匝、次级 200 匝的成品变压器5V 推挽驱动下次级能输出大约 100V 的峰峰值。这里要重点讲一讲变压器的阻抗匹配作用。压电陶瓷换能器在谐振频率附近表现出容性阻抗如果不做匹配大量能量会反射回驱动电路。方法是在变压器初级串联一个匹配电感或者调变压器的漏感让整个驱动回路的等效阻抗在工作频率下呈纯电阻。这个匹配电感的计算并不复杂先测出或查出探头在 40kHz 附近的等效电容 C谐振点匹配电感 L 由公式L 1 / (4π²f²C)算出。比如探头等效电容 2.5nF40kHz 下算出来大约是 6.3mH。如果次级电感量不够可以在次级并联一个电容做谐振补偿同样按谐振公式计算。方波驱动不能直接理解成“只要在谐振频率上就能输出最大声压”。驱动脉冲串的持续时间和重复频率同样影响发射波形。脉冲串太长虽然声压大但盲区会变大因为发射余波还没衰减完接收端没法开始工作脉冲串太短声压又不够。我一般把脉冲串宽度设在 8 到 16 个周期也就是 200 到 400 微秒具体值需要根据实际探头和驱动电压调试确认。2.3 驱动管选型与死区控制选驱动管的时候要注意三个参数耐压、峰值电流、开关速度。变压器初级在关断瞬间会产生反电动势如果不加保护电压尖峰很容易超过三极管的 Vceo 击穿电压。用 MOS 管的话通常需要在集电极或漏极加一个 RC 吸收电路或者用 TVS 管做钳位。我在早期的版本里没加保护连续工作几小时就烧过驱动管后来老老实实加上吸收电路再没出过问题。如果采用推挽驱动结构两个驱动管交替导通必须留出死区时间。死区太短两个管子同时导通会造成电源短路电流猛增死区太长变压器初级电流断续影响升压效率。用 STM32 定时器产生互补 PWM 时硬件上可以直接配置死区时间通常设置在 0.5 到 1 微秒就够用。如果只是用普通 GPIO 翻转电平的方式产生方波注意在软件上保证两个 IO 口的翻转时刻有微小间隔不要同时切换。3. 接收信号链设计3.1 从微伏级信号到数字脉冲接收端是整个电路的难点所在。超声波在空气中衰减很快经过几米距离的传播后接收探头输出的回波信号可能只有几十微伏到几毫伏。要在噪声背景下把这个信号可靠地检测出来接收电路通常分这几级前置放大器 → 带通滤波器 → 可变增益放大器TGC→ 比较器 → 主控输入捕获。这个信号链的设计思路是逐级“提纯”前置放大器把信号放大到便于处理的幅度带通滤波器把 40kHz 附近的信号留下、把其他频段的噪声滤掉自动增益控制解决“近处信号强、远处信号弱”的动态范围问题最后比较器把模拟信号转成数字脉冲。前置放大级是整个接收电路的噪声天花板。第一级放大器的噪声系数决定了整条链路的信噪比所以第一级尽量选低噪声的运放比如 ADA4898 这类低噪声器件。增益不要在第一级拉太高20dB 到 30dB 比较合适太高容易饱和太低则后级噪声贡献占比变大。这里有个容易忽略的细节接收探头和运放之间的连接线要尽可能短而且最好用屏蔽线。探头引线在这个环节相当于一根接收天线环境里的各种电磁干扰都会从这根线上溜进来。3.2 带通滤波器设计值与实现接收信号里的噪声成分很杂工频 50Hz、日光灯镇流器的几十kHz 干扰、电机高速运转产生的宽频噪声、还有各种电磁开关产生的脉冲干扰。用带通滤波器把频率限制在 40kHz 附近一个较窄的频带内是提纯信号最有效的手段。滤波器的中心频率定在 40kHz带宽通常设定为中心频率的 10% 到 20%也就是 4 到 8kHz。带宽太窄通带内的信号衰减会变大而且温度变化导致换能器谐振频率漂移时信号容易被滤掉带宽太宽噪声抑制效果变差。我通常把 Q 值控制在 5 到 10 之间工程上比较均衡。有源二阶带通滤波器是性价比最高的方案一个运放配几个电阻电容就能搞定。用运放的 Sallen-Key 拓扑或者多反馈拓扑都可以。多反馈结构MFB对电阻电容的灵敏度更低稳定性更好对硬件设计来说更友好。设计时可按这个顺序计算先确定中心频率 f0 为 40kHz确定 Q 值取 8再根据你选定的电容值算出电阻值。市面上很多在线滤波器设计工具可以帮你算但算完之后一定自己复核一遍用实际选型电容的标称值重新计算中心频率确认偏差在可接受范围。实际上很多项目的接收电路不会用高阶滤波器而是利用接收换能器本身的窄带特性。压电陶瓷换能器本身就是个高品质因数的带通滤波器中心频率在 40kHz 附近带宽只有几 kHz。这意味着换能器在“转换声压为电压”的同时已经滤掉了大部分带外噪声。电路里的一级低阶滤波其实是做个补充。明白这个逻辑再设计接收电路就不容易走极端堆高阶滤波器了。3.3 可变增益与动态范围问题超声回波有非常宽的动态范围近距离障碍物回波很强甚至能到几百毫伏远端障碍物的回波很弱可能只有几毫伏。如果固定增益近处信号会把放大器推到饱和等放大器恢复线性强信号造成的振铃还会把后续的微弱回波淹没。这就是为什么要做自动增益控制。工程上常用的做法是 STC灵敏度时间控制也就是 TVG 电路——根据发射时刻的远近实时调节接收增益刚发射完的近段时间增益调低随着时间推移增益逐渐升高。这样远端弱信号也能被放大到足够的幅度而近处强信号也不至于饱和。实现方式有模拟的和数字的两种。模拟的做法是用 RC 指数衰减电路控制一个压控增益放大器的增益控制端数字的做法比较简单直接用 DAC 或数字电位器控制运放的反馈电阻。对新手来说用 STM32 的 DAC 输出一个随时间变化的电压去控制 VCA810 或者 PGA 芯片的增益端软件上非常灵活也容易调试。如果没有可变增益电路也有一个折中的妥协办法把接收链路的固定总增益降下来保证最近处的回波刚好不饱和但这样远端回波就会比较弱比较器可能触发不了。也就是说测距范围会被压缩。在 1 米以内的近距离小项目里这个妥协通常没问题低成本方案里可以这么干。3.4 比较器整形与阈值设置回波信号经过放大滤波后还是一个幅值变化的正弦波包络。要把它变成主控能捕获的电平跳变需要用一个比较器。这里有个关键细节比较器如果不加迟滞滞回在信号幅值刚好越过阈值的时候噪声会导致比较器输出反复翻转产生很多毛刺。主控如果把毛刺当成有效回波触发测出的距离就会乱跳。比较器加迟滞的办法很简单在比较器输出端和正输入端之间接一个正反馈电阻就能形成滞回窗口。阈值电压的取值需要综合考虑太高了远端弱回波检不到太低了近处的噪声可能误触发。我一般把阈值设在接收信号链路中间点附近比如接收链路输出最大幅值 3.3V阈值设在 100mV 到 300mV 之间配合 TVG 增益控制可以让最远端的有效回波刚好高出阈值一点点。实际上很多现成的模块会选择用接收探头的第二波特性和比较器触发来做测距。回波不是一束干净的单脉冲而是一个有上升沿和拖尾的包络。如果直接拿比较器输出的第一个上升沿去触发计时测到的往往不是主波前沿而是包络幅度超过阈值的那一点。这会导致在一定信噪比下近距离的目标测距值偏大、远距离的目标测距值偏小。所以要仔细调整阈值和增益找到一个相对准的拐点。4. 主控计时与温度补偿实现4.1 STM32定时器与输入捕获主控部分的计时精度直接决定了测距分辨率。声速约 343 m/s一个来回的距离误差如果控制在 1mm时间测量的误差就要控制在 0.0000029s也就是大约 3 微秒。市面上绝大多数单片机定时器都轻松满足这个量级的要求。我用 STM32 做过多个版本。发射时用定时器的 PWM 输出模式产生 40kHz 方波同时打开另一个定时器做输入捕获等待接收比较器输出的上升沿。回波到达时比较器输出跳变输入捕获自动锁存当前计数值CPU 只需要在中断里读取。这种方式不依赖于中断响应速度计时精度很高。注意盲区问题发射脉冲串本身有长度而且发射探头发射时声波会通过探头外壳和结构件直接传导到接收探头。在这个“直接串扰”的信号没有衰减完之前接收电路如果被它触发了测到的就是障碍物距离非常近的错误值。解决办法是发射结束后等一段时间再开启接收比较器使能这段时间对应最近的测距盲区。比如等待 2ms 再开启接收对应的盲区约为 34cm系统就只能测 34cm 以上的目标。实际上超声波测距模块普遍有 20cm 到 40cm 的盲区就是这个原因。如果你需要测近距离可以优化结构件隔离发射和接收探头的声桥传导并在软件里适当缩短屏蔽时间。4.2 声速温度补偿的计算正常情况下我们取 c 340 m/s 或者 343 m/s 去算距离就够用了但要让测距数据经得起验证还是要做温度补偿。声速与温度的关系在常温附近近似线性的经验公式是c ≈ 331.3 0.606 × T m/sT 是环境温度单位摄氏度。用这个公式算出来20°C 时声速为 343.4 m/s跟精确值非常接近。硬件上只需要加一个 DS18B20 温度传感器或者 NTC 热敏电阻软件上在测距时读取温度按公式修正声速。用 NTC 的话需要先 ADC 采样再查表或算公式得到温度稍微麻烦一点但成本低。有朋友问过湿度对测距有没有影响。严格来说湿度会影响声速但常温下 0% 到 100% 相对湿度造成的声速变化不到 2%一般测距精度要求在厘米级的话可以忽略。风的影响反而比湿度大室外顺风和逆风情况下超声波测距结果偏差会比较明显这个只能通过多次测量取平均值来缓解。4.3 软件滤波与异常值处理即使硬件做得再干净单次测量还是可能因为干扰产生异常值。我习惯在软件里加一个简单的滑动平均滤波连续取 5 到 10 次有效测量结果去掉最大值和最小值剩下的取平均。这种做法在近距离、反射面平整的场景下效果很好可以明显减小数据抖动。还有一个必须处理的情况没有回波。障碍物太远、吸音材料海绵、布艺沙发、人体衣物会把超声波能量大量吸收此时接收端一直等不到回波。主控不能死等要设置超时时间。我一般把超时时间设成 60ms对应大约 10 米的测量范围。超时后上报无效值交由上层逻辑处理。注意超时定时器要够长得大于你期望的最远测量距离对应的声程时间否则会把远端有效回波误判为超时。5. 实测调试与常见问题排查5.1 调试仪器与基本流程硬件调试工具是刚需双通道示波器最好准备一台带宽不用高100MHz 就够用。调试时不光要看发射端波形更重要的是看接收端整个信号链上每个节点的波形。我发现很多新手拿着数字万用表测接收信号那是根本测不出来的因为回波是微秒级的瞬态信号万用表根本没响应。我的调试流程一般是这样的第一步用示波器看发射端探头两侧的波形确认 40kHz 方波干净、幅度足够、无明显振铃。第二步把一个反射板放在探头正前方固定距离比如 1 米用示波器探测接收探头的输出端确认能看到回波信号。这里要留意接收到的信号是一个包络开始很小逐渐变大再衰减下去。第三步逐级检查放大器和滤波器输出端的波形幅度确认链路各级增益正常。第四步确认比较器输出端有干净的方波脉冲并且下降沿或上升沿的位置能随障碍物远近对应变化。5.2 发射余波串扰最常见的“假回波”调试中遇到最频繁的问题就是“近处没障碍物却一直报近距离值”。这个时候要先想到串扰。发射探头的驱动信号是几十上百伏的高压脉冲即使探头本身只在 40kHz 谐振压电陶瓷的瞬态响应也会产生很宽的频谱分量。这些分量可以通过三个途径进入接收链路空间辐射耦合、电源共阻抗耦合、结构固体传导。排查步骤是用示波器观察接收链路的输出但把接收探头从电路上断开。如果断开后输出端还有干扰波形说明干扰是通过电路耦合进来的如果断开后干扰消失接上探头就出现那大概率是通过探头接收到的声学串扰或辐射耦合。发射和接收探头之间装一个隔声片、拉开安装距离、或者在结构上让两者不直接接触都能有效减小串扰。电路上发射驱动电路的电源和接收放大电路一点要分开走线最好各用独立的 LDO 稳压防止发射瞬间的大电流引起地电位跳动。5.3 距离近时而准、远而不准如果你发现近距离测得很准超过一米五左右就开始跳最可能的原因是接收链路增益不足。远距离回波衰减很厉害信号幅度接近噪声水平比较器在噪底上反复触发测距值自然乱跳。处理思路有三个方向提高发射声压升高驱动电压、增加脉冲串长度提升接收链路增益但要小心噪声同步放大改善噪声优化布线、滤波、屏蔽。另外一个容易被忽略的点是发射探头的驱动脉冲串长度对不同距离的影响。脉冲串越长发射能量越集中在 40kHz回波包络越“锐利”远端信号检测能力越强。但是脉冲串过长也会让近距离目标的回波和发射串扰波形重叠导致盲区增大。所以要平衡。我一般先固定 10 个周期的发射脉冲串再看实际效果远端不够就往上加盲区变大就往下减通过实验找这个平衡点。5.4 温度影响与环境干扰夏天和冬天测量同一面墙如果程序里用的是固定 343 m/s 的声速数据对比会差出几个厘米这是正常的物理现象不是机器坏了。加温度补偿后这个偏差可以缩小到毫米级。注意温度传感器要尽量放在靠近探头的流通空气位置不要贴在主控芯片附近否则长时间运行后测的是板温而不是环境温度。工业环境里的超声干扰也要留意。现在很多工厂里有用超声波清洗机、超声波焊接设备它们的频率往往不在 40kHz 附近但产生的噪声频谱很宽还是可能对被测回波造成干扰。此时可以在软件里增加“时间窗口”验证只在预期回波到达的时间窗口内打开比较器检测窗口之外的信号一律忽略。这样即使干扰幅度超过阈值只要它不在预期时刻也不会被当成有效回波。5.5 常见问题速查表现象可能原因排查与处理完全无回波发射驱动电压太低、探头损坏、接收链路增益不足示波器查发射波形、探头输出锁定失效级近距离“假回波”发射串扰、电源耦合、结构传导断开探头对比测试隔离结构、分电源走线数据跳动大比较器无迟滞、阈值过低、噪声过大增加迟滞电阻、提高阈值、优化滤波远距离测不到增益不足、脉冲串太短、方向性偏了增大驱动电压、增加脉冲串长度、调整探头朝向温度漂移误差未加温度补偿或传感器位置不当加 DS18B20声速按公式修正盲区过大直接串扰信号持续时间太长优化结构隔离、缩短脉冲串、软件屏蔽时间调短6. 实测数据与参数记录心得做超声波测距成功的标准不是“能测到”而是“测到的数可复现、可信”。不要只记录一个距离下的测量值要把多个距离下的实际值、误差值、环境温度、发射脉宽、增益设置都记成一个表格。这个表在你改版调参的时候非常有价值。我自己的项目中在做好结构隔离、加温度补偿、调好 TVG 参数后用 10 个周期的发射脉冲串实测在 30cm 到 4m 范围内误差能控制在 ±1cm 以内4m 到 6m 范围误差会扩大到 ±2cm 左右主要受风力影响。这个数据在同级别方案里已经算表现不错了。之前的版本没有做结构隔离50cm 以内基本没法用数据全是乱的。对照这些记录再回头调参数效率高很多。这里单独提醒一个很多人忽略的细节探头的朝向和反射面的角度对测量结果影响极大。超声波探头本身有指向性发射能量集中在正前方的一个锥形区域里接收同样有方向性。反射面如果是光滑硬表面且与声束垂直回波最强如果是斜面声波会反射到别的方向去接收端可能完全收不到回波。所以实际项目里探头的安装角度、被测物的表面性质要与电路参数放在一起综合考虑。7. 总结之外几个沿用至今的设计习惯最后分享几个我从这个项目里沉淀下来、后来做其他模拟前端电路也一直在用的习惯。第一接收信号链的第一级永远是噪声控制的重心低噪声运放的选型、走线、参考地处理再怎么认真都不为过。第二有升压变压器的电路必须加吸收电路别让开关管的尖峰电压值逼近器件耐压极限。第三调试模拟电路示波器是两个通道起步有条件上四个通道同时看发射驱动、接收前置放大输出、滤波输出、比较器输出你才能看清楚信号是怎么一步步变化的。第四所有电路参数调整后一定要重新测一组完整数据并记录不要靠感觉判断“好像变好了”。超声波测距电路看上去是一个入门级的模拟电路项目但真正把它做稳定涉及的已经远不止“会算公式”。噪声、阻抗匹配、地回路、结构声学隔离、温度物理特性每一个维度都要照顾到。正因为如此这个项目特别适合做模拟电路基本功练习。有人问我“推荐第一个硬件项目做什么”我一般会建议先做这个——它不复杂但足够让你把示波器用熟也足够让你体会真实世界里的信号永远要比教科书里的波形复杂得多。