# 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 点**：

1. DMA 填充 32 点 ADC 原始值到缓冲区
2. 部分选择排序：找出 8 个最大值 + 8 个最小值
3. 剩余 16 个有效值求和取平均
4. 输出均值作为直流采样值，送入闭环控制算法

**算法复杂度与 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 注意事项

1. **窗口长度固定**：运行时禁止修改 N，避免闭环带宽波动导致功率振荡
2. **DMA 中断优先级**：设为中优先级，低于 PID/保护中断，高于显示/通信
3. **溢出保护**：求和用 32 位整型（16 × 4095 = 65520，16 位不溢出但留余量）
4. **除法优化**：N=32 时除以 16（有效点数），用右移 4 位替代除法
5. **采样时间不可低于 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}$ | 验证是否需要运放 |

---

## 七、工程落地注意事项

1. **采样时间 ≥ 56 周期**：R = 3.9kΩ 时源阻抗较高，短采样时间会导致精度下降。56 周期在 36MHz ADC 时钟下 T_s = 1.56μs，最高支持 529kSPS，满足 280kHz 需求
2. **软件窗口固定 32 点**：禁止动态修改窗口长度，避免闭环带宽波动、功率振荡
3. **DMA 中断不阻塞 PID**：滤波中断设为中优先级，PID/保护中断为高优先级
4. **电容选型**：优先 X7R 陶瓷或薄膜电容，避免 Y5V（DC 偏压下容量大幅缩水）
5. **PCB 布局**：RC 滤波器靠近 ADC 引脚，走线短捷，减少寄生干扰
