Files
xdeSpace/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md
T

38 KiB
Raw Blame History

路径B:AD8333 正交 IQ 解调方案全解——与路径A/路径C的全维度对比

作者: 小德 分类: 线圈车检 · DDS注入 · AD8333 · IQ解调 · 方案对比 版本: V1.0 日期: 2026-07-05 关联文档: 方案B_AD8302接口与IQ解调算法详解.md


前言

在方案B(DDS注入 + 阻抗分析)的大框架下,从模拟前端到数字量的转换有三条具体路径:

路径 核心器件 输出类型 原理
路径A AD8302 幅度比 G + 相位差 Φ 两路信号幅度/相位比较
路径B ⬅ 本文 AD8333 正交 I + Q 基带信号 真正正交混频
路径C MCU ADC + 软件 原始采样值 数字 IQ 解调

本文分两大部分:① 三路径横向对比(成本、技能、工时)② 路径B完整实现方案


第一部分:三路径横向对比

1.1 BOM 成本对比

核心芯片价格

器件 单价(¥,1kpcs 单价(¥,样品) 供货
AD8302 22~30 35~45 交期 8~12 周,立创/贸泽有货
AD8333 45~70 70~100 交期 12~16 周,需订货
LTC5599 50~80 80~120 交期 12~20 周,偏门
STM32G474(路径C仅用此) 12~18 20~28 好买

外围元件成本

类型 路径AAD8302 路径BAD8333 路径C(纯MCU
运放/缓冲器 OPA2188×1 (¥3) OPA2188×2 (¥6) OPA2188×1 (¥3)
LPF 无源元件 R×4+C×4 (¥0.5) R×8+C×8 (¥1) R×2+C×2 (¥0.3)
变压器/巴伦 1个 (¥1.5) 2个 (¥3) + 差分转换 1个 (¥1.5)
ADC 外围 无需额外 差分/单端转换 (¥2) 抗混叠LPF (¥0.5)
去耦/保护/偏置 标准 (¥1) 更多通道 (¥2) 标准 (¥1)
外围合计 ¥6~8 ¥14~20 ¥6~8

总 BOM 成本

       路径A (AD8302)    路径B (AD8333)    路径C (纯MCU)
芯片     ¥25~35           ¥60~90            ¥15~22MCU本身已有)
外围     ¥6~8             ¥14~20            ¥6~8
PCB面积  300mm²           500mm²            100mm²
─────   ────────────    ────────────      ───────────
总计     ¥31~43           ¥74~110           ¥21~30
        ⭐⭐⭐(经济)      ⭐⭐(较贵)        ⭐⭐⭐⭐(最省)

注:路径C中MCU增加的算力需求可能需要升级MCU型号(如从Cortex-M0→M4),
    成本差约 ¥5~10,升级后总算 ¥26~40,与路径A接近。

结论:路径B的 BOM 成本是路径A的 23 倍,是路径C的 34 倍。


1.2 PCB 面积与布局复杂度

项目 路径A 路径B 路径C
核心芯片引脚 14-TSSOP 32-LFCSP 无额外
差分信号线 4~6 对差分线(LO±, RF±, 可选 OUT±)
所需供电轨 5V 单电源 5V + ±2.5V 双电源(或单电源+虚拟地) 3.3V
外围器件数 ~12 个 ~25 个 ~5 个
预估面积 300mm² 500~700mm² 100mm²
4层板需求 非必需 推荐 4 层(差分信号 + 完整地平面) 2 层可用

路径B的 PCB 挑战:

  • AD8333 是 32 引脚 LFCSP5mm×5mm),引脚间距 0.5mm,需要精密焊接
  • 差分 LO 和 RF 输入需要等长走线、阻抗控制
  • 两路 I/Q 输出可能使用差分输出(AD8333 可配置),需要额外的差分-单端转换
  • 高频(~120kHz)虽然不是射频,但差分信号的对称性仍会影响解调性能

1.3 硬件设计复杂度与技能要求

维度 路径A 路径B 路径C
硬件电路 ★★☆ 中等 ★★★ 高 ★☆☆ 低
差分信号设计 不需要 需要 不需要
阻抗匹配 简单(单端50Ω) 差分阻抗匹配 简单
供电设计 简单(单电源) 需双电源或虚拟地 简单
芯片焊接难度 容易(TSSOP 中等(LFCSP 0.5mm N/A
调试工具需求 万用表+示波器 差分探头+示波器 万用表
硬件设计里程碑 2~3 周 4~5 周 1 周

路径B 额外的技能要求:

☐ 差分信号电路设计经验
☐ 阻抗控制和传输线理论基础(即使是低频,差分对称性也重要)
☐ 掌握 AD8333 中频 IQ 解调器架构
☐ 能看懂 IQ 调制/解调原理
☐ 熟悉 LFCSP 封装手工焊接技巧(热风枪)
☐ 差分示波器探头(或 2 通道×2 间接法测差分)

1.4 软件/算法复杂度与技能要求

维度 路径A 路径B 路径C
软件算法 ★★★ 中高 ★★☆ 中等 ★★★★ 高
ADC 通道数 2V_MAG, V_PHS 2~4I, Q 或 I+, I-, Q+, Q- 2v_ref, v_meas
采样率需求 1kHz 1kHzI/Q 已是基带) 960kHz
实时性要求 ISR 密集)
数学运算 需要解耦矩阵计算 简单(I-Q 直接对应 R-X 数字混频需要三角函数
校准复杂度 中(温漂+增益/相位系数) I/Q 不平衡+直流偏置+增益) 低(只有幅度校准)
算法开发工时 3~4 周 2~3 周 6~8 周

路径A 的软件难点: 从 G/Φ 到 R/L 的解耦矩阵推导和标定,公式复杂但一次搞定后代码很简单。

路径B 的软件亮点: AD8333 直接输出 I 和 Q不需要复杂的数学推导。I = Re(Z), Q = Im(Z),直观简单。但需要处理 I/Q 不平衡校准(两路增益不一致、正交相位误差)。

路径C 的软件难点: 需要精确的采样时序、高速 ADC 驱动、数字混频和滤波,占用大量 MCU 算力,实时性要求高。


1.5 总研发工时对比

假设团队配置:1 名硬件工程师 + 1 名嵌入式软件工程师

         硬件      软件      调试/联调     总计
         ────    ────      ──────      ────
路径A    2~3周    3~4周     2~3周      7~10周 ✅ 最快
路径B    4~5周    2~3周     3~4周      9~12周
路径C    1周      6~8周     4~6周     11~15周

       ⭐ 建议:量产产品选路径A(成熟、好买、进过产线验证)
       ⭐ 极致性能选路径B(噪声最低、动态范围最大)
       ⭐ 原型验证选路径C(零特殊物料、纯代码快速迭代)

1.6 关键性能对比

指标 路径AAD8302 路径BAD8333 路径C(纯MCU
ΔR 分辨率(@1s 0.5~1mΩ 0.1~0.3mΩ 0.3~0.5mΩ
ΔL 分辨率(@1s 0.01~0.02μH 0.003~0.01μH 0.005~0.015μH
温度-40°C~85°C 温漂 ±2% ±0.5% (差分架构共模抑制) ±3%
电源噪声抑制 中(单端输出) (差分架构) 无(原始模拟)
刷新率 1kHz 1kHz~100kHz 0.2~6kHz
信号带宽 DC~1kHz DC~30MHz DC~500Hz(滤波后)
动态范围 ~60dB ~80dB ~50dB
综合评级 均衡 最佳 够用

1.7 量产可制造性对比

维度 路径A 路径B 路径C
芯片交期 8~12 周 12~16 周,风险较高 N/A(已有MCU
贴片良率 99.5%+ 98%~99%LFCSP 偏位风险) 99.9%
测试标定 需标定 2 个系数 需标定 4~6 个系数 I/Q不平衡) 几乎无需标定
温循可靠性 中(更多焊点+双电源)
第二货源 AD8318(兼容) 几乎无兼容替代 ⚠️ STM 多家可选

1.8 一表打尽:三路径全维度对比矩阵

                    ┌────────┬────────┬────────┐
                    │ 路径A  │ 路径B  │ 路径C  │
                    │ AD8302 │ AD8333 │ 纯MCU  │
┌───────────────────┼────────┼────────┼────────┤
│ BOM 成本/台       │ ¥35    │ ¥90    │ ¥28    │
│ PCB 面积          │ 300mm² │ 600mm² │ 100mm² │
│ 硬件复杂度        │ ★★☆   │ ★★★   │ ★☆☆   │
│ 软件复杂度        │ ★★★   │ ★★☆   │ ★★★★  │
│ 总研发工时        │ 8周    │ 10周   │ 13周   │
│ ΔR 分辨率         │ 0.8mΩ  │ 0.2mΩ  │ 0.4mΩ  │
│ 动态范围          │ 60dB   │ 80dB   │ 50dB   │
│ 温漂抑制          │ ★★★   │ ★★★★  │ ★★☆   │
│ 芯片交期风险      │ 中     │ 高     │ 无     │
│ 第二货源          │ 有     │ 无     │ 有     │
│ 总推荐指数        │ ★★★★  │ ★★★   │ ★★★   │
└───────────────────┴────────┴────────┴────────┘

一句话推荐:
  → 量产选路径A(AD8302)—— 成熟、均衡、好买
  → 性能优先 + 预算充足 选路径B(AD8333)—— 精度极限
  → 快速原型验证 选路径C(纯MCU)—— 零特殊物料

第二部分:路径B(AD8333 正交 IQ 解调)完整实现方案


二、AD8333 正交 IQ 解调的原理与优势

2.1 AD8333 核心架构

┌──────────────────────────────────────────────┐
│                  AD8333                       │
│                                              │
│      RFINP ─┬─→  I 混频器 ──→ LPF ──→ IOUTP │
│              │   (× cos ωt)       │    IOUTN │
│      RFINN ─┘                    │          │
│                                  │          │
│      LOINP ─┬─→ 90° 移相器 ─┬───┤          │
│      LOINN ─┘               │   │          │
│                              │   │          │
│                              │   └──→ LPF ──→ QOUTP │
│                              │        (× sin ωt) QOUTN│
│                              └────────────────────────┘
│                                              │
│      增益控制:GAIN 引脚(0.5~2V → -4.5~+19.5dB)│
│      功耗:典型 180mW(@5V)                  │
└──────────────────────────────────────────────┘

核心原理:

AD8333 内部有两个乘法器(吉尔伯特单元),分别将 RF 输入信号与 LO 信号的 0° 和 90° 分量相乘:

I_out = LPF{ RF(t) × cos(ω₀t) }
Q_out = LPF{ RF(t) × sin(ω₀t) }

对于线圈响应信号 RF(t) = A(t) × cos(ω₀t + θ(t))

I(t) = LPF{ A(t)cos(ω₀t+θ) × cos(ω₀t) } = ½A(t)cos(θ(t))
Q(t) = LPF{ A(t)cos(ω₀t+θ) × sin(ω₀t) } = ½A(t)sin(θ(t))

I 和 Q 直接就是复数阻抗的实部和虚部!

2.2 AD8333 vs AD8302 的根本差异

AD8302 的输出:         AD8333 的输出:
  V_MAG ∝ |Z|            I ∝ Re(Z) = R
  V_PHS ∝ ∠Z             Q ∝ Im(Z) = ωL

从 AD8302 到 R/L 需要:    从 AD8333 到 R/L 就是 I 和 Q 本身:
  G → |Z| → R = |Z|cosθ    ΔR = I - I₀
  Φ → ∠Z → L = |Z|sinθ/ω   ΔL = (Q - Q₀) / ω

                         无需解耦运算,零数学复杂度!

2.3 AD8333 关键引脚与功能

AD833332-LFCSP, 5mm×5mm

RF 输入(差分):
  RFINP, RFINN       RF 正向/反向输入引脚
  输入阻抗:2kΩ || 2pF(差分)
  最大输入:±1.2V(差分)

LO 输入(差分):
  LOINP, LOINN       LO 正向/反向输入引脚
  LO 驱动电平:-10dBm ~ +5dBm(典型 0dBm
  内部有 90° 移相器,无需外部移相电路

基带输出(差分对,每通道两个引脚):
  IOUTP, IOUTN       I 通道差分输出
  QOUTP, QOUTN       Q 通道差分输出
  输出共模电平:约 VPOS/2
  输出摆幅:±1.5V(差分,典型)

其他:
  GAIN               增益控制(0.5~2V → -4.5~+19.5dB
  VPOS, VNEG         ±5V 供电
  VREF               参考电压输出(VPOS/2 = 2.5V,用作差分虚拟地)
  ENBL               使能引脚(高电平使能)
  MODE               输出模式选择(差分/单端)

三、路径B完整系统框图

DDS (AD9834)
f₀ = 120kHz
     │
     ├───────────────────────────┐
     │                           │
     ▼                           ▼
┌──────────┐              ┌──────────┐
│ LO 缓冲  │              │ 功放+    │
│ 差分驱动 │              │ 变压器   │
│ (巴伦)   │              │ 1:N升压  │
└────┬─────┘              └────┬─────┘
     │                         │
     │ LO_+                   │ 线圈
     │ LO_-                   │ (100~300μH)
     │                         │
     │                         ▼
     │                    ┌──────────┐
     │                    │ 变压器   │
     │                    │ N:1降压  │
     │                    │ +巴伦    │
     │                    └────┬─────┘
     │                         │ RF_+
     │                         │ RF_-
     │                         │
     └─────────┬───────────────┘
               │
               ▼
        ┌──────────┐
        │ AD8333   │
        │ IQ 解调  │
        └────┬─────┘
       ┌─────┴─────┐
       │           │
   IOUT±        QOUT±
   (差分)       (差分)
       │           │
       ▼           ▼
   ┌────────┐  ┌────────┐
   │ 差分→  │  │ 差分→  │
   │ 单端   │  │ 单端   │
   │ LTC6362│  │ LTC6362│
   └───┬────┘  └───┬────┘
       │           │
     I_sgl       Q_sgl
       │           │
       ▼           ▼
   ┌────────────────────┐
   │   LPF(二阶)      │
   │   f_c = 300Hz      │
   └────────┬───────────┘
            │
            ▼
      ADC1     ADC2
    STM32G474
    (12bit, 1ksps)
            │
            ▼
     ┌──────────────┐
     │ MCU 软件:    │
     │ → I/Q 归一化  │
     │ → ΔR = I - I₀ │
     │ → ΔL = (Q-Q₀)/ω│
     │ → 基线跟踪    │
     │ → 触发判决    │
     └──────────────┘

四、硬件电路详细设计

4.1 LO 输入驱动电路

AD8333 的 LO 输入需要差分信号,幅度约 0dBm(632mVpp 差分)。

DDS 输出 (3.3Vpp 单端)
     │
     ▼
┌──────────────────────┐
│ LO 缓冲级            │
│                      │
│   ┌─────────┐        │
│   │ OPA2188 │        │
│   │ 同相放大 │       │
│   │ Gain=1  │        │
│   └────┬────┘        │
│        │             │
│        ▼             │
│   ┌─────────┐        │
│   │ 巴伦     │       │
│   │ 1:1      │       │
│   │ (低频用  │       │
│   │ Mini-Circuits    │
│   │ T1-1T-KK81)     │
│   └────┬────┘        │
│        │             │
│   LO_+ ┴ LO_-        │
│   (差分输出,~1Vpp)   │
└──────────────────────┘

巴伦选择注意事项:
  - 工作频率范围需覆盖 80~200kHz
  - 低频巴伦较难找,可用自制:在环形磁芯上双线并绕 10:10 匝
  - 磁芯材料:镍锌铁氧体(如 TDK PC40 或 Fair-Rite 43 材料)
  - 或使用 ADI 推荐的 ADT1-1WT+(虽然标称 0.4~500MHz,低频性能仍可接受)

低频巴伦自制方案(推荐):

材料:环形铁氧体磁芯(外径 10mm,镍锌材料,μr≈100)
绕线:0.2mm 漆包线,双线并绕 15 匝
      
      DDS 单端输入
          │
     ┌────┴────┐
     │         │
     │ ███████ │    ← 磁芯
     │ █ 15T █ │
     │ ███████ │
     │    │    │
     └────┼────┘
          │
       LO_+   LO_-
      (差分输出)

电感量估算:AL ≈ 1.5μH/N², N=15 → L ≈ 340μH
在 120kHz 时阻抗 Z_L = 2π×120k×340μ ≈ 256Ω
可以良好传输 120kHz 信号。

4.2 RF 输入驱动电路

线圈响应信号同样需要转为差分,并调整电平至 AD8333 的 RF 输入范围。

线圈 → 变压器 N:1 → 巴伦 1:1 → 单端→差分转换 → AD8333 RFIN

更简化的方案(使用变压器直接差分输出):

线圈回路:
  DDS → 功放 → 变压器(1:N) → 线圈 → 变压器(N:1) → 电阻分压衰减
                                                       │
                                                      RF_+
                                                      RF_-
                                                       │
                                                    AD8333
                                                   RFINP/N

直接从变压器次级取差分信号,经电阻分压衰减至合适电平(~500mVpp 差分)。
无需额外的巴伦,变压器天然产生差分信号。

电平计算:

DDS 输出 3.3Vpp → 功放增益 2× → 6.6Vpp → 升压变压器 1:3 → 线圈激励 ~20Vpp
线圈响应(空载)→ 降压变压器 3:1 → ~6.6Vpp → 电阻分压衰减 ~12dB → ~1.6Vpp 单端
→ 变压器差分输出 ~1.6Vpp 差分 → 略超 AD8333 最大 ±1.2V 差分

调整:衰减 ~16dB → ~1.0Vpp 差分 → 安全范围 ✅

4.3 I/Q 差分输出 → 单端转换

AD8333 的 I 和 Q 输出是差分对(IOUTP/IOUTN, QOUTP/QOUTN),需要使用差分放大器转为单端后送入 ADC。

IOUTP ─┬─ 100Ω ──┐
        │         │
        │    ┌────┴──────┐
        │    │  LTC6362  │
        │    │ (全差分运放) │
        │    │  配置为   │
        │    │ Gain=1    │
        │    │ 差分→单端 │
        │    └────┬──────┘
        │         │
IOUTN ─┬─ 100Ω ──┘
        │         │ I_single_ended
       GND       GND
                  │
                  ▼
            ┌──────────┐
            │  二阶 LPF │
            │  f_c=300Hz│
            │ (抗混叠)  │
            └────┬─────┘
                 │
            ADC_IN (STM32 PA0)

LTC6362 配置:

LTC6362(全差分运放 → 单端输出)

关键特性:
  - 噪声:2.5nV/√Hz(超低)
  - 带宽:45MHz
  - 电源:2.8~5.25V(可直接用 3.3V
  - 封装:MSOP-8

电路配置(差分输入 → 单端输出):
  
  差分输入:V_in_diff = IOUTP - IOUTN
  单端输出:V_out = V_in_diff × (Rf/Rg)
  
  推荐 Rf = Rg = 10kΩ → Gain = 1
  
  输出共模:由 VOCM 引脚设定(接 VREF=2.5V
  输出范围:0~3.3V(适合 MCU ADC 输入范围)
  
  LPF 集成:
    在 Rf 两端并联 Cf = 47nF → f_c = 1/(2π×10k×47n) ≈ 340Hz ✅
    兼顾抗混叠和 IQ 信号带宽

没有 LTC6362 时的替代方案(双运放减法器):

使用 2 颗 OPA2188 中的 1 颗做差分→单端:

  IOUTP ── R1=10k ──┬── Rf=10k ──┐
                      │            │
                      ├── OPA2188A│── I_sgl
                      │   (-)     │
  IOUTN ── R2=10k ──┴── R3=10k ──┘
                      │
                     GND

  Gain = Rf/R1 = 1
  输出 = IOUTP - IOUTN(单端)
  
  同相端偏置至 VREF/2 = 1.25V 使输出在 0~2.5V 范围

4.4 抗混叠 LPF 设计

二阶巴特沃斯,f_c = 300Hz(IQ 信号的最高有效频率分量 < 100Hz

         R1=4.7k    R2=4.7k
  IN ──┬─/\/\/\/──┬─/\/\/\/──┬── OUT
       │           │          │
       │ C1=100nF  │          │ C2=47nF
       │           │          │
      GND         GND        GND

  f_c = 1 / (2π × √(4.7k×4.7k×100n×47n))
      = 1 / (2π × √(2.21e-8 × 100e-9 × 47e-9))
      = 1 / (2π × √(1.04e-13))
      = 1 / (2π × 3.22e-7)
      ≈ 494Hz ✅(足够抑制 1kHz 以上噪声)

4.5 ADC 接口与采样

I 通道:STM32G474 ADC1_IN1 (PA0)
Q 通道:STM32G474 ADC1_IN2 (PA1)

ADC 配置:
  分辨率:12bit + 硬件过采样(OSR=16 → 16bit 有效)
  采样率:1ksps(每个通道)
  触发方式:TIM6 定时器 1ms 触发
  数据模式:DMA 双通道循环采样
  参考电压:VDDA=3.3V

电平对齐:
  AD8333 输出共模 ≈ VPOS/2 = 2.5V
  LTC6362 输出偏置 ≈ VREF/2 = 1.25V(通过 VOCM 设定)
  最终 I_sgl 和 Q_sgl 输出范围:0.3~2.8V(适合 0~3.3V ADC

ADC 输入前加 100Ω + 1nF RC 低通(f_c ≈ 1.6MHz 去噪)

4.6 AD8333 偏置与供电

供电配置:
  VPOS = +5V(来自 LDO,如 ADP3339
  VNEG = -5V(来自输出负压的 DC-DC 或电荷泵,如 LTC3260
  总电流:~36mAVPOS+ ~20mAVNEG
  总功耗:~280mW

  ※ 双电源供电是路径B的显著缺点——需要负压生成电路。
  ※ 替代方案:使用虚拟地(VREF 作为信号地),但噪声性能会下降。

去耦:
  VPOS:100nF + 10μF 陶瓷,紧贴引脚
  VNEG100nF + 10μF 陶瓷,紧贴引脚
  VREF:100nF + 1μF 陶瓷,紧贴引脚
  
增益控制(GAIN 引脚):
  由 MCU DAC 输出 0.5~2V 控制
  或电阻分压固定:
    空载增益:约 6dB(GAIN=0.8V)
    有车增益:自动/固定
  推荐用 DAC 控制,实现动态增益调整

4.7 完整原理图节选(核心部分)

┌─────────────────────────────────────────────────────────────────┐
│   U1: AD8333 (IQ Demodulator)                                   │
│                                                                 │
│         ┌─────────────┬──────┬──────────────────┐               │
│    LO_+─┤1 LOINP    32├IOUTP─┼────────────────┐ │               │
│    LO_-─┤2 LOINN    31├IOUTN─┼──────────────┐ │ │               │
│         │             30├QOUTP─┼────────────┐ │ │ │               │
│         │             29├QOUTN─┼──────────┐ │ │ │ │               │
│    RF_+-┤3 RFINP      │       │ │ │ │ │               │
│    RF_--┤4 RFINN      │       │ ▼ ▼ ▼ ▼               │
│         │              │  ┌─────────────────┐          │
│    GAIN─┤5 GAIN       │  │ LTC6362 ×2      │          │
│         │         VREF├──┤ (差分→单端)      │          │
│    ENBL─┤7 ENBL       │  └──┬──────┬───────┘          │
│         │         VPOS├──┤    │      │                 │
│    MODE─┤6 MODE       │  │    │      │                 │
│         │         VNEG├──┤    │      │                 │
│         └─────────────┘  │    ▼      ▼                 │
│                          │  LPF    LPF                 │
│                          │  f_c=300Hz f_c=300Hz        │
│                          │    │      │                 │
│                          │    I_adc  Q_adc             │
│                          │    (PA0)  (PA1)             │
│                          └─────────────────────────────┘
└─────────────────────────────────────────────────────────────────┘

五、软件算法实现

5.1 整体处理流程

ADC 采样 (1kHz) → 去噪 → I/Q 归一化 → ΔR, ΔL → 基线跟踪 → 触发判决
                      ↓
               I/Q 校准表查表
               (I/Q 不平衡补偿)

5.2 I/Q 原始数据采集

// ============================================================
// I/Q 数据采集(DMA 双缓冲)
// ============================================================
#define ADC_BUF_SIZE  64   // 每通道 64 点,双缓冲

volatile uint16_t adc_buf[ADC_BUF_SIZE * 2];  // DMA 目标
volatile uint8_t  buf_ready = 0;              // 数据就绪标志

// DMA 半满/全满中断回调
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) {
    buf_ready = 1;  // 半满中断 → 可处理前 64 点
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
    buf_ready = 2;  // 全满 → 可处理后 64 点
}

// 主循环中轮询
void Process_AD8333_Data(void) {
    if (buf_ready == 0) return;
    
    uint16_t offset = (buf_ready == 1) ? 0 : ADC_BUF_SIZE;
    buf_ready = 0;
    
    // 从 DMA 缓冲区提取 I 和 Q 值
    // ADC 通道顺序:偶数索引 = I,奇数索引 = Q
    for (int i = 0; i < ADC_BUF_SIZE/2; i++) {
        raw_I += adc_buf[offset + i*2];
        raw_Q += adc_buf[offset + i*2 + 1];
        count++;
    }
    
    if (count >= 64) {  // 每 64ms 输出一次平均值(约 15.6Hz 刷新率)
        float I_avg = (raw_I / count) * 3.3f / 65536.0f;  // 转为电压
        float Q_avg = (raw_Q / count) * 3.3f / 65536.0f;
        raw_I = 0; raw_Q = 0; count = 0;
        
        Process_IQ_Sample(I_avg, Q_avg);
    }
}

5.3 I/Q 校准(关键步骤!)

AD8333 存在三种非理想特性,必须在软件中补偿:

① I/Q 增益不平衡:I 和 Q 通道增益不完全一致(误差 ±0.5~2dB)
② I/Q 相位不平衡:内部 90° 移相器不精确(误差 ±1~3°)
③ 直流偏置:混频器输出存在直流偏置(影响低频频响)

校准原理:

// ============================================================
// I/Q 校准参数
// ============================================================
typedef struct {
    // 直流偏置(空载时测量)
    float I_offset;     // I 通道空载偏置(V
    float Q_offset;     // Q 通道空载偏置(V
    
    // 增益平衡(通过注入已知信号标定)
    float gain_ratio;   // G_Q / G_I(理想为 1.0
    
    // 相位不平衡(通过已知负载标定)
    float phase_error;  // 正交相位误差(弧度)
    
    // 空载参考值(用于后续 ΔR/ΔL 计算)
    float I_ref;        // 空载 I 值(已校准)
    float Q_ref;        // 空载 Q 值(已校准)
    
    // 系统常数
    float omega;        // 激励角频率
    float R0;           // 空载线圈电阻
    float L0;           // 空载线圈电感
} IQCal_t;

IQCal_t iq_cal;

// ============================================================
// 上电自校准(在确认无金属干扰时执行)
// ============================================================
void IQ_Calibrate(IQCal_t *cal) {
    float I_sum = 0, Q_sum = 0;
    int N = 1000;  // 采集 1000 个点(约 1 秒 @ 1kHz
    
    for (int i = 0; i < N; i++) {
        I_sum += Read_ADC_I();
        Q_sum += Read_ADC_Q();
        HAL_Delay(1);
    }
    
    // 直流偏置 = 空载时平均值
    cal->I_offset = I_sum / N;
    cal->Q_offset = Q_sum / N;
    
    // 空载参考值 = 直流偏置
    cal->I_ref = cal->I_offset;
    cal->Q_ref = cal->Q_offset;
    
    // 增益比默认 1.0(如需高精度,通过注入已知幅度信号标定)
    cal->gain_ratio = 1.0f;  
    
    // 相位误差默认 0(如需高精度,通过已知 L 负载标定)
    cal->phase_error = 0.0f;
    
    // 系统常数
    cal->omega = 2.0f * 3.14159265f * 120000.0f;
    // R0 和 L0 从 EEPROM 校准参数读取
}

// ============================================================
// I/Q 不平衡补偿
// ============================================================
void IQ_Compensate(IQCal_t *cal, float I_raw, float Q_raw,
                   float *I_out, float *Q_out) {
    // Step 1: 减去直流偏置
    float I_ac = I_raw - cal->I_offset;
    float Q_ac = Q_raw - cal->Q_offset;
    
    // Step 2: 增益补偿
    Q_ac *= cal->gain_ratio;
    
    // Step 3: 相位补偿(正交误差校正矩阵)
    // 设真实相位误差为 θ_err
    //    I_corrected = I_ac
    //    Q_corrected = (Q_ac - I_ac × sin(θ_err)) / cos(θ_err)
    if (cal->phase_error != 0.0f) {
        float sin_err = sinf(cal->phase_error);
        float cos_err = cosf(cal->phase_error);
        *I_out = I_ac;
        *Q_out = (Q_ac - I_ac * sin_err) / cos_err;
    } else {
        *I_out = I_ac;
        *Q_out = Q_ac;
    }
}

5.4 从 I/Q 到 ΔR、ΔL(路径B的算法比路径A简单 10 倍)

// ============================================================
// 核心:从校准后的 I/Q 计算 ΔR 和 ΔL
// 这是路径B的核心优势——无需路径A的解耦矩阵!
// ============================================================

void IQ_To_DeltaRL(IQCal_t *cal,
                   float I_cal, float Q_cal,  // 校准后 I/Q
                   float *delta_R,             // 输出:ΔR(Ω)
                   float *delta_L)             // 输出:ΔLH
{
    // 相对于空载基线的变化量
    float dI = I_cal - cal->I_ref;
    float dQ = Q_cal - cal->Q_ref;
    
    // ============================================================
    // 核心公式:I/Q 直接对应 R 和 ωL
    // ============================================================
    // 
    // I ∝ Re(Z) = R   ← 电阻分量
    // Q ∝ Im(Z) = ωL  ← 电抗分量
    //
    // 所以:
    //   ΔR = dI × K_scale_R     K_scale_R 通过标定得到)
    //   ωΔL = dQ × K_scale_L
    //   ΔL = dQ × K_scale_L / ω
    //
    // 其中 K_scale 由系统的电压→欧姆的转换因子决定
    //   K = V_to_Ohm = Z0 / V0_mag
    //   即先测已知负载的 I/Q 电压变化量,反推 V→Ω 比例
    // ============================================================
    
    // 标定常数(初始化时计算)
    // K_scale_R = R0 / (V0_mag × cos(∠Z₀))
    // K_scale_L = ωL0 / (V0_mag × sin(∠Z₀)) / ω = L0 / (V0_mag × sin(∠Z₀))
    //
    // 更简单的标定方法:
    // 用一个已知 ΔR 的负载(如串联 0.5Ω 电阻箱)测 dI
    // 用一个已知 ΔL 的负载(如串联 1μH 电感)测 dQ
    
    *delta_R = dI * cal->K_R;  // K_R 预标定值
    *delta_L = dQ * cal->K_L;  // K_L 预标定值
}

// 标定函数(产线或现场执行一次)
void IQ_Calibrate_Scale(IQCal_t *cal) {
    // 方法:使用标准阻抗盒,分别测 R 变化和 L 变化
    
    float I_ref   = Read_IQ_With_Load(R0, L0);    // 空载 I
    float Q_ref   = Read_IQ_With_Load(R0, L0);    // 空载 Q
    
    float dR_known = 0.5f;  // Ω,串联 0.5Ω
    float I_with_R = Read_IQ_With_Load(R0 + dR_known, L0);
    cal->K_R = dR_known / (I_with_R - I_ref);  // V → Ω
    
    float dL_known = 1e-6f;  // H,串联 1μH
    float Q_with_L = Read_IQ_With_Load(R0, L0 + dL_known);
    cal->K_L = dL_known / (Q_with_L - Q_ref);  // V → H
    
    cal->I_ref = I_ref;
    cal->Q_ref = Q_ref;
}

路径B vs 路径A 的算法对比:

// 路径A(AD8302)—— 需要 6 步运算 + 解耦矩阵:
//   V_MAG → G_dB → dG_dB → dG_lin
//   V_PHS → Φ_deg → dΦ_deg → dΦ_rad
//   ΔR = Z0 × (cosθ×dG_lin - sinθ×dΦ_rad)    ← 需要 2 次三角函数 + 4 次乘加
//   ΔL = Z0/ω × (sinθ×dG_lin + cosθ×dΦ_rad)

// 路径B(AD8333)—— 只需 2 步运算:
//   I_cal → dI → ΔR = dI × K_R              ← 1 次减法 + 1 次乘法
//   Q_cal → dQ → ΔL = dQ × K_L              ← 1 次减法 + 1 次乘法

// 结论:路径B的算法代码量约为路径A的 1/5!

5.5 剩余算法(基线跟踪、触发判决)

基线跟踪和触发判决算法与路径A完全通用,直接复用:

// 从 方案B_AD8302接口与IQ解调算法详解.md 复用:
//   - BaselineTracker_t 双基线结构
//   - TriggerEngine_t 三状态触发状态机
//   - GapDetect_t 谷底检测
//
// 唯一差异:路径B 输入的 ΔR 和 ΔL 精度更高(约高 2~3 倍),
// 所以阈值可以设得更紧,响应更灵敏。

具体实现直接参见《方案B_AD8302接口与IQ解调算法详解.md》的第六章和第七章,不再重复。


六、路径B性能预估验证

6.1 理论噪声分析

AD8333 等效输入噪声:~5.5nV/√Hz
RF 前端增益:+6dB~2×)
LPF 带宽:300Hz
系统噪声带宽:1.57 × 300Hz ≈ 470Hz(一阶近似)

输出噪声密度:5.5nV/√Hz × 2 × √470 ≈ 2.4μVrms

对应 ΔR 分辨率的电压等效值:
  空载 I_ref ≈ 1.25VVREF/2 偏置,含直流)
  信号变化:铝车架 ΔR/R₀ ≈ 3% → ΔR ≈ 0.06Ω
  对应 I 变化:~30mV
  SNR = 30mV / 2.4μV = 12500 ≈ 82dB ✅
  
理论 ΔR 分辨率:0.06Ω / 12500 ≈ 5μΩ(理论极限)
实际受 1/f 噪声和电源噪声限制:~0.1~0.3mΩ ✅

6.2 路径B vs 路径A 实测预期

测试场景 路径A ΔR SNR 路径B ΔR SNR 提升
空载噪声本底 5~10μV 2~4μV 2~3×
铝车架 ΔR=0.06Ω ~60dB ~75dB +15dB
钢车架 ΔL=2μH ~65dB ~80dB +15dB
钢铝混合 ~55dB ~70dB +15dB
高温+85°C ~45dB ~60dB +15dB

七、三路径选择决策树

开始
  │
  ├── 是否需要批量量产(>1000台/年)?
  │    ├── 是 → 路径A(AD8302)—— 好买、便宜、够用 ✅
  │    └── 否 → 继续
  │
  ├── 是否需要检测碳纤维+铝超跑或其它极限弱信号?
  │    ├── 是 → 路径B(AD8333)—— ΔR 分辨率高出 2~5× ✅
  │    └── 否 → 继续
  │
  ├── 硬件团队是否有差分电路设计经验?
  │    ├── 否 → 路径A(AD8302)—— 单端设计简单 ✅
  │    └── 是 → 继续
  │
  ├── 开发周期是否紧张(<8周)?
  │    ├── 是 → 路径A(AD8302)—— 总工时 7~10 周 ✅
  │    └── 否 → 继续
  │
  ├── BOM 预算是否敏感?(目标 <¥40/台)
  │    ├── 是 → 路径A(AD8302)—— ¥35/台 ✅
  │    └── 否 → 继续
  │
  ├── 是否有足够时间绕芯片交期(>16周)?
  │    ├── 是 → 路径B(AD8333)—— 性能最佳 ✅
  │    └── 否 → 继续
  │
  └── 最终推荐:
       ├── 原型验证 → 路径C(纯MCU,零物料依赖)
       ├── 快速量产 → 路径A(AD8302)
       ├── 极限性能 → 路径B(AD8333)
       └── 从原型到量产的平滑过渡:
           原型阶段用路径C → 验证算法 → 硬件改为路径A/路径B
           代码架构不变,ADC 采样接口抽象化即可切换

八、总结

路径BAD8333)的优缺点

优势:

  1. 算法最简单——I/Q 直接对应 R/ωL,零数学复杂度
  2. 噪声最低——差分架构,共模抑制好,理论 SNR 比路径A 高 15dB
  3. 动态范围最大——80dB,覆盖从碳纤维超跑到钢制卡车的全范围
  4. I/Q 校准一次完成,永久有效——不随信号幅度变化

劣势:

  1. BOM 成本最高——路径A 的 2~3 倍
  2. 芯片交期最长——12~16 周,无第二货源
  3. 需要双电源——需要 -5V 生成电路,增加成本和 PCB 面积
  4. 硬件设计最复杂——差分信号 + LFCSP 焊接 + 双电源布线
  5. PCB 面积最大——路径A 的 2 倍

最终建议矩阵

         ┌─────────────────────────────────────────────┐
         │              选择合适的路径                    │
         ├────────────┬──────────┬──────────┬───────────┤
         │   条件     │  路径A   │  路径B   │  路径C    │
         │            │  AD8302  │  AD8333  │  纯MCU   │
         ├────────────┼──────────┼──────────┼───────────┤
         │ 快速上市   │    ✅    │    ❌    │    ⚠️    │
         │ 批量量产   │    ✅    │    ⚠️    │    ❌    │
         │ 极限精度   │    ⚠️    │    ✅    │    ❌    │
         │ 极低 BOM   │    ⚠️    │    ❌    │    ✅    │
         │ 团队新手   │    ✅    │    ❌    │    ⚠️    │
         │ 超跑/铝多  │    ⚠️    │    ✅    │    ❌    │
         │ 双电源禁忌  │    ✅    │    ❌    │    ✅    │
         │ 芯片交期紧  │    ✅    │    ❌    │    ✅    │
         │ 快速原型   │    ⚠️    │    ❌    │    ✅    │
         └────────────┴──────────┴──────────┴───────────┘

文档结束