issue #30 » 28kHz超声信号软硬结合滤波方案.md
28kHz 超声信号直流采样 — 软硬结合滤波方案
信号源:0~3.3V 方波,50% 占空比,28kHz 载波(T ≈ 35.7μs)
后级 MCU:STM32F407VET6(Cortex-M4F @ 168MHz,无 GPU)
设计目标:单边纹波率 < 0.5%(Vpp/2/VDC),量产友好
一、方案架构
方波信号源 → [RC 硬件滤波] → STM32F407 ADC → [DMA + 软件滤波] → 闭环控制
28kHz 3.9kΩ+100nF 直连(无运放) 去极值均值
fc≈402Hz
核心思路:硬件 RC 滤波压低载波纹波到 ~2%,软件滤波在 F407 内部进一步压制到 < 0.5%,兼顾响应速度与采样精度,无需精密器件。
与传统方案对比
| 对比项 | 纯硬件 RC(深滤波) | 纯软件方案 | 本方案(RC + 软件) |
|---|---|---|---|
| 硬件截止频率 | ~200Hz,响应慢 | 无/极轻 | 402Hz,响应适中 |
| 软件滤波 | 无 | 全靠 CPU | F407 CPU 轻量处理 |
| 总纹波衰减 | -43dB | -15dB | -49~52dB |
| 响应速度 | 慢(τ≈20T) | 快 | τ≈10.9T,提升 1 倍 |
| 运放跟随器 | 需要 | — | 不需要(56 周期采样) |
| CPU 占用 | 0% | 高 | ~9% |
二、硬件 RC 滤波设计
2.1 电路结构
信号源 ──R──┬──→ ADC输入
3.9kΩ │
C = 100nF
│
GND
2.2 元件选型
| 元件 | 型号/规格 | 说明 |
|---|---|---|
| R | 3.9kΩ(E24 标准电阻) | 通用量产器件,无采购门槛 |
| C | 100nF(0.1μF,X7R 陶瓷/薄膜) | 标准件,无需精密 |
2.3 关键参数
| 参数 | 值 | 说明 |
|---|---|---|
| RC 时间常数 τ | 390μs | R × C = 3900 × 100nF |
| τ/T | 10.9T | T = 35.7μs |
| 截止频率 fc | ≈ 402Hz | 1/(2πRC) |
| 硬件对 28kHz 衰减 | -37dB | 基频处一阶滚降 |
| Vpp(残余纹波) | ≈ 75mV | 精确指数计算 |
| 单边纹波率 | ≈ 2.3% | Vpp/2/VDC |
| VDC | 1.65V | 方波直流分量 |
| RMS 电流 | ≈ 0.38mA | 极低,任意信号源均可驱动 |
2.4 衰减验算
一阶 RC 传递函数:
$$|H(j\omega_1)| = \frac{1}{\sqrt{1 + (\omega_1 RC)^2}}$$
其中 ω₁ = 2π × 28000 = 175929 rad/s,ω₁RC = 68.6:
$$|H(j\omega_1)| = \frac{1}{\sqrt{1 + 68.6^2}} = \frac{1}{68.6} = 0.0146$$
$$A_{dB} = 20\log_{10}(0.0146) = -37\text{dB}$$
2.5 为什么不需要运放跟随器
RC 滤波器输出阻抗 = R + R_source ≈ 3.95kΩ。STM32F407 ADC 需在采样时间内将内部采样电容(约 4pF)充至目标精度:
| 采样时间 | 最大源阻抗(典型) | 最大源阻抗(最差) | 3.95kΩ 可行? |
|---|---|---|---|
| 15 cycles | 4.8kΩ | 0.5kΩ | ⚠️ 典型可行,最差不够 |
| 56 cycles | 36kΩ | 12kΩ | ✅ 充足余量 |
| 112 cycles | 73kΩ | 35kΩ | ✅ 非常充足 |
结论:使用 56 周期采样时间(T_s = 1.56μs),即使最差工况下源阻抗上限 12kΩ 仍远大于 3.95kΩ,无需运放跟随器,直连 ADC。
280kHz 采样率下,56+12 = 68 cycles,68/36MHz = 1.89μs,最高支持 529kSPS > 280kHz ✓
三、STM32F407 软件滤波设计
3.1 设计约束
STM32F407 无 GPU(区别于 STM32H723 方案),软件滤波由 Cortex-M4F CPU 承担。168MHz 主频 + DSP 指令 + DMA 硬件采集足以胜任,CPU 占用可控。
3.2 ADC 采样配置
| 参数 | 配置 | 说明 |
|---|---|---|
| 触发方式 | TIM2 定时触发 ADC1 | 周期精确,无 CPU 干预 |
| 采样率 | 280kHz(10× 载波) | 保证单周期多点采样 |
| 分辨率 | 12-bit | 满足精度要求 |
| 采样时间 | 56 cycles | 适配 3.95kΩ 源阻抗,无需运放 |
| ADC 时钟 | 36MHz | F407 12-bit 模式上限 |
| DMA | 循环模式,双缓冲 | 半传输中断 + 完成中断各处理 16 点 |
DMA 双缓冲流程:
ADC → DMA → Buffer[0..15] → 半传输中断 → 处理前 16 点
→ Buffer[16..31] → 完成中断 → 处理后 16 点
→ 循环回填 Buffer[0..15] ...
3.3 滤波算法:去极值均值
窗口 N = 32 点:
- DMA 填充 32 点 ADC 原始值到缓冲区
- 部分选择排序:找出 8 个最大值 + 8 个最小值
- 剩余 16 个有效值求和取平均
- 输出均值作为直流采样值,送入闭环控制算法
算法复杂度与 CPU 占用:
| 项目 | 估算 |
|---|---|
| 比较次数 | ~450 次(部分选择排序) |
| 单窗口运算耗时 | < 10μs(Cortex-M4F DSP 指令加速) |
| 窗口间隔 | 32/280kHz ≈ 114μs |
| CPU 占用率 | ≈ 9% |
| 残余 CPU 资源 | 91%(PID、扫频、保护、通信等) |
轻量替代方案(N = 16 点):
| 参数 | N=32(推荐) | N=16(轻量) |
|---|---|---|
| 剔除 | 8 大 + 8 小 | 4 大 + 4 小 |
| 有效点 | 16 | 8 |
| 额外衰减 | -12~15dB | -9~10dB |
| CPU 占用 | ~9% | ~4% |
| 综合纹波率 | 0.32~0.45% | 0.72~1.0% |
若 CPU 资源紧张,N=16 仍满足 < 1% 目标;追求精度用 N=32。
3.4 注意事项
- 窗口长度固定:运行时禁止修改 N,避免闭环带宽波动导致功率振荡
- DMA 中断优先级:设为中优先级,低于 PID/保护中断,高于显示/通信
- 溢出保护:求和用 32 位整型(16 × 4095 = 65520,16 位不溢出但留余量)
- 除法优化:N=32 时除以 16(有效点数),用右移 4 位替代除法
- 采样时间不可低于 56 周期:保证 3.95kΩ 源阻抗下 12-bit 精度
四、综合性能
4.1 纹波衰减汇总
| 层级 | 机制 | 衰减 | 残余单边纹波率 |
|---|---|---|---|
| 1. RC 硬件 | 一阶 -20dB/dec 滚降 | -37dB | 2.3% |
| 2. 软件 32 点去极值均值 | 统计滤波 | -12~15dB | — |
| 综合 | -49~52dB | 0.32~0.45% |
4.2 响应速度
| 项目 | 值 | 说明 |
|---|---|---|
| 硬件 τ | 390μs = 10.9T | 阶跃 63% 恢复 |
| 硬件 95% 恢复 | ≈ 1.17ms | 3τ |
| 软件窗口延迟 | 114μs | 32 点 @ 280kHz |
| 总响应延迟 | ≈ 1.3ms | 满足超声扫频、恒功率闭环 |
较原 200Hz 纯硬件方案(τ≈20T,95% 恢复 ≈ 2.3ms)提升约 1 倍。
4.3 性能对比表
| 对比项 | 原纯硬件方案(200Hz) | 本方案(402Hz + 软件) |
|---|---|---|
| 截止频率 | 200Hz | 402Hz |
| 响应速度 | 慢,闭环易滞后 | 提升 1 倍,动态响应优秀 |
| 28kHz 纹波衰减 | -43dB | -49~52dB(纹波更小) |
| 器件通用性 | 通用 | 通用标准阻容,量产无忧 |
| 运放跟随器 | 需要 | 不需要 |
| 适配场景 | 仅静态采样 | 动态扫频、恒功率闭环全场景 |
五、最终方案总结
5.1 硬件
信号源 ── 3.9kΩ ──┬── STM32F407 ADC输入
│
100nF (104)
│
GND
- R = 3.9kΩ(E24),C = 100nF(X7R),均为通用量产器件
- 无运放跟随器,直连 ADC(56 周期采样)
- 硬件衰减 -37dB,残余 Vpp ≈ 75mV
5.2 软件
- TIM2 触发 ADC1 @ 280kHz,56 周期采样,DMA 循环双缓冲
- 32 点去极值均值(去 8 大 8 小,剩 16 点取平均)
- CPU 占用 ~9%,168MHz 下运行稳定
- 软件额外衰减 -12~15dB
5.3 综合指标
| 指标 | 值 |
|---|---|
| 总纹波衰减 | -49~52dB |
| 单边纹波率 | 0.32~0.45% |
| VDC | 1.65V |
| 残余 Vpp | ≈ 10~15mV |
| 响应延迟(95%) | ≈ 1.3ms |
| CPU 占用 | ~9% |
| 器件成本 | R + C(约 0.1 元) |
六、关键公式速查
| 公式 | 表达式 | 用途 |
|---|---|---|
| RC 截止频率 | $f_c = \frac{1}{2\pi RC}$ | 确定硬件带宽 |
| RC 基频衰减 | $|H| = \frac{1}{\sqrt{1+(\omega_1 RC)^2}}$ | 验证硬件纹波 |
| RC 纹波 Vpp | $V_{pp} = V_{cc} \times \frac{1-e^{-T/(2\tau)}}{1+e^{-T/(2\tau)}}$ | 精确纹波计算 |
| 单边纹波率 | $\text{Rate} = \frac{V_{pp}/2}{V_{DC}}$ | 纹波评估指标 |
| 软件衰减估算 | $A_{sw} \approx 20\log_{10}(\sqrt{N_{eff}})$ | $N_{eff}$ 为有效点数 |
| ADC 源阻抗约束 | $R_{AIN} \leq \frac{T_s}{C_s \cdot \ln(2^{N+2})} - R_{ADC}$ | 验证是否需要运放 |
七、工程落地注意事项
- 采样时间 ≥ 56 周期:R = 3.9kΩ 时源阻抗较高,短采样时间会导致精度下降。56 周期在 36MHz ADC 时钟下 T_s = 1.56μs,最高支持 529kSPS,满足 280kHz 需求
- 软件窗口固定 32 点:禁止动态修改窗口长度,避免闭环带宽波动、功率振荡
- DMA 中断不阻塞 PID:滤波中断设为中优先级,PID/保护中断为高优先级
- 电容选型:优先 X7R 陶瓷或薄膜电容,避免 Y5V(DC 偏压下容量大幅缩水)
- PCB 布局:RC 滤波器靠近 ADC 引脚,走线短捷,减少寄生干扰
- « Previous
- 1
- …
- 7
- 8
- 9
- Next »