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,问题才解决。所以,设计前一定先算好波长!

波束控制的另一个维度是聚焦。通过调整各阵元的延时,让波束在某个距离上汇聚。这有点像相机的自动对焦。聚焦能提高该距离上的分辨率,但会牺牲其他距离的性能。

我一般这样设计发射策略:

  1. 搜索模式:宽波束发射,覆盖大范围,快速检测目标是否存在。
  2. 跟踪模式:窄波束发射,精确对准目标,提高测距精度。
  3. 扫描模式:波束逐角度扫描,构建环境地图。

这三种模式,通过修改PWM的延时参数就能切换,非常灵活。

3.4 本章知识体系

下面这张图,把发射部分的核心逻辑串起来了:

超声波发射系统知识体系 MCU定时器 互补PWM 死区控制 半桥驱动 匹配网络 超声波换能器 波束控制参数 阵元间距 d d ≤ λ/2 避免栅瓣 延时 Δt Δt = d·sin(θ)/c 发射模式 搜索/跟踪/扫描 核心目标:产生高压正弦波 → 精确控制发射方向 → 实现多模式扫描 关键参数:谐振频率40kHz | 驱动电压12-24V | 阵元间距≤8.5mm

这张图把发射系统的三个核心模块串起来了:MCU生成PWM,驱动电路放大,换能器发射。下半部分则是波束控制的三个关键参数。你照着这个框架去设计,基本不会跑偏。

好了,发射部分就讲这么多。记住一句话:发射是定位的基础,发射做不好,后面接收和处理全是白搭。我见过太多人花大把时间优化算法,结果发射电路没调好,信号都出不去,算法再牛也没用。

本章小结

  • 发射电路用半桥驱动,电压12-24V,注意匹配网络和死区时间
  • PWM用互补输出,中心对齐模式,占空比30%-50%
  • 波束控制靠延时,阵元间距必须≤半波长
  • 三种发射模式:搜索、跟踪、扫描,灵活切换

专注资料整理