简介:这份PDF文档聚焦40千赫兹超声波收发电路的实用设计,面向电子爱好者、硬件工程师以及电子设计竞赛参赛者,帮助读者快速了解多种驱动与接收方案。文档共整理了七种不同的电路实现方式,包括五种发射电路和两种接收电路;发射部分分别采用门振荡器、晶体管强反馈振荡器、正反馈谐振电路、CC4011逻辑门和LM555时基电路,接收部分则给出双稳态和单稳式两种设计方案。每种电路都附有原理分析、元器件参数、工作电压电流、调试要点以及适用场景,例如双稳态接收机可满足电器遥控开关需求,单稳式接收机则可用于摄像机快门或玩具控制。资源包为单份PDF文件,体积仅2.13MB,内容却相当浓缩,已有462人浏览学习。对于需要比较不同超声波收发拓扑并直接动手制作的开发者,这份文档能节省大量查阅时间,具备较好的选型参考和实操指导价值。
1. 40kHz超声波收发电路,为什么值得聊七种方案
40kHz这个频点,在空气超声里几乎是统治级的存在。测距、避障、液位、流量计、倒车雷达,绝大多数量产方案都落在38k到42k之间。原因不复杂:频率再低,波长变大,分辨率下来,而且换能器体积跟着变大;频率再高,空气衰减指数级上升,几米之外信号就压进噪声底。40kHz刚好是分辨率、衰减、器件成本三条曲线的交点。
标题里的“七种方式”,工程上一般指发送驱动、接收调理、收发切换这三块的组合方案。发送端有自激振荡、专用驱动芯片、分立半桥三种典型做法,接收端有直接放大、带通滤波整形、锁相环解调、ADC数字解调四种常见路子。三乘四当然不止七种,但把收发隔离和单双探头因素算进去,常被拿出来对比的成熟组合大约就是七种。这篇就按发送、接收、联调、参数、验证的顺序,把每种方案的结构、适用场景和坑位讲清楚。
2. 发送端驱动:三种拓扑决定发射功率和电路成本
发送电路的本质,是给换能器提供一个接近其谐振频率的交流激励,幅度决定声压,频率决定效率。40kHz换能器等效模型是一个RLC串联谐振支路并联静态电容,谐振阻抗通常在几百欧到一两千欧,静态电容在2nF到4nF之间。驱动电路要做的,就是在谐振点附近给出足够电压摆幅,同时尽量让能量在谐振频率上集中。
2.1 自激振荡驱动:三极管和门电路的最小系统
最省成本的发送电路是自激振荡。用两个三极管加一个LC选频网络,或者用一个反相器加晶体/陶瓷振子构成皮尔斯振荡器,直接产生40kHz方波或近似正弦波驱动换能器。
// 伪代码:用定时器产生40kHz方波,占空比50%,驱动MOSFET // 假设MCU主频16MHz,定时器预分频8,则计数周期=8/16MHz=0.5us // 40kHz周期25us,半周期12.5us,需要计数25次 void pwm_40khz_init(void) { TCCR1A = (1 << WGM11); // 相位修正PWM模式 TCCR1B = (1 << WGM13) | (1 << CS11); // 预分频8 ICR1 = 50; // 周期= (50+1)*0.5us = 25.5us 约39.2kHz OCR1A = 25; // 占空比50% DDRB |= (1 << PB1); // OC1A引脚输出 }这段配置的要点是周期用ICR1限定,占空比用OCR1A调整。实测中40kHz换能器的谐振点会有个体差异,批量生产时建议把周期做成可在39.5kHz到40.5kHz之间微调,做法是预留一个EEPROM变量去改ICR1值,而不是直接把频率焊死在40kHz。
自激振荡的优点是成本极低、元件少,缺点是频率稳定度差。三极管自激电路在温度变化时,LC选频网络参数会漂移,发射频率可能偏出换能器带宽。换能器的-3dB带宽通常在±1kHz到±2kHz,如果振荡频率偏到41kHz以上,声压可能掉一半。所以自激方案适合对测距精度要求不高的接近开关、自动水龙头这类场景。
2.2 专用驱动芯片:TC4426类MOSFET驱动的工程做法
要提升发射功率,常见做法是用MCU产生PWM,再经过MOSFET驱动芯片升流后驱动换能器。40kHz频率很低,对驱动芯片的开关速度要求不高,反而要注意的是峰值电流能力和上电时序。
TC4426是双通道反相驱动器,输入兼容TTL,峰值输出电流1.5A,工作电压4.5V到18V。用一片TC4426驱动单端换能器,电路结构是MCU的PWM引脚直接进驱动器输入,输出经过一个几欧到几十欧的电阻限流后接换能器一端,换能器另一端接电源中点或直接到地。
发送端BOM参考(单通道): - U1: TC4426或TC4427(正相/反相按需选) - R1: 10Ω 限流电阻 - C1: 100nF 电源去耦电容 - C2: 10uF 电解电容,靠近驱动芯片 - L1: 建议预留,8.2mH到15mH,用于并联谐振提升波形质量这里最容易被忽略的是限流电阻的作用。很多人以为驱动芯片输出直接推换能器就行,结果静态电容在边沿时刻的充放电电流过大,产生振铃,还可能干扰MCU的ADC。加10Ω电阻后,边沿变缓,辐射噪声下降,而40kHz基波的能量几乎不受影响。
如果追求更高的发射声压,可以把两个驱动通道并联,或者采用BTL(桥式负载)接法。BTL接法下,换能器两端得到的是反相的两路驱动信号,电压摆幅加倍,声压约提升6dB。代价是电路多一路反相器,且需要严格控制两路的死区时间,否则在切换瞬间出现直通短路。
2.3 分立半桥和变压器升压:长距离测距的发射方案
反射测距超过5米时,单端驱动往往不够。两个办法:一是提高供电电压到12V或24V,但换能器额定电压一般不超过20Vpp,需要做限幅;二是用变压器升压,把MCU侧的5V或3.3V PWM升到20V以上去激励换能器。
变压器方案的典型接法是用初级中心抽头推挽结构。两个MOSFET交替导通,初级线圈两端分别接地,中心抽头接电源,次级输出经过匹配电感接换能器。这个匹配电感不是滤波用的,它的目的是和换能器的静态电容在40kHz处形成并联谐振,让换能器两端电压抬高,从而提升发射声压。
推挽驱动的死区控制比BTL更严格,因为初级绕组没有电阻限流,直通瞬间电流可能烧毁MOSFET。工程上建议在MCU的PWM外设里直接配置死区插入,而不是在中断里用延时去凑。多数MCU的定时器支持互补PWM输出和死区寄存器,把死区设在200ns到500ns比较合适。频率40kHz对应周期25us,500ns死区只占2%,对波形畸变的影响几乎可以忽略。
分立半桥方案的另一个好处是可以通过改电源电压来调节发射功率,这比改PWM占空比更直接。但要注意半桥电路里的上管需要自举电容驱动,启动瞬间自举电容充电不足,第一二个脉冲会异常,这个问题在连续波发射时不存在,只在burst模式第一次发射时出现。解决办法是在发送前先让半桥空载跑几十个周期再接入换能器,或者加一个启动延时。
3. 接收端调理:从直接放大到数字解调的四种路径
接收电路的任务是把换能器输出的微弱电信号放大、滤波、检出回波。40kHz回波信号幅度范围很大,近距离强反射可能到几百毫伏,远距离弱回波只有几毫伏甚至几百微伏,动态范围超过60dB。调理电路的核心指标是灵敏度、带宽和抗干扰能力,四类方案对应不同取舍。
3.1 直接放大加比较器整形:最经典的双运放方案
最常见的接收电路如图所示的信号链:换能器输出接第一级同相放大,增益20到40dB;第二级带通滤波放大,中心频率40kHz,增益再20到40dB;最后接比较器,输出数字脉冲给MCU计时。
接收链路参数表: - C1: 1nF,隔直电容,截止频率约16kHz - R1/R2: 10kΩ/100kΩ,第一级增益11倍(约20.8dB) - R3: 10kΩ,与C2、C3构成二阶带通 - C2=C3=330pF,中心频率 f0 = 1/(2π·R3·C2·√(1+q)) - R4/R5: 10kΩ/100kΩ,第二级增益11倍 - U2A/U2B: LMV358或TLV2372等轨到轨运放两级加起来约42dB,对40kHz回波足够了。关键设计点是运放的带宽增益积(GBW)不能只看静态,要算40kHz下的闭环增益。TLV2372的GBW是3MHz,增益11倍时闭环带宽约270kHz,远大于40kHz,没问题。如果选GBW只有1MHz的运放,两级级联后高频端会明显衰减,40kHz刚好在滚降区,回波波形畸变严重。
比较器的阈值设置也决定了测距的极限。固定阈值简单,但近处强回波和远处弱回波用同一阈值,远距离回波会被漏检。常见做法是把阈值设成可调,比如用MCU的DAC输出一个电压接比较器反相端,软件在发射后头几百微秒内把阈值抬高,之后再降下来,这就是后文要说的STC增益控制的基础版。
3.2 锁相环解调方案:窄带跟踪提升信噪比
当环境中存在固定频率干扰,比如40kHz附近的电机噪声或其它超声源时,直接放大方案容易误触发。这时可以用锁相环做窄带跟踪,只锁定40kHz附近的能量变化,而不是看时域波形的幅值。
CD4046是经典的PLL芯片,VCO中心频率用外部电阻电容设定在40kHz,输入信号与VCO输出在相位比较器里作比较。当换能器上没有回波信号时,PLL自由振荡;回波到达时,输入信号注入锁定,相位比较器输出一个偏差电压,反推回波是否存在。
工程上CD4046方案调试重点是VCO的频率锁定范围。R1、C1决定中心频率,R2决定锁定范围,典型做法是把锁定范围控制在±2kHz以内,太大则噪声敏感性上升,太小则换能器个体差异导致锁不住。调试方法是先不接换能器,用信号发生器给40kHz正弦波,调R1看PLL输出是否锁定,再缓慢偏移频率到42kHz,确认输出能跟随。
但说实话,CD4046的锁定时间在毫秒级,而40kHz超声波飞行时间测量要求微秒级响应,PLL解调并不适合做精密测距,它更适合做连续性检测,比如有没有物体持续出现在探测区内。这也是很多存在性检测传感器内部用PLL的原因。
3.3 运放加模拟乘法器:做真正的相干解调
如果要同时保留窄带抗干扰和快速响应特点,可以用模拟乘法器做相干解调。发送脉冲串时,同步产生一个40kHz参考信号,与接收信号相乘,再经低通滤波取出基带包络。因为参考信号与发射信号严格同频同相,非40kHz成分在乘法后会被推高到载波频率附近,被低通滤除。
// 相干解调的软件实现(MCU内置ADC+定时器) // 假设接收信号经过一级放大后进ADC,采样率160kHz static int32_t demod_i = 0, demod_q = 0; void adc_isr(uint16_t sample) { static uint16_t n = 0; int8_t sin_tab[8] = {0, 127, 127, 0, -127, -127, 0, 0}; int8_t cos_tab[8] = {127, 0, -127, -127, 0, 127, 127, 0}; if (n < 8) { demod_i += (int32_t)sample * sin_tab[n]; demod_q += (int32_t)sample * cos_tab[n]; } n = (n + 1) & 0x07; // 8个采样点对应一个40kHz周期 // 包络幅度 = sqrt(demod_i^2 + demod_q^2) }这段代码每8个采样点完成一个周期的I/Q积分。160kHz采样率下,40kHz正弦波每周期采4个点,为了做正交解调,把采样率提高到160kHz,每周期采4个点,I路和Q路相位错开90度,分别与采样值相乘累加。
实际项目中模拟乘法器用AD633之类的芯片成本偏高,现在多数MCU带ADC和DMA,直接在软件里做正交解调更划算。回路里只需要一级低增益放大,把信号幅值抬到ADC的有效量程内,后续靠数字域的窄带滤波提升信噪比。
3.4 高速ADC直接采样加数字带通滤波:灵活但吃算力
最后一种接收方案是信号经过简单的固定增益放大后,直接进高速ADC采样,然后在DSP或MCU里做完整的数字信号处理。采样率一般取160kHz到200kHz,每周期采4到5个点,足以恢复信号包络。
数字域的带通滤波器可以用二阶IIR实现,中心频率40kHz,Q值约10。要注意IIR滤波器在定点MCU上的实现容易出现极限环振荡,输入信号很小时输出不为零。解决方法是滤波后加一个阈值判断,输出去掉DC偏置,或者直接改用FIR滤波器。FIR在40kHz带宽下的阶数大约需要64到128阶,在Cortex-M4级别的MCU上跑没问题,但8位MCU帧率会明显掉下来。
数字方案的真正优势在于可以后处理。你可以把一整段回波存下来,做多次平均、互相关、甚至是机器学习分类。近两年有些测距模组开始把接收波形上传给上位机分析,就是这条路。代价是功耗和成本上升,通常只出现在高端仪表和工业传感器里。
4. 收发联动:单探头还是双探头决定整个电路拓扑
发送和接收电路分别定下来之后,需要考虑两者怎么配合。常见有两种物理结构:一是收发分离双探头,二是单探头收发一体,通过切换电路分时工作。两种结构在电路拓扑上差别巨大。
4.1 双探头方案:收发独立,电路简单但要防串扰
双探头方案发送和接收各用一只换能器,两者在结构上分开一定距离,发送时接收电路不必断开,直接等回波。这样做的好处是接收链路可以保持高增益,不需要为发射高压做钳位保护,电路最简单。
工程上要注意的是声学串扰。发送探头的声波除了向前传播,还会沿外壳结构振动传到接收探头,形成“直通信号”。这个信号幅值通常远大于真正的回波,而且在发射后立即出现。处理办法是在接收电路前端加一个可编程增益放大器,在发射期间把增益拉到最低,发射结束后再恢复到正常值。这实际上就是STC曲线,后面第5章会细讲。
双探头方案的另一常见问题是两只换能器的频率特性不一致。发送探头在40kHz发射效率高,接收探头的最佳灵敏度频率可能偏了500Hz到1kHz。选型时要要求供应商配对,或自己在软件里做频率补偿。
4.2 单探头方案:收发共用一只换能器的隔离电路
单探头方案只用一只换能器,但必须解决发送时的高压脉冲串进接收电路的问题。典型做法是用模拟开关隔离接收端,发送期间把接收链路输入端短路到地或悬空。
单探头切换电路关键器件: - U1: 模拟开关,如TS5A23157或SGM3001 - D1/D2: 双二极管BAV99,钳位保护 - R1: 10kΩ 隔离电阻,放在换能器与接收放大之间 - C1: 1nF 隔直电容,防止发送直流分量进入接收发送时MCU的GPIO控制模拟开关断开,接收放大器的输入端通过R1和钳位二极管限幅,避免被发送信号打坏。发送结束后延时一个短暂时间再闭合开关,这个延时内的信号就丢失了,直接表现为盲区。
单探头电路的盲区理论上等于发送脉宽加切换时间加换能器余振时间。40kHz发送8个周期约200微秒,切换时间约1微秒,换能器余振时间约300到600微秒,总盲区约0.5到1毫秒,对应距离17到34厘米。如果应用要求近距离也能测,就要缩短发送脉宽并用余振更小的换能器。
收发切换控制信号必须和发送PWM严格同步。工程上常见错误是软件里用两条独立的GPIO控制发送和切换,结果时序漂移,发送还没结束接收就打开了,瞬间烧坏运放输入。稳妥做法是用定时器通道同时输出两路PWM,两路之间用比较寄存器精确控制相位差,这样硬件保证时序而不依赖软件调度。
4.3 自发自收方案:软件同步和回波首达时刻
无论是双探头还是单探头,回波计时都是同一个原理:在发射脉冲串的最后一个周期结束时刻,启动计时器;接收通道检测到回波包络越过阈值时,停止计时。时间乘以声速344m/s,得到往返距离,再除以2就是单程距离。
这里的计时起点值得商榷。有些人从第一个脉冲的上升沿计时,但从实际波形看,换能器从MCU发出PWM到真正激发出声波,中间有建立时间,尤其是有匹配电感时,波形从0建立到稳定幅度需要几个周期。按最后一个脉冲计时更准,因为此时驱动已经稳定,且回波包络的峰值点相对明确。
软件同步的代码顺序是先发PWM,同时在PWM结束中断里打开接收比较器中断,然后在一段时间窗口内等待回波。窗口长度由最大量程决定,比如10米量程往返约58毫秒,定时器就设置58毫秒的超时。
5. 增益、阈值和量程:三个必调的参数及标定顺序
收发电路能正常工作只是第一步,真正决定性能的是三个参数:接收增益、回波检测阈值和发射脉宽。三个参数互相耦合,调参顺序不对会让问题看起来像硬件故障。
5.1 STC增益曲线设计
固定增益的接收电路无法同时兼顾近距离和远距离。近距离强回波会让放大器饱和,远距离弱回波又可能检不出来。工程上常用STC(Sensitivity Time Control),即灵敏度时间控制:发射期间到近场结束这段时间压低增益,然后逐步恢复到最大增益。
STC曲线的典型设置(10米量程实例): - t=0ms(发射开始): 增益-20dB,衰减30dB - t=2ms(距离约0.34m): 增益恢复到0dB - t=10ms(距离约1.7m): 增益恢复到+20dB - t=30ms(距离约5.2m): 增益恢复到+40dB(最大值) - 恢复曲线采用分段线性或指数曲线如果要自己做,最简单的是在接收放大器的反馈回路里并联一个光耦或JFET作为压控电阻,用MCU的DAC输出控制栅极电压来改增益。JFET的缺点是温漂大、批次差异大,工业品里通常用数字电位器替代,配合固定增益的放大级做粗调细调。
另一个更实用的做法是把STC简化成两档:近距离档和远距离档。用比较器判断回波发生时刻,如果回波在前1毫秒内出现,说明目标在35厘米以内,信号肯定很强,接收增益就不需要太高;超过1毫秒,则立即把增益从低切到高。两档切换的电路用一只GPIO加一个MOSFET短接放大器的负反馈电阻就能实现。
5.2 回波检测阈值:自适应阈值还是固定阈值
阈值设低了容易被噪声误触发,设高了就测不到远端弱回波。固定阈值只能覆盖有限动态范围,自适应阈值是更可靠的方案。
自适应阈值的常见实现是“浮动比较基线”。在发射前采一屏噪声底,计算噪声RMS值,阈值设为噪声RMS的N倍,N取3到5之间。噪声底会随着电源电压和环境温度变化,每次发射前重新采一次基线,比固定阈值更鲁棒。
在代码里实现时要小心噪声RMS对强干扰的敏感性。如果环境里有一阵突发噪声比如附近设备开关机,其幅值远大于观测窗口内的平均噪声,直接用RMS做基线会让阈值抬得太高,导致接下来几百毫秒内漏检。改进办法是取噪声样本的90%分位数而不是RMS,用排序统计来抵抗离群值。
// 自适应阈值的分段处理流程 float baseline = get_noise_percentile(0.9f); // 取90%分位数 float threshold = baseline * 3.0f; if (amplitude > threshold) { // 记录当前时间戳作为回波首达时刻 uint32_t drift_time = get_timer_ticks(); trigger_capture(drift_time); }5.3 发送脉宽与盲区、分辨率的三角关系
发送脉宽直接影响三个指标:盲区长度、距离分辨率、回波信噪比。脉宽越大,发射波能量越高,回波越高,但盲区越大,而且回波包络被拉宽,影响首达时刻的判读精度。
40kHz换能器做测距时,发送8到16个周期是常见区间。8个周期对应200微秒,声波传播距离约6.9厘米,往返13.8厘米,因此理论盲区至少7厘米,加上换能器余振实际约20厘米以上。16个周期盲区翻倍,但回波信噪比提升约6dB。
对近距离测量需求强的应用,我一般建议发送脉宽缩短到4到6个周期,同时在接收端用高Q值带通滤波来弥补灵敏度损失。如果盲区和信噪比都顾不过来,就考虑换用双探头结构,至少在电路上不需要为切换留缓冲时间。
5.4 频率校准:每一台都该做的出厂步骤
很多开发者在样机阶段把发射频率固定成40kHz就完事了,但换能器的实际谐振频率每只都略有不同。出厂时让MCU做一次freq sweep:发射39kHz到41kHz之间的若干个频点,每个频点发射相同脉宽,然后测量回波幅值最大点对应的频率,写入存储区。这个校准过程在产线上用一块反射板就能完成。
如果产品硬件上没有可调参数,也可以在软件里做接收端补偿。接收时用I/Q解调,输出信号的相位信息可以反推频率偏移,再对幅值做修正。这个方法不需要产线校准,但只能在固定一个频点发射的前提下做,效果有限。
6. 验证手段:测距精度、盲区测量和波形检查的质量方法
完成电路设计和调参之后,需要一套可以快速复现的验证方法。这套方法的目的不是验证电路能否工作,而是量化每个指标,让后续改版有对比参考。
6.1 盲区测量方法
盲区在示波器上不好直接观察,因为回波波形淹没在余振里。实用做法是用一块高反射率的小反射板放在换能器前方,从很近的距离开始逐步后移,每次移动1厘米,记录能否检测到回波。测到第一个可稳定检测的位置,减去换能器表面到探头外壳的距离,就是实际盲区。
按这个流程做的数据可以整理成一张表,边距和实测检出情况如下:
| 反射板距离(cm) | 回波幅值(mVpp) | 是否检出 |
|---|---|---|
| 10 | 320 | 是 |
| 15 | 450 | 是 |
| 20 | 510 | 是 |
| 25 | 480 | 边缘 |
| 30 | 420 | 否(余振干扰) |
这个例子表明盲区在25厘米附近。判断“边缘”的方法是连续测10次,检出率低于80%就算临界。
6.2 距离精度校准:用标准反射面做回归
用一块平整的金属板或木板放在换能器正前方,用激光测距仪或钢卷尺量出真实距离,再用超声波测距系统测量记录。从20厘米到5米取10个以上点位,每个点位测50次取均值,和真实距离做比较。
误差表现通常是两部分:固定误差和比例误差。固定误差来自计时起点不准和换能器安装深度,比例误差来自声速假设。空气声速在0°C时331m/s,40°C时354m/s,20°C时343m/s,如果不做温度补偿,温差20度能带来约3%的测量偏差,在5米距离上就是15厘米。
温度补偿不是直接把环境温度代入声速公式那么简单。温度传感器放在电路板上测的是板温,不是换能器附近的气温,两者之间可能差好几度。正确做法是在结构设计时把温度传感器贴近换能器安装,或者用两个温度点做两点校正。
6.3 接收电路饱和检查
回波信号放大后是否会削顶,direct影响计时精度。用示波器探头接接收放大器的输出,在1米距离处用强反射面测,观察波形顶部是否平顶。如果出现削顶,说明增益过高,距离近时接收放大器进入饱和,回波包络的峰值被削平,首达时刻的过零检测位置会往后偏。
检查结果后有两种修法:一是把第一级增益降低,把动态范围预算让出来;二是把STC的前段压低得更狠。两条路本质是一样的,都是把近距离强信号的放大倍数压下来。
6.4 用采集板做批量一致性抽验
量产时每台都测全距离曲线太费时,实际做法是抽一台做全量程精度测试,其余只测两个固定点位:近点50厘米,远点3米。两点的偏差如果都在规格范围内,就认为电路整体调试正常。
两个固定点位的选择也有一点讲究:50厘米处的回波信噪比足够高,主要验证计时和阈值逻辑;3米处的回波已经比较弱,主要验证接收灵敏度和STC增益是否正常。两个点位能覆盖90%以上可能的电路问题,比单一远点或单一近点更可靠。
最后收尾提一个技巧:验证时不要直接看示波器上的波形幅值作为判断标准,每次测量前先用标准反射面记录一次参考回波幅值,所有后续测量都相对于这个参考值归一化。这样环境温湿度、电源电压波动导致的影响被抵消,你在对比不同批次电路板时,看到的差异才真正来自电路本身。
本文还有配套的精品资源,点击获取