3. 信号发射:超声波发射电路设计、驱动信号生成(PWM)、发射角度与波束控制
好,咱们进入第三讲。信号发射这块,说白了就是怎么让超声波探头“喊”出去,还得喊得准、喊得远。
我个人习惯把发射电路比作一个“大力士”——它得把微弱的电信号,放大到足以推动压电陶瓷振动的程度。你想想看,MCU的GPIO口输出个3.3V,能干啥?啥也干不了。所以,驱动电路是第一步。
3.1 超声波发射电路设计
常见的发射电路,核心就是一个半桥或全桥驱动。我早期做项目时,图省事直接用三极管搭了个单管驱动,结果发射距离死活上不去。后来换成专用的MOSFET半桥,效果立竿见影。
这里给出一个典型的电路结构:
MCU PWM输出 → 电平转换/隔离 → 半桥驱动器 → 匹配网络 → 超声波换能器
几个关键点:
- 驱动电压:一般需要12V~24V。电压越高,发射功率越大,但换能器也有耐压限制。我常用的40kHz换能器,标称耐压20Vpp,我一般给到18V左右,留点余量。
- 匹配网络:换能器在谐振频率附近呈容性,需要串联一个电感来抵消容抗。这个电感值怎么算?公式很简单:
L = 1 / ( (2πf)² × C )。f是谐振频率,C是换能器静态电容。我在项目中遇到过匹配没做好,发射效率低一半的情况,后来用阻抗分析仪扫了一遍才找到最佳点。 - 隔离:驱动电路的高压部分,最好和MCU低压部分用光耦或磁耦隔离开。不是为了别的,就怕哪天炸管子,高压窜回MCU,整个板子就废了。
核心要点:发射电路的设计目标,就是让换能器两端获得尽可能大的、纯净的正弦波电压。方波驱动虽然简单,但谐波多,效率低。我建议用PWM生成方波,再通过LC滤波变成正弦波。
3.2 驱动信号生成(PWM)
驱动信号怎么来?当然是用MCU的定时器输出PWM。这里有个小技巧:用两个PWM通道,相位相差180度,分别驱动半桥的上下管。这样就能在换能器两端得到幅值翻倍的电压。
以STM32为例,配置一个定时器输出互补PWM:
// 伪代码示例
TIM_HandleTypeDef htim1;
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0; // 不分频
htim1.Init.Period = 200; // 72MHz / 200 = 360kHz? 不对,这是为了得到40kHz
// 等等,这里要算清楚:72MHz / (200+1) / 2 = 179.1kHz,不对
// 正确配置:Period = 72MHz / 40kHz / 2 - 1 = 899
htim1.Init.Period = 899; // 得到40kHz
htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1; // 中心对齐模式
// 配置通道1和通道1N为互补输出
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 450; // 50%占空比
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
嗯,这里要注意:死区时间。上下管切换时,必须留一点时间让一个管子完全关断,另一个再开通。否则上下管直通,瞬间短路烧管子。我一般设1~2微秒的死区,对于40kHz来说足够了。
经验之谈:PWM的占空比不一定要50%。有时候为了调整发射功率,我会把占空比降到30%~40%。但别低于20%,否则驱动能力下降太多,换能器振不起来。
3.3 发射角度与波束控制
好了,信号发出去了。但怎么让它往特定方向走?这就涉及到波束控制。
单个换能器的波束角是固定的,一般是40°~80°。想改变方向?得用相控阵。说白了,就是多个换能器排成一排,每个的发射时间错开一点点。这个时间差,就决定了波束的偏转角度。
公式很简单:
延时 Δt = d × sin(θ) / c
其中d是阵元间距,θ是目标偏转角,c是声速(340m/s)。
举个例子:假设阵元间距d=8.5mm(半波长),想让波束偏转30°,那么延时:
Δt = 0.0085 × sin(30°) / 340 ≈ 12.5微秒
这个延时,用MCU的定时器就能精确产生。我做过一个8阵元的相控阵,每个通道独立延时,效果还不错。
但要注意:栅瓣问题。阵元间距如果大于半波长,就会出现多余的波束,干扰定位。我刚开始没注意这个,结果测出来的角度全是错的。后来查资料才明白,阵元间距必须≤λ/2。
避坑指南:我曾经在阵元间距上吃过亏。当时为了省事,用了现成的换能器阵列,间距是10mm。结果40kHz的波长是8.5mm,间距大于半波长,栅瓣严重。后来重新画了PCB,把间距改成8mm,问题才解决。所以,设计前一定先算好波长!
波束控制的另一个维度是聚焦。通过调整各阵元的延时,让波束在某个距离上汇聚。这有点像相机的自动对焦。聚焦能提高该距离上的分辨率,但会牺牲其他距离的性能。
我一般这样设计发射策略:
- 搜索模式:宽波束发射,覆盖大范围,快速检测目标是否存在。
- 跟踪模式:窄波束发射,精确对准目标,提高测距精度。
- 扫描模式:波束逐角度扫描,构建环境地图。
这三种模式,通过修改PWM的延时参数就能切换,非常灵活。
3.4 本章知识体系
下面这张图,把发射部分的核心逻辑串起来了:
这张图把发射系统的三个核心模块串起来了:MCU生成PWM,驱动电路放大,换能器发射。下半部分则是波束控制的三个关键参数。你照着这个框架去设计,基本不会跑偏。
好了,发射部分就讲这么多。记住一句话:发射是定位的基础,发射做不好,后面接收和处理全是白搭。我见过太多人花大把时间优化算法,结果发射电路没调好,信号都出不去,算法再牛也没用。
本章小结:
- 发射电路用半桥驱动,电压12-24V,注意匹配网络和死区时间
- PWM用互补输出,中心对齐模式,占空比30%-50%
- 波束控制靠延时,阵元间距必须≤半波长
- 三种发射模式:搜索、跟踪、扫描,灵活切换