From d4bd6055743942090e68ea9d34162075769927fe Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 6 Jul 2026 08:11:35 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=B0=86=E6=95=A3=E8=90=BD=E7=9A=84?= =?UTF-8?q?=E6=8A=80=E6=9C=AF=E6=96=87=E6=A1=A3=E7=BB=9F=E4=B8=80=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E8=87=B3docs/=E9=9B=86=E4=B8=AD=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/FNIRSI_LCR-ST1_逆向分析.md | 831 +++++++++++ docs/方案B_AD8302接口与IQ解调算法详解.md | 1315 +++++++++++++++++ ...案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md | 1001 +++++++++++++ docs/线圈车检器车辆特征判别方法.md | 457 ++++++ docs/车身与线圈相对位置检测分析.md | 160 ++ docs/铝制车架有效感应方法.md | 475 ++++++ docs/铝制车架有效感应方法_v2.0.md | 913 ++++++++++++ 7 files changed, 5152 insertions(+) create mode 100644 docs/FNIRSI_LCR-ST1_逆向分析.md create mode 100644 docs/方案B_AD8302接口与IQ解调算法详解.md create mode 100644 docs/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md create mode 100644 docs/线圈车检器车辆特征判别方法.md create mode 100644 docs/车身与线圈相对位置检测分析.md create mode 100644 docs/铝制车架有效感应方法.md create mode 100644 docs/铝制车架有效感应方法_v2.0.md diff --git a/docs/FNIRSI_LCR-ST1_逆向分析.md b/docs/FNIRSI_LCR-ST1_逆向分析.md new file mode 100644 index 0000000..a3a1e58 --- /dev/null +++ b/docs/FNIRSI_LCR-ST1_逆向分析.md @@ -0,0 +1,831 @@ +# FNIRSI LCR-ST1 电桥镊子逆向分析 —— 硬件方案、BOM 估算与算法软件详解 + +> **作者:** 小德 +> **分类:** 产品逆向 · LCR 电桥 · 嵌入式 +> **版本:** V1.0 +> **日期:** 2026-07-05 +> **参考零售价:** ¥138(京东) +> **声明:** 以下分析基于公开的产品规格、该品类通用设计模式和工程经验推导,未经实测拆解验证,仅供技术研究参考。 + +--- + +## 概览 + +FNIRSI LCR-ST1 是一款手持式 LCR 电桥镊子,定位于"能用就行"的入门级元器件测试仪。¥138 的售价决定了它的每一步设计都在成本和性能之间做权衡。本文从硬件架构、BOM 估算、测量原理、算法实现四个层面展开逐级拆解。 + +--- + +## 一、已知规格与功能反推 + +### 1.1 公开规格 + +| 参数 | 标注值 | 可信度判断 | +|------|--------|-----------| +| 测量参数 | L / C / R / Q / D / ESR | 可信 | +| 测试频率 | 100Hz / 1kHz / 10kHz | 可信(三频点标准) | +| 量程 | L: 0.01μH~10H, C: 0.1pF~10mF, R: 0.01Ω~10MΩ | 可信 | +| 精度 | 1%(典型) | 可信(¥138 级别) | +| 显示 | 0.96" OLED 128×64 | 可信 | +| 供电 | CR2032 ×1 或 2×LR44 | 待确认(CR2032 概率大) | +| 镊子开口 | 2~3mm | 可信 | +| 自动关机 | 有 | 可信 | + +### 1.2 从规格反推硬件框架 + +``` +三频点(100Hz/1kHz/10kHz)+ 自动量程 + 1% 精度 + OLED 显示 + ¥138 成本 + ↓ +必须用 MCU 产生测试信号 + 做 DFT 解调 +必须用 I-V 转换法(非电桥平衡法,后者成本太高) +MCU 只能是国产 Cortex-M 或 RISC-V +模拟前端只能用通用运放,不可能用 AD8302/AD5933 等专用芯片 + ↓ +典型方案 = MCU (PWM+DAC) + 双运放 + 模拟开关 + OLED +``` + +--- + +## 二、硬件方案推理(最可能的 BOM) + +### 2.1 核心芯片选型 + +#### MCU:GD32F103C8T6 或 APM32F103C8T6 + +``` +为什么选它: + 72MHz Cortex-M3 + 64KB Flash / 20KB RAM — 够跑 DFT + OLED 驱动 + 双 12bit ADC(1Msps) — 同时采电压和电流 + 双 12bit DAC — 产生测试正弦波(或 PWM+LPF) + 多个定时器 — 精确控制采样时序 + 价格 ¥5~8 — 比 STM32 便宜一半 + +替代可能: + - CH32V103 (RISC-V, ¥3~5) — 更便宜,但生态弱 + - AT32F403 (Cortex-M4, ¥6~10) — 有 FPU,计算更快 +``` + +#### 显示:0.96" OLED SSD1306 + +``` +接口:I2C (¥6~8) 或 SPI (¥6~8) +分辨率:128×64 +驱动芯片:SSD1306 +价格:¥6~8(模块)、¥2~4(裸屏 COG) +``` + +#### 双运放:LMV358 或 SGM358 + +``` +用途: + 运放A:I-V 转换器(跨阻放大器),将被测件电流转为电压 + 运放B:电压缓冲/跟随器,提供参考电压 + +为什么选 LMV358: + 轨到轨输出(适合 3.3V 单电源) + 增益带宽积 1MHz(1kHz/10kHz 没问题,100Hz 更是轻松) + 价格 ¥0.5~1.0 + SGM358 是国产替代,¥0.3~0.5 +``` + +#### 模拟开关:74HC4051 或 CD4051 + +``` +用途:自动量程切换——选择不同的参考电阻 R_ref +通道:8 选 1,对应 8 个量程档位 + +量程电阻(典型值): + Ch0: 10Ω (低阻 R 测量) + Ch1: 100Ω (中低阻) + Ch2: 1kΩ (中阻) + Ch3: 10kΩ (中高阻 / 一般 L/C) + Ch4: 100kΩ (高阻) + Ch5: 1MΩ (极高阻 / 小电容) + Ch6: 10MΩ (超高阻 / 极小电容) + Ch7: 空/校准位 + +价格:¥0.5~1.0 +``` + +#### 其他关键器件 + +| 器件 | 型号 | 数量 | 单价 | 用途 | +|------|------|------|------|------| +| 参考电阻 | 0805 1% 金属膜 | 8 | ¥0.08 | 量程网络 | +| 去耦电容 | 0805 100nF + 10μF | 10 | ¥0.03 | 电源去耦 | +| 电池座 | CR2032 贴片 | 1 | ¥1.5 | 供电 | +| 升压 | HT7750 或 S-8351 | 1 | ¥1~2 | 3V→5V(为运放供电) | +| 晶振 | 8MHz 无源 | 1 | ¥0.3 | MCU 主时钟 | +| 按键 | 贴片轻触 | 2 | ¥0.2 | 功能/保持 | +| 镊子 | 镀金磷铜 | 1对 | ¥2~3 | 被测件接触 | +| PCB | 双面板 1.6mm FR4 | 1 | ¥3~4 | 约 60mm×20mm | +| 电池 | CR2032 | 1 | ¥1 | 零售送电池 | + +--- + +### 2.2 系统框图(推理) + +``` + ┌───────────┐ + ┌───┤ CR2032 ├───┐ + │ │ 3V │ │ + │ └───────────┘ │ + ▼ ▼ + ┌───────────┐ ┌───────────┐ + │ 升压 DC-DC │ │ --- │ + │ HT7750 5V │ │ 直接 3.3V │ + │ (供运放) │ │ (供MCU) │ + └─────┬─────┘ └───────────┘ + │ 5V + ▼ +┌─────────────────────────────────────────────────┐ +│ GD32F103C8T6 │ +│ │ +│ DAC0 ──→ LPF ──→ 量程开关(4051) ──→ 镊子探头──┐ │ +│ (选择 R_ref) ↓ │ │ +│ ↓ │ │ +│ ADC0 ←── 运放A(跨阻) ←── 电流信号 ←──┘ │ │ +│ ADC1 ←── 运放B(缓冲) ←── 电压信号 ←─────────┘ │ +│ │ +│ I2C ──→ OLED SSD1306 (128×64) │ +│ GPIO ──→ 按键×2 │ +│ GPIO ──→ ADC 量程切换 LED 指示 │ +│ TIM ──→ 定时触发 ADC 采样 │ +└─────────────────────────────────────────────────┘ +``` + +### 2.3 模拟前端完整拓扑 + +``` + ┌─────────────────────┐ + DAC0 ─── 二阶 LPF ──┬──────┤ 4051 量程开关 │ + (正弦波) (f_c≈30kHz) │ 选择 R_ref[0..7] │ + │ │ │ + │ │ OUT ──┬── 镊子 + │ + │ │ │ │ + │ │ GND │ + │ └─────────────────────┘ + │ │ + │ │ I_dut + │ ▼ + │ ┌──────────┐ + │ │ 运放A │ + │ │ LMV358 │ + │ │ 跨阻放大器│ + │ │ V_I = I │ + │ │ ×Rf │ + │ └────┬─────┘ + │ │ + │ ADC0_CH0 + │ (电流信号) + │ + │ V_dut (经由另一引线取) + │ + └─────────── 运放B ──┬── ADC0_CH1 + LMV358 │ (电压信号) + 缓冲器 │ +``` + +**注意:** 单 ADC 芯片、双通道同时采样,需要 STM32 的 ADC 双规则组模式或注入模式。 + +### 2.4 信号产生(DAC + LPF) + +MCU DAC 生成正弦波,需要经过低通滤波器滤除采样阶梯: + +``` +DAC 输出(12bit,120kHz 更新率 → 每个正弦周期 12 个阶梯): + │ ████ + │ █ ██ ██ + │█ ██ ██ + └──────────────── + +经 2 阶 LPF 后(f_c ≈ 30kHz): + │ ~~~~~~~~ + │ ~~~~~~~~ + │~~~~~~~~ + └──────────────── → 干净正弦波 + +LPF 参数(二阶巴特沃斯,f_c=30kHz): + 运放:用第三个运放(LMV358 是双运放,不够) + 所以 LPF 用无源 RC: + R=1k, C=5.6nF → f_c ≈ 28.4kHz(一阶) + 再加一级 RC:R=1k, C=3.3nF → 二阶共衰减 ~40dB@120kHz +``` + +这里有个问题:LMV358 只有双运放,一个做跨阻(运放A),一个做缓冲(运放B),没有第三个运放做有源 LPF。最可能的做法是: + +1. **无源 RC LPF**:两级 RC 做正弦波滤波(DAC → RC → RC → 4051) +2. **或者直接用 PWM + 有源 LPF**:省掉 DAC,用 MCU 的定时器 PWM 输出,经二阶有源 LPF 得到正弦波——需要一个额外运放 +3. **或者 MCU 内置 DAC 直接输出** + 无源 RC 凑合用 + +¥138 级别的产品,最可能是方案1(无源 RC)。 + +--- + +### 2.5 总体 BOM 成本估算 + +| 编号 | 器件 | 参考型号 | 数量 | 单价¥ | 小计¥ | +|------|------|---------|------|-------|-------| +| 1 | MCU | GD32F103C8T6 | 1 | 6.5 | 6.5 | +| 2 | 运放 | LMV358 / SGM358 | 2 | 0.6 | 1.2 | +| 3 | 模拟开关 | 74HC4051 | 1 | 0.6 | 0.6 | +| 4 | OLED 屏幕 | SSD1306 0.96" 128×64 | 1 | 8.0 | 8.0 | +| 5 | DC-DC 升压 | HT7750 (3V→5V) | 1 | 1.5 | 1.5 | +| 6 | 量程电阻 | 0805 1% 10Ω~10MΩ×8 | 8 | 0.08 | 0.64 | +| 7 | 无源元件 | R/C 若干 | 20 | 0.03 | 0.6 | +| 8 | 晶振 | 8MHz 无源 | 1 | 0.3 | 0.3 | +| 9 | 按键 | 贴片轻触 4pin | 2 | 0.2 | 0.4 | +| 10 | 电池座 | CR2032 贴片 | 1 | 1.5 | 1.5 | +| 11 | 镊子 | 镀金磷铜 | 1对 | 2.5 | 2.5 | +| 12 | PCB | 双面板 60×20mm | 1 | 3.5 | 3.5 | +| 13 | 外壳 | 开模注塑(摊销量) | 1 | 3.0 | 3.0 | +| 14 | 其他(排针、焊锡、包装) | — | 套 | 2.0 | 2.0 | +| | | | | | **¥32.7** | + +**BOM 估算结论:** 硬件 BOM 约 **¥30~35/台**(含外壳、包装),零售 ¥138,毛利约 75%。扣除运营、物流、平台抽成(~15%)、人工,净利润约 35~40%。 + +作为对比,如果换用 AD8302 方案,BOM 将飙升至 ¥60+,¥138 的零售价无法支撑。 + +--- + +## 三、测量原理——I-V 转换 + DFT 方法 + +### 3.1 基本原理 + +LCR-ST1 采用 **I-V 转换法**(也称伏安法、V-I 法): + +``` +向被测件 DUT 注入正弦波 V_source + ↓ +测量 DUT 两端的电压 V_dut +测量流过 DUT 的电流 I_dut(通过跨阻放大器转换为 V_I = I_dut × R_f) + ↓ +计算复阻抗 Z = V_dut / I_dut = R + jX +``` + +**与方案B的核心关系:** LCR-ST1 使用的就是我们在前面讨论的 **DDS 注入 + 阻抗分析** 方法!只不过用 MCU 内置 DAC 替代了独立 DDS 芯片,用通用运放替代了 AD8302/AD8333,是**极致成本优化的方案C的数字IQ + 廉价前端的实现**。 + +### 3.2 测量模型 + +``` + 4051 选通的 R_ref + DAC ──┬─ R_ref ──┬───────── 镊子正极 ──┬── V_dut + │ │ │ + │ ▼ │ + │ ┌──────────┐ │ + │ │ 运放A(跨阻)│ │ + │ │ V_I = I │ │ + │ │ ×R_ref│ │ + │ └──────────┘ │ + │ │ I_dut │ + │ ADC0_CH0 │ + │ │ + │ ADC0_CH1 + └──────────────────────────── 参考地 + + 镊子负极 ───────────────────────── 参考地 +``` + +**重要细节:** 电流测量用的是"跨阻放大器"接法——也就是将运放接成电流→电压转换形式,DUT 电流流过反馈电阻 R_f,产生 V_out = -I_dut × R_f。R_f 就是 4051 选通的量程电阻。 + +### 3.3 等效电路 + +``` + ┌───────────────────┐ + │ DUT │ + │ ┌───────────┐ │ + │ │ │ │ + ├──┤ R_dut+jX │────┤ + │ │ │ │ + │ └───────────┘ │ + └───────────────────┘ + +测量的是 DUT 的复阻抗 Z_dut = V_dut / I_dut + +对于不同 DUT: + 电阻:Z = R + 电感:Z = jωL = j2πfL + 电容:Z = 1/(jωC) = -j/(2πfC) +``` + +### 3.4 自动量程逻辑 + +``` +上电后默认从最大量程(R_ref=10MΩ)开始: + 1. 施加测试信号 + 2. 测量 V_dut 和 V_I + 3. 如果 V_dut < 满量程×0.1 → 切换高一档(R_ref 变小,电流增大) + 4. 如果 V_dut > 满量程×0.9 → 切换低一档(R_ref 变大,电流减小) + 5. 建立稳定后再做 DFT → 计算 L/C/R/Q/D + +量程切换判断:占用 50~200ms +测量+计算:每个频点需 100~500ms +三个频点扫描一次:约 0.5~2s +``` + +--- + +## 四、算法与软件实现详解 + +### 4.1 信号采样与 DFT 解调 + +这是 LCR-ST1 软件的核心。基于 MCU 的 DAC+ADC,通过 DFT 提取幅度和相位。 + +#### 采样时序 + +``` +测试频率 f₀ = 1kHz(举例) + +ADC 采样率 f_s:被配置为 f₀ × 64 = 64kHz + → 每个正弦周期采 64 个点 + → 采样周期 T_s = 15.625μs + → 采集 N = 128 个周期 → 共 8192 个点 → 耗时 128ms + +DAC 更新率:同样是 64kHz,与 ADC 同步 + → DAC 每周期输出 64 个阶梯 ≈ 12 个阶梯已足够平滑 +``` + +#### DFT 计算 + +```c +// ============================================================ +// LCR-ST1 核心:单频 DFT 解调 +// 输入:V_dut[N] 和 V_I[N] 的 ADC 采样值 +// 输出:幅度和相位 +// ============================================================ + +#define F_SAMPLE 64000 // 64kHz 采样率 +#define N_SAMPLES 8192 // 128 个周期 +#define F_SIG 1000 // 1kHz 测试信号 + +// 预计算 sin/cos 表(半波对称压缩) +// 实际上 MCU Flash 够大,可以直接存 64 个点(一个周期) +// 用查表 + 循环索引,避免运行时计算三角函数 +int16_t cos_table[64]; // cos(2π×k/64), k=0..63 +int16_t sin_table[64]; // sin(2π×k/64), k=0..63 + +void DFT_Init(void) { + for (int i = 0; i < 64; i++) { + cos_table[i] = (int16_t)(cosf(2*PI*i/64) * 32767); + sin_table[i] = (int16_t)(sinf(2*PI*i/64) * 32767); + } +} + +// 注意:N_SAMPLES 必须能被样周期数 64 整除! +// 这里 N_SAMPLES = 8192 = 128 × 64 ✅ + +void DFT_Demodulate( + uint16_t *v_dut, // 电压通道采样数组 + uint16_t *v_i, // 电流通道采样数组 + float *mag_dut, // 输出电压幅度 + float *mag_i, // 输出电流幅度 + float *phase_diff // 输出相位差(弧度) +) { + int64_t I_dut = 0, Q_dut = 0; + int64_t I_i = 0, Q_i = 0; + + for (int i = 0; i < N_SAMPLES; i++) { + int tbl_idx = i & 63; // i % 64,查表索引 + + // 电压通道 DFT + I_dut += (int64_t)v_dut[i] * cos_table[tbl_idx]; + Q_dut += (int64_t)v_dut[i] * sin_table[tbl_idx]; + + // 电流通道 DFT + I_i += (int64_t)v_i[i] * cos_table[tbl_idx]; + Q_i += (int64_t)v_i[i] * sin_table[tbl_idx]; + } + + // 归一化为幅度 + // |V| = sqrt(I² + Q²) × 2/N_SAMPLES + float mag_I_dut = sqrtf(I_dut*I_dut + Q_dut*Q_dut); + float mag_I_i = sqrtf(I_i*I_i + Q_i*Q_i); + + float norm = 2.0f / (float)N_SAMPLES * (3.3f / 4096.0f); + // 注意:12bit ADC,满量程 3.3V,4096 码值 + + *mag_dut = mag_I_dut * norm; // V_dut 幅度(伏) + *mag_i = mag_I_i * norm; // V_i 幅度(伏) + + // 相位差 = atan2(Q, I) 的差值 + float phase_dut = atan2f(Q_dut, I_dut); + float phase_i = atan2f(Q_i, I_i); + *phase_diff = phase_i - phase_dut; + + // 归一化到 -π ~ π 范围 + if (*phase_diff > PI) *phase_diff -= 2*PI; + if (*phase_diff < -PI) *phase_diff += 2*PI; +} + +// 对 GD32F103(无 FPU)运行的优化: +// 以上计算中有 sqrtf、atan2f 等浮点运算,FPU 在 M3 下不存在 +// 实际实现中,多半用查表 + CORDIC 或 Q15 定点数运算 +``` + +#### 无 FPU 定点数优化方案 + +GD32F103 是 Cortex-M3,**无硬件 FPU**。用软件浮点计算 8192 点 DFT 会非常慢(可能耗时 > 1s)。实际产品必须用定点数: + +```c +// 定点数 DFT(Q15 格式) +// 用 32bit 累加器防溢出 + +int32_t I_dut = 0, Q_dut = 0; + +for (int i = 0; i < N_SAMPLES; i++) { + // ADC 12bit 无符号 → 减去偏置 2048 转为有符号 + int16_t vsig = (int16_t)v_dut[i] - 2048; + + // 与查表 Q15 值相乘,64 位累加 + I_dut += ((int32_t)vsig * cos_table[i & 63]) >> 15; + Q_dut += ((int32_t)vsig * sin_table[i & 63]) >> 15; +} + +// 幅度用 |I| + |Q| 最大值近似(省掉 sqrt) +// 对 1% 精度 LCR,足够 +int32_t mag_approx = (abs(I_dut) > abs(Q_dut)) + ? abs(I_dut) + abs(Q_dut) / 4 + : abs(Q_dut) + abs(I_dut) / 4; +// 这给出了带 ±0.5% 误差的幅度估计 + +// 相位用查表法:theta = atan2(Q, I) +// 预存 256 点 arctan 表 +// 因为 I/Q 对称性,只需要存 0~45° +int16_t phase_lut[256]; +// 通过象限映射 + 查表得到相位 +``` + +### 4.2 阻抗计算 + +```c +// 从 DFT 结果计算阻抗 + +// 电流通道:V_I = -I_dut × R_ref +// 所以 I_dut = -V_I / R_ref +// 取模:|I_dut| = |V_I| / R_ref + +// DUT 复阻抗: +// Z_dut = V_dut / I_dut +// = -V_dut × R_ref / V_I +// 取模: +// |Z_dut| = |V_dut| × R_ref / |V_I| +// +// 相位: +// θ_z = phase(V_dut) - phase(V_I) +// = -(phase_i - phase_dut) = -phase_diff + +float Z_mag = mag_dut * R_ref / mag_i; // |Z| (Ω) +float theta = -(*phase_diff); // ∠Z (rad) + +// 分解为电阻和电抗 +float R = Z_mag * cosf(theta); // 等效串联电阻 ESR (Ω) +float X = Z_mag * sinf(theta); // 电抗 (Ω) + +// 识别元件类型 +if (fabsf(X) < fabsf(R) * 0.01f) { + // 纯电阻 + R_display = R; + type = TYPE_RESISTOR; + +} else if (X > 0) { + // 感性:L = X / (2πf) + float L = X / (2.0f * PI * F_SIG); + L_display = L; // 电感值 (H) + Q_display = fabsf(X) / R; // 品质因数 Q + type = TYPE_INDUCTOR; + +} else { + // 容性:C = -1 / (2πf × X) + float C = -1.0f / (2.0f * PI * F_SIG * X); + C_display = C; // 电容值 (F) + D_display = R / fabsf(X); // 损耗因数 D + type = TYPE_CAPACITOR; +} +``` + +### 4.3 多频点策略 + +LCR-ST1 在三个频点之间循环测量: + +``` +100Hz:适合大电容(>1μF)、大电感(>1H) +1kHz:通用频点 +10kHz:适合小电容(<1nF)、小电感(<10μH) +``` + +**频点切换实现:** + +```c +// 三个频点共用同一套 DFT 代码 +// 唯一区别:DAC 波形表更新速率和 ADC 采样率 + +typedef struct { + uint32_t freq; // 测试频率 (Hz) + uint32_t sample_rate; // ADC/DAC 采样率 (Hz) + uint32_t periods; // DFT 采集周期数 + uint32_t total_samples; // 总采样点数 = periods × 64 +} TestFrequency_t; + +TestFrequency_t freqs[] = { + { 100, 6400, 32, 2048}, // 100Hz → 6.4kHz 采样 → 2048 点 → 320ms + { 1000, 64000, 64, 4096}, // 1kHz → 64kHz 采样 → 4096 点 → 64ms + {10000, 640000, 128, 8192}, // 10kHz → 640kHz → 8192 点 → 12.8ms +}; + +// 注意:10kHz 需要 ADC 采样率 640kHz! +// GD32F103 ADC 最大 1Msps → 640kHz 可行 +// 但 DAC 更新频率同样 640kHz → 每个点 ~1.56μs,DMA 驱动 +``` + +### 4.4 自动量程切换(软件实现) + +```c +// 量程电阻表(与 4051 通道对应) +// 选择原则:使 V_dut 接近 ADC 满量程的 30%~80% +// 电压信号过小 → SNR 差 → 精度下降 +// 电压信号过大 → 超出 ADC 范围 → 削波失真 + +const float R_range[] = { + 10.0f, // Ch0: 低阻测量 + 100.0f, // Ch1 + 1000.0f, // Ch2 + 10000.0f, // Ch3 + 100000.0f, // Ch4 + 1000000.0f, // Ch5 + 10000000.0f,// Ch6: 超高阻 + 0.0f // Ch7: 空(校准位) +}; + +uint8_t current_range = 4; // 从 100kΩ 开始 + +uint8_t AutoRange(uint16_t *v_dut, uint16_t *v_i) { + // 计算 V_dut 峰值 + uint16_t v_max = 0, v_min = 4095; + for (int i = 0; i < 64; i++) { // 一个周期的快速检测 + if (v_dut[i] > v_max) v_max = v_dut[i]; + if (v_dut[i] < v_min) v_min = v_dut[i]; + } + uint16_t v_pp = v_max - v_min; + + // 判断是否在最佳区间(ADC 满量程的 20%~80%) + // 12bit ADC → 满量程 4096 → 20%=819, 80%=3277 + if (v_pp < 819 && current_range < 6) { + current_range++; // 增大 R_ref → 电流更小 → V_dut 变大 + return RANGE_CHANGED; + } else if (v_pp > 3277 && current_range > 0) { + current_range--; // 减小 R_ref → 电流更大 → V_dut 变小 + return RANGE_CHANGED; + } + return RANGE_OK; +} +``` + +### 4.5 校准与补偿 + +#### 开路校准(Open Cal) + +``` +不连接 DUT,镊子悬空 → 测量系统偏移量 + Z_open = 非常大 → 近似为 0 电流 + 记录 V_dut_open(运放的失调电压 + 串扰) + 记录相位偏移 + +存储到 EEPROM: + V_dut_offset[频点][量程] + phase_offset[频点][量程] +``` + +#### 短路校准(Short Cal) + +``` +短路镊子 → 测量系统零位阻抗 + 记录 Z_short(导线电阻 + 接触电阻) + +存储到 EEPROM: + R_short[量程] + L_short[量程](引线电感) +``` + +#### 实时校正公式 + +```c +// 每次测量后做校正 + +// Step 1: 减去开路偏移 +V_dut_corrected = V_dut_raw - V_dut_offset[freq][range]; +V_I_corrected = V_I_raw - V_I_offset[freq][range]; + +// Step 2: 减去短路残留 +if (type == TYPE_RESISTOR || type == TYPE_INDUCTOR) { + R_meas = R_meas - R_short[range]; +} + +if (type == TYPE_INDUCTOR) { + L_meas = L_meas - L_short[range]; +} + +// Step 3: 相位校正 +phase_corrected = phase_raw - phase_offset[freq][range]; +``` + +### 4.6 OLED 显示与 UI 逻辑 + +```c +// 显示刷新率:~4Hz(250ms 一次) + +typedef struct { + float value; // 测量值 + uint8_t type; // 元件类型 + float secondary; // 第二参数(Q/D/ESR) + float frequency; // 当前频率 + uint8_t range_idx; // 当前量程 + uint8_t stable; // 读数稳定标志 + uint32_t auto_off_timer;// 自动关机计时 +} DisplayData_t; + +void Display_Update(DisplayData_t *d) { + OLED_Clear(); + + // 主数值(大字体,2 行高度) + char main_val[16]; + FormatValue(d->value, main_val, + (d->type == TYPE_CAPACITOR) ? "F" : + (d->type == TYPE_INDUCTOR) ? "H" : "Ω"); + OLED_PrintBig(0, 0, main_val); + + // 第二参数 + char sec_val[16]; + if (d->type == TYPE_RESISTOR) { + // 电阻模式不显示第二参数 + } else if (d->type == TYPE_INDUCTOR) { + sprintf(sec_val, "Q=%.2f", d->secondary); + } else if (d->type == TYPE_CAPACITOR) { + sprintf(sec_val, "D=%.2f", d->secondary); + } + OLED_PrintSmall(0, 32, sec_val); + + // 频率 + 量程指示 + char info[16]; + sprintf(info, "%dHz", (int)d->frequency); + OLED_PrintSmall(80, 48, info); + + OLED_Display(); +} + +// 数值格式化(自动单位前缀) +void FormatValue(float val, char *out, char *unit) { + char prefix = ' '; + float disp = val; + + if (val >= 1e6f) { disp = val/1e6f; prefix = 'M'; } + else if (val >= 1e3f) { disp = val/1e3f; prefix = 'k'; } + else if (val >= 1.0f) { /* 无前缀 */ } + else if (val >= 1e-3f) { disp = val*1e3f; prefix = 'm'; } + else if (val >= 1e-6f) { disp = val*1e6f; prefix = 'μ'; } + else if (val >= 1e-9f) { disp = val*1e9f; prefix = 'n'; } + else { disp = val*1e12f; prefix = 'p'; } + + sprintf(out, "%.2f %c%s", disp, prefix, unit); +} + +// 自动关机(10 分钟无操作) +void AutoOff_Check(void) { + if (HAL_GetTick() - last_key_press > 600000) { // 10 分钟 + OLED_Clear(); + OLED_PrintCenter("OFF"); + OLED_Display(); + HAL_Delay(1000); + Enter_DeepSleep(); + } +} +``` + +--- + +## 五、整机软件流程图 + +``` + 上电 + │ + 初始化系统 + (RCC/GPIO/DAC/ADC/DMA/TIM/I2C/OLED) + │ + 显示 LOGO "FNIRSI" + 短蜂鸣器响应 + │ + 加载校准参数 + (EEPROM → 开路/短路数据) + │ + 镊子类型检测? + ┌──── 短路检测?→ 进入校准模式 ────┐ + │ (长按按键启动) │ + │ │ + ▼ │ + ┌─────────┐ │ + │ 主测量循环│ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ 自动量程 │ │ + │(4051切换)│ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ DAC 输出│ │ + │ 正弦激励 │ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ ADC采样 │ │ + │ V_dut+V_I│ │ + │ (DMA) │ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ DFT解调 │ │ + │ 幅度+相位 │ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ 阻抗计算 │ │ + │ R / L / C│ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ 校准补偿 │ │ + │ 开路/短路 │ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │ OLED显示 │ │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │按键扫描 │──→ 功能切换/锁定 │ + │自动关机 │──→ 超时休眠 │ + └────┬────┘ │ + │ │ + ┌────┴────┐ │ + │频点切换 │──→ 100Hz/1kHz/10kHz │ + └────┬────┘ │ + │ │ + └──→ 循环 ────────────────────────┘ +``` + +--- + +## 六、与方案B(AD8333 路径)的对比 + +| 对比项 | LCR-ST1 (MCU+DAC+运放) | 我们设计的方案B (AD8333) | +|--------|----------------------|------------------------| +| 激励产生 | MCU DAC + 无源 LPF | DDS AD9834 + 有源 LPF + 变压器 | +| 解调方式 | MCU DFT 定点数 | AD8333 硬件 IQ 解调 | +| ADC 需求 | 12bit × 2ch @ 640kHz | 12bit × 2ch @ 1kHz | +| MCU 算力 | 无 FPU 定点数,50% 占满 | 有 FPU(STM32G4),<10% | +| 测量精度 | ~1%(典型) | ~0.1%(理论) | +| ΔR 分辨率 | ~1~2mΩ | ~0.1~0.3mΩ | +| 动态范围 | ~50~55dB | ~80dB | +| SNR(铝车架场景) | 不可用(<10dB) | 可用(>30dB) | +| 铝制车架检测 | ❌ 不适用 | ✅ 95~99% | + +**核心差异:** LCR-ST1 适用于**离线的、已知好坏的元器件**测量(有足够信号、无强干扰),而我们的方案B需要处理**在线、弱信号、强干扰**的实车检测——两者的 SNR 需求差了两个数量级。 + +具体来说,LCR-ST1 在测量一个 10μH 电感时,信号幅度可能有几百 mV,SNR > 40dB。而方案B在检测铝制车架的 0.3μH 变化时,信号幅度仅几个 mV,环境噪声(发动机、变频器、电源纹波)可达几十 mV——这就需要 AD8333 的差分架构和 80dB 动态范围来应对。 + +--- + +## 七、小结 + +### 7.1 LCR-ST1 的设计哲学 + +``` +¥138 造价 × 75% 毛利 × 30万/年销量 + → BOM ¥30×30万 = ¥900 万/年 + → 生产良率 98%+ + → 退换率 < 5% + +每个元器件选型的边际优化 ¥0.05 都值得做: + 用 1% 电阻而非 0.1% → 省 ¥0.3 + 用 GD32 而非 STM32 → 省 ¥3 + 用 LMV358 而非 OPA2188 → 省 ¥1.5 + 用 CR2032 而非锂电池+充电 → 省 ¥5 +``` + +### 7.2 对我们方案B的启示 + +``` +LCR-ST1 证明了 "MCU·DAC + 通用运放" 的 I-V 法可以做到 1% 精度。 + → 这意味着方案B的核心算法(DFT 解调)在原理上是成熟的。 + +但 LCR-ST1 做不到的事: + ① 无法检测百毫欧级的 ΔR(铝制车架需要 0.1mΩ 分辨率) + ② 无法在线抑制发动机/变频器/电源的共模噪声 + ③ 无法在 3V 单电池供电下驱动大动态范围前端 + +所以 LCR-ST1 是 "够用就好" 的消费级设计, +而我们的方案B是 "不惜成本保信号" 的工业级设计——两者定位完全不同。 +``` + +--- + +## 文档结束 diff --git a/docs/方案B_AD8302接口与IQ解调算法详解.md b/docs/方案B_AD8302接口与IQ解调算法详解.md new file mode 100644 index 0000000..110bd78 --- /dev/null +++ b/docs/方案B_AD8302接口与IQ解调算法详解.md @@ -0,0 +1,1315 @@ +# 方案B DDS注入式检测器——AD8302接口电路与IQ解调算法详解 + +> **作者:** 小德 +> **分类:** 线圈车检 · DDS注入 · AD8302 · IQ解调算法 +> **版本:** V1.0 +> **日期:** 2026-07-05 +> **关联文档:** 铝制车架有效感应方法_v2.0.md(方案B概述) + +--- + +## 前言 + +方案B(DDS注入 + 阻抗分析)的核心是实现复阻抗 Z = R + jX 的实时测量。常见的芯片实现路径有两条: + +| 路径 | 芯片 | 原理 | 精度 | 成本 | +|------|------|------|------|------| +| **路径A:幅度-相位检测** | **AD8302** | 测两路信号的幅度比和相位差 | ★★★★ | 低 | +| 路径B:正交IQ解调 | AD8333 / LTC5599 | 真正正交混频输出 I/Q | ★★★★★ | 中高 | +| 路径C:数字IQ解调(纯MCU) | MCU ADC + 软件 | 直接采样后数字混频 | ★★★ | 零 | + +本文以**路径A(AD8302)**为主、**路径C(纯MCU)**为辅展开,因为这是性价比最高、最适合产品化的路线。 + +--- + +## 一、AD8302 芯片核心特性 + +### 1.1 引脚功能 + +``` +AD8302(14引脚 TSSOP) + + ┌─────────────┐ + │ INPA COMM │← 通道A输入、地 + │ OFSA OFSB │← 输入偏置/耦合方式选择 + │ INPB VREF │← 通道B输入、1.8V参考电压输出 + │ VREF VPOS │← 参考电压、正电源(2.7~5.5V) + │ V_MAG V_PHS │← 幅度比输出、相位差输出 + │ FLTR MSET │← 幅度测量滤波器设置 + │ PHSD PSET │← 相位测量滤波器设置 + └─────────────┘ +``` + +### 1.2 输入输出特性 + +**输入通道特性:** + +| 参数 | 值 | 说明 | +|------|-----|------| +| 输入频率范围 | DC ~ 2.7GHz | 远超车检需求(80~200kHz) | +| 输入幅度范围 | -60dBm ~ 0dBm | (1mVpp ~ 630mVpp @ 50Ω) | +| 输入阻抗 | 3kΩ // 2pF | 高阻抗,可直接耦合 | +| 输入耦合方式 | AC/DC 可选 | 通过 OFSA/OFSB 引脚配置 | + +**输出特性:** + +``` +V_MAG 引脚(幅度比): + + V_MAG = 0.9V + 0.03V × (PA - PB) [dB] + + 其中 PA、PB 为 INPA、INPB 的输入功率(dBm) + + 测量范围:-30dB ~ +30dB(即 0.0316x ~ 31.6x 倍幅度比) + 输出范围:0 ~ 1.8V + 灵敏度:30mV/dB + 比例因子:约 0.26mV/0.01dB + +V_PHS 引脚(相位差): + + V_PHS = 0.9V + 0.01V × (ΦA - ΦB) [度] + + 其中 ΦA、ΦB 为 INPA、INPB 的相位 + + 测量范围:-180° ~ +180° + 输出范围:0 ~ 1.8V + 灵敏度:10mV/度 + 比例因子:约 0.1mV/0.01° +``` + +### 1.3 传递函数曲线 + +``` +V_MAG 输出 V_PHS 输出 +│ │ +1.8V ┌──────── 1.8V ┌──────── +│ │ │ │ +│ │ │ │ +0.9V ┼─────────── 0.9V ┼─────────── +│ │ │ │ +│ │ │ │ +0V └─────────── 0V └─────────── + +30dB 0dB -30dB +180° 0° -180° + (INPA > INPB) (INPA 超前 INPB) +``` + +**车检场景下的工作区间:** + +- 车辆覆盖时,幅度变化约 ±0.01~±0.5dB(对应 V_MAG 变化 ±0.3~±15mV) +- 相位变化约 ±0.01°~±2°(对应 V_PHS 变化 ±0.1~±20mV) +- **关键看 ADC 分辨率能否分辨这几个 mV 级别的变化量** + +--- + +## 二、AD8302 与 MCU 的接口电路设计 + +### 2.1 系统整体框图 + +``` + ┌─────────────────────┐ + │ DDS │ + │ AD9834 │ + │ f₀ = 120kHz │ + └──────┬──────────────┘ + │ 正弦波 V_dds + ▼ + ┌─────────────────────┐ + │ 功放/缓冲 │ + │ OPA2188 │ + │ Gain = 2~5 │ + └──────┬──────────────┘ + │ + ┌──────────────┼──────────────┐ + │ │ │ + ▼ ▼ ▼ + ┌───────────┐ ┌───────────┐ ┌───────────┐ + │ 衰减器 │ │ 变压器 │ │ 阻抗匹配 │ + │ 电阻分压 │ │ 1:N升压 │ │ 网络 │ + │ -20~-30dB │ │ │ │ │ + └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ + │ │ │ + │ ┌────┴────┐ │ + │ │ 线圈 │ │ + │ │ (100~ │ │ + │ │ 300μH) │ │ + │ └─────────┘ │ + │ │ │ + │ ┌────┴────┐ │ + │ │ 变压器 │ │ + │ │ N:1降压 │ │ + │ └────┬────┘ │ + │ │ │ + ▼ ▼ ▼ + ┌───────────────────────────────────────┐ + │ 信号调理 │ + │ ┌─────────┐ ┌─────────┐ │ + │ │ 缓冲器 │ │ 缓冲器 │ │ + │ │ OPA2188 │ │ OPA2188 │ │ + │ └────┬────┘ └────┬────┘ │ + │ │ │ │ + │ ┌────┴────┐ ┌────┴────┐ │ + │ │ LPF │ │ LPF │ │ + │ │ 300kHz │ │ 300kHz │ │ + │ └────┬────┘ └────┬────┘ │ + │ │ │ │ + │ Ref_IN Meas_IN │ + └───────────────────────────────────────┘ + │ │ + ▼ ▼ + ┌──────────────────────────┐ + │ AD8302 │ + │ INPA(参考) INPB(测量) │ + │ │ + │ V_MAG V_PHS │ + └──────┬──────────┬────────┘ + │ │ + ▼ ▼ + ┌──────────────────────────┐ + │ MCU (STM32G474) │ + │ ADC1_IN1 ADC1_IN2 │ + │ (12bit, 过采样至16bit) │ + │ │ + │ 定时器触发 ADC 采样 │ + │ f_sample = 1kHz │ + │ │ + │ 软件 IQ 解算: │ + │ → ΔR, ΔL 提取 │ + │ → 基线跟踪 │ + │ → 触发判决 │ + └──────────────────────────┘ +``` + +### 2.2 参考通道设计(INPA) + +参考通道从 DDS 输出端直接取信号,经过固定衰减后送入 AD8302 的 INPA。 + +``` +DDS 输出 ──→ 电阻分压衰减器 ──→ 缓冲器 ──→ LPF ──→ INPA + +衰减器设计(典型值 -26dB ≈ 1/20): + + R1=1kΩ + IN ──┬─/\/\/\/──┬── OUT + │ │ + │ R2=51Ω │ + │ │ + GND GND + + 衰减比 = R2/(R1+R2) ≈ 51/1051 ≈ 1/20 ≈ -26dB +``` + +**注意:** 衰减器必须使用**低温度系数**电阻(±25ppm/°C 或更好),因为它是整个系统的幅度参考基准,直接影响 ΔR 的测量精度。 + +### 2.3 测量通道设计(INPB) + +测量通道从线圈响应端取信号,经缓冲后的送入 AD8302 的 INPB。 + +``` +线圈 ──→ 变压器 N:1 ──→ 缓冲器 ──→ LPF ──→ INPB + +变压器匝比: + - 激励侧升压:1:3 ~ 1:5(提升线圈激励电流,增加 SNR) + - 接收侧降压:5:1 ~ 3:1(恢复至 ADC/AD8302 可接受电平) +``` + +### 2.4 低通滤波器(LPF)设计 + +目的是滤除带外噪声和高次谐波,同时保持激励频率(120kHz)信号不衰减。 + +``` +二阶巴特沃斯 LPF,截止频率 300kHz: + + R1=10k R2=10k + IN ──┬─/\/\/\/──┬─/\/\/\/──┬── OUT + │ │ │ + │ C1=47pF │ │ C2=100pF + │ │ │ + GND GND GND + + f_c = 1 / (2π × √(R1×R2×C1×C2)) + = 1 / (2π × √(10k×10k×47p×100p)) + = 1 / (2π × 6.86e-6) + ≈ 23.2kHz ❌ 太低了! +``` + +调整元件值使截止频率为 300kHz: + +``` +重新计算: + + R1=2k R2=2k + IN ──┬─/\/\/\/──┬─/\/\/\/──┬── OUT + │ │ │ + │ C1=470pF │ │ C2=220pF + │ │ │ + GND GND GND + + f_c ≈ 1 / (2π × √(2k×2k×470p×220p)) + ≈ 1 / (2π × 4.55e-7) + ≈ 350kHz ✅ + + 120kHz 处衰减 < 0.5dB + 1MHz 处衰减 > 20dB +``` + +### 2.5 输入电平匹配 + +AD8302 的输入幅度范围是 -60dBm ~ 0dBm(50Ω参考)。为保证最佳线性度,推荐工作点在 **-30dBm ~ -10dBm**。 + +**电平计算(以 120kHz, 3.3V DDS 输出 Vpp 为例):** + +``` +DDS 输出(AD9834):3.3Vpp (50% 占空比时 ≈ 1.65V 振幅) + +参考通道: + - 经 -26dB 衰减器:1.65V × 1/20 = 82.5mVpp + - 82.5mVpp 在 50Ω 上对应功率:P = Vrms²/50 + - Vrms = 82.5mVpp / 2.828 = 29.2mVrms + - P = 0.0292²/50 = 17μW = -17.7dBm ✅ + +测量通道(线圈空载时): + - 变压器匝比 1:3(激励升压),接收 3:1(降压):总增益 ≈ 0dB + - 但线圈有 1~2Ω 直流电阻 + 辐射损耗 + - 信号幅度约 DDS 的 0.7~0.9 倍 + - 预期:60~75mVpp → -20dBm ~ -18dBm ✅ +``` + +### 2.6 MCU ADC 接口 + +``` +AD8302 输出: + + V_MAG ──┬─ 100Ω ──┬── ADC1_IN1 (PA0) + │ │ + │ 1nF === 10nF (去耦) + │ │ + GND GND + + V_PHS ──┬─ 100Ω ──┬── ADC1_IN2 (PA1) + │ │ + │ 1nF === 10nF + │ │ + GND GND + + 100Ω + 1nF 构成简单 RC 低通: + f_c = 1/(2π × 100 × 1nF) ≈ 1.6MHz(去噪,不影响信号) +``` + +**ADC 配置(以 STM32G474 为例):** + +``` +ADC 参数: + 分辨率:12bit(过采样至 16bit,OSR=16) + 采样率:1ksps(每个通道,两个通道) + 采样时间:47.5 个 ADC 时钟周期 + ADC 时钟:60MHz(APB2) + 参考电压:3.3V(VDDA) + +过采样(硬件过采样): + OVFS=4 → 过采样率 16 → 有效分辨率 ~16bit + 等效 LSB = 3.3V / 65536 ≈ 50μV + +V_MAG 信号灵敏度评估: + 铝车架 ΔR = 3% → V_MAG 变化约 1.5~2mV + 50μV LSB → 约 30~40 个 LSB 的变化 + SNR ≈ 36dB → 足够可靠(需求 SNR > 20dB) +``` + +**DMA 配置:** + +``` +双通道 DMA 循环采样: + ADC1 → DMA1_CH1 → buffer[128](每通道 64 点双缓冲) + 半满中断 / 满中断 → 触发数据处理 + +定时器触发: + TIM6(1kHz)→ TRGO → ADC1 启动转换 +``` + +### 2.7 PCB 布局关键要点 + +``` +┌────────────────────────────────────┐ +│ AD8302 布局注意事项 │ +├────────────────────────────────────┤ +│ │ +│ ① 模拟地与数字地单点连接 │ +│ AD8302下方开槽隔离 │ +│ │ +│ ② 参考通道和测量通道走线等长 │ +│ 减少路径引入的额外相位差 │ +│ │ +│ ③ V_MAG 和 V_PHS 输出走线远离 │ +│ DDS 高频信号线 │ +│ │ +│ ④ 电源去耦: │ +│ VPOS 引脚:100nF + 10μF 就近放置 │ +│ 每颗运放:100nF │ +│ │ +│ ⑤ DDS 时钟源远离模拟前端 │ +│ 晶振/时钟走线包地 │ +│ │ +│ ⑥ 变压器靠近 AD8302 输入引脚 │ +│ LPF 元件靠近 AD8302 │ +│ │ +└────────────────────────────────────┘ +``` + +--- + +## 三、AD8302 标定与校准 + +### 3.1 出厂/上电校准 + +在已知空载条件下(无车、已知环境),测量 V_MAG 和 V_PHS 作为空载基准: + +``` +步骤: + 1. 确认线圈已连接,周围 2m 内无金属 + 2. 等待 5s(让 AD8302 和 DDS 温漂稳定) + 3. 采集 100 个 V_MAG 和 V_PHS 样本 + 4. 计算中值作为 V_MAG₀ 和 V_PHS₀ + 5. 计算噪声标准差 σ_MAG 和 σ_PHS + +存储校准参数: + Cal = {V_MAG₀, V_PHS₀, σ_MAG, σ_PHS, T_cal} +``` + +### 3.2 增益/相位系数标定 + +虽然 AD8302 的 datasheet 给出了 30mV/dB 和 10mV/° 的标称值,实际每颗芯片有细微差异,建议在产线标定: + +``` +标定方法(使用标准阻抗盒): + + ① 接入已知 R 和 L 的标准负载: + R_load = R₀ + ΔR_cal(如 0Ω、0.5Ω、1Ω、2Ω) + L_load = L₀ + ΔL_cal(如 +1μH、+2μH、+5μH) + + ② 记录每种负载下的 V_MAG、V_PHS + + ③ 线性回归得到实际系数: + k_mag = ΔV_MAG / Δ(dB) [V/dB] + k_phs = ΔV_PHS / Δ(deg) [V/deg] + + ④ 每台设备存储 k_mag、k_phs 到 EEPROM/Flash +``` + +### 3.3 温漂校准 + +``` +在工作温度范围(-20°C ~ +70°C)内采集: + + ΔV_MAG_T(T) = V_MAG(T) - V_MAG(25°C) + ΔV_PHS_T(T) = V_PHS(T) - V_PHS(25°C) + + 拟合为二阶多项式: + ΔV_MAG_T(T) = a₂T² + a₁T + a₀ + ΔV_PHS_T(T) = b₂T² + b₁T + b₀ + + 运行时补偿: + V_MAG_comp = V_MAG_raw - ΔV_MAG_T(T_current) + V_PHS_comp = V_PHS_raw - ΔV_PHS_T(T_current) +``` + +--- + +## 四、IQ 解调算法——从 AD8302 输出到 ΔR、ΔL + +### 4.1 算法概述 + +AD8302 直接给出的是**幅度比 G**和**相位差 Φ**,我们需要将其转换为**电阻变化 ΔR**和**电感变化 ΔL**。 + +``` +AD8302 输出 ──→ 幅度比 G (dB) ──→ |Z|/|Z₀| ──→ ΔR, ΔL + ──→ 相位差 Φ (deg) ──→ ∠Z - ∠Z₀ ──┘ +``` + +### 4.2 第一步:原始量采样 + +``` +每 1ms(1kHz 采样率): + + [0] 读取 V_MAG_raw(ADC 码值) + [1] 读取 V_PHS_raw(ADC 码值) + + [2] 转换为电压: + V_MAG = V_MAG_raw × (3.3V / 65536) [16bit ADC] + V_PHS = V_PHS_raw × (3.3V / 65536) + + [3] 温度补偿: + V_MAG = V_MAG - ΔV_MAG_T(T_sensor) + V_PHS = V_PHS - ΔV_PHS_T(T_sensor) + + [4] 转换为幅度比和相位差: + G_dB = (V_MAG - 0.9V) / k_mag [dB] + Φ_deg = (V_PHS - 0.9V) / k_phs [度] + + 注意:k_mag ≈ 0.03V/dB, k_phs ≈ 0.01V/° +``` + +### 4.3 第二步:相对于空载基线的变化量 + +``` + ΔG_dB = G_dB - G₀_dB (幅度比变化,单位 dB) + ΔΦ_deg = Φ_deg - Φ₀_deg (相位差变化,单位 度) + + 其中 G₀_dB、Φ₀_deg 为空载基准值(从校准参数读取) +``` + +### 4.4 第三步:从幅度和相位提取 ΔR 和 ΔL + +**关键数学推导:** + +设空载时线圈复阻抗为 Z₀ = R₀ + jωL₀,模和相角为: +``` +|Z₀| = √(R₀² + (ωL₀)²) +∠Z₀ = arctan(ωL₀ / R₀) +``` + +车辆覆盖后阻抗变为 Z = R₀ + ΔR + jω(L₀ + ΔL): +``` +|Z| = √((R₀+ΔR)² + (ωL₀+ωΔL)²) +∠Z = arctan((ωL₀+ωΔL) / (R₀+ΔR)) +``` + +AD8302 输出反映了这些变化: +``` +幅度比变化:ΔG_dB = 20 × log₁₀(|Z| / |Z₀|) +相位差变化:ΔΦ_deg = (∠Z - ∠Z₀) × 180/π × sign_correction +``` + +但由于 Z 是 R 和 L 的耦合函数,从 ΔG 和 ΔΦ 反推 ΔR 和 ΔL 需要对非线性方程组求解。 + +**对小信号(ΔR ≪ R₀, ΔL ≪ L₀)可用一阶线性近似:** + +``` +定义阻抗矩阵 J: + + [ ΔG_linear ] = J × [ ΔR ] + [ ΔΦ_rad ] [ ωΔL ] + +其中: + ΔG_linear = ln(10)/20 × ΔG_dB ≈ 0.1151 × ΔG_dB + ΔΦ_rad = ΔΦ_deg × π/180 + + J = [ ∂G/∂R ∂G/∂(ωL) ] (在 R₀, ωL₀ 处计算) + [ ∂Φ/∂R ∂Φ/∂(ωL) ] +``` + +**解析结果(非常重要):** + +``` +设 α = R₀ / |Z₀| = cos(∠Z₀) + β = ωL₀ / |Z₀| = sin(∠Z₀) + +∂G/∂R = α / |Z₀| +∂G/∂(ωL) = β / |Z₀| +∂Φ/∂R = -β / |Z₀| +∂Φ/∂(ωL) = α / |Z₀| +``` + +**即:** + +``` + ΔG_linear ≈ (α × ΔR + β × ωΔL) / |Z₀| + ΔΦ_rad ≈ (-β × ΔR + α × ωΔL) / |Z₀| +``` + +**反解 ΔR 和 ΔL:** + +``` + ΔR = |Z₀| × (α × ΔG_linear - β × ΔΦ_rad) + ωΔL = |Z₀| × (β × ΔG_linear + α × ΔΦ_rad) + + 注意 α² + β² = 1(因为 α = cosθ₀, β = sinθ₀),该变换是正交的! +``` + +**即 ΔR 和 ΔL 的解耦计算公式:** + +``` + ΔR = |Z₀| × (cos(∠Z₀) × ΔG_linear - sin(∠Z₀) × ΔΦ_rad) + ΔL = |Z₀| / ω × (sin(∠Z₀) × ΔG_linear + cos(∠Z₀) × ΔΦ_rad) +``` + +**这个公式是方案B从 AD8302 原始输出到 ΔR、ΔL 的核心算法,务必正确实现。** + +### 4.5 算法伪代码 + +```c +// ============================================================ +// 核心算法:AD8302 → ΔR, ΔL +// 运行频率:1kHz(每 1ms 调用一次) +// ============================================================ + +// 校准参数(上电从 EEPROM 读取) +typedef struct { + float V_MAG_0; // 空载 V_MAG 基准电压 + float V_PHS_0; // 空载 V_PHS 基准电压 + float k_mag; // 幅度比系数(V/dB) + float k_phs; // 相位差系数(V/deg) + float R0; // 空载线圈电阻(Ω) + float L0; // 空载线圈电感(H) + float omega; // 激励角频率 = 2π×f₀ + // 温度补偿系数 + float a2, a1, a0; // V_MAG 温漂二阶系数 + float b2, b1, b0; // V_PHS 温漂二阶系数 +} CalParam_t; + +CalParam_t cal; // 全局校准参数 + +// 由校准参数计算的中间量 +float Z0; // |Z₀| = sqrt(R0² + (ωL0)²) +float cos_theta; // cos(∠Z₀) = R0 / Z0 +float sin_theta; // sin(∠Z₀) = ωL0 / Z0 + +void Cal_Init(void) { + cal.omega = 2.0f * 3.14159265f * 120000.0f; // 120kHz + Z0 = sqrtf(cal.R0 * cal.R0 + powf(cal.omega * cal.L0, 2)); + cos_theta = cal.R0 / Z0; + sin_theta = (cal.omega * cal.L0) / Z0; +} + +// 温度补偿 +float Compensate_MAG(float V_mag_raw, float temp) { + float dt = temp - 25.0f; + return V_mag_raw - (cal.a2*dt*dt + cal.a1*dt + cal.a0); +} + +float Compensate_PHS(float V_phs_raw, float temp) { + float dt = temp - 25.0f; + return V_phs_raw - (cal.b2*dt*dt + cal.b1*dt + cal.b0); +} + +// 核心:从 AD8302 输出计算 ΔR 和 ΔL +void AD8302_To_DeltaRL( + uint16_t adc_mag, // V_MAG ADC 码值 + uint16_t adc_phs, // V_PHS ADC 码值 + float temp, // 当前温度(°C) + float *delta_R, // 输出:ΔR(Ω) + float *delta_L // 输出:ΔL(H) +) { + // Step 1: ADC 码值 → 电压 + float V_mag_raw = (float)adc_mag * 3.3f / 65536.0f; + float V_phs_raw = (float)adc_phs * 3.3f / 65536.0f; + + // Step 2: 温度补偿 + float V_mag = Compensate_MAG(V_mag_raw, temp); + float V_phs = Compensate_PHS(V_phs_raw, temp); + + // Step 3: 电压 → 幅度比(dB)和相位差(度) + float G_dB = (V_mag - 0.9f) / cal.k_mag; + float Phi_deg = (V_phs - 0.9f) / cal.k_phs; + + // Step 4: 相对于空载基线的变化量 + float dG_dB = G_dB - (cal.V_MAG_0 - 0.9f) / cal.k_mag; + float dPhi_deg = Phi_deg - (cal.V_PHS_0 - 0.9f) / cal.k_phs; + + // Step 5: dB→线性, deg→rad + float dG_lin = 0.115129f * dG_dB; // ln(10)/20 ≈ 0.1151 + float dPhi_rad = dPhi_deg * 0.0174533f; // π/180 ≈ 0.01745 + + // Step 6: 解耦提取 ΔR 和 ΔL(核心公式) + *delta_R = Z0 * (cos_theta * dG_lin - sin_theta * dPhi_rad); + *delta_L = (Z0 / cal.omega) * (sin_theta * dG_lin + cos_theta * dPhi_rad); +} +``` + +### 4.6 简化实现(MCU 资源受限时) + +如果 MCU 不支持浮点运算或三角函数,可以用预计算表: + +```c +// 预计算表(在初始化时计算一次) +// 对于固定频率,cos_theta 和 sin_theta 是常数 + +// 简化公式(避免除法): +// ΔR ≈ K_RR × dG_dB + K_RP × dPhi_deg +// ΔL ≈ K_LR × dG_dB + K_LP × dPhi_deg + +// 预计算常数(在 Cal_Init 中计算): +K_RR = Z0 * cos_theta * 0.115129f; // ΔR 对 dG_dB 的系数 +K_RP = -Z0 * sin_theta * 0.0174533f; // ΔR 对 dPhi_deg 的系数 +K_LR = Z0/cal.omega * sin_theta * 0.115129f; // ΔL 对 dG_dB +K_LP = Z0/cal.omega * cos_theta * 0.0174533f; // ΔL 对 dPhi_deg + +// 运行时只需要 4 次乘法和 2 次加法: +void AD8302_To_DeltaRL_Fast(float dG_dB, float dPhi_deg, + float *dR, float *dL) { + *dR = K_RR * dG_dB + K_RP * dPhi_deg; + *dL = K_LR * dG_dB + K_LP * dPhi_deg; +} +``` + +--- + +## 五、数字滤波与信号处理流水线 + +### 5.1 处理流水线框架 + +``` +ADC 采样 (1kHz) ──→ 预处理 ──→ ⅡR 低通 ──→ 基线跟踪 ──→ 触发判决 ──→ 输出 + + 每个阶段的数据率: + 1kHz → 1kHz → 100Hz → 100Hz → 事件驱动 + ↑ + 基线更新率:0.01~0.05Hz +``` + +### 5.2 ⅡR 低通滤波器设计 + +推荐二阶巴特沃斯低通,截止频率 20Hz(滤除电源纹波和噪声,保留车辆信号): + +```c +// 二阶 IIR 低通滤波器 +// 设计参数:f_c = 20Hz, f_s = 1kHz, 巴特沃斯 +// 传递函数:H(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²) + +typedef struct { + float b0, b1, b2; // 前馈系数 + float a1, a2; // 反馈系数(注意符号约定:y = b0*x + b1*x1 + b2*x2 - a1*y1 - a2*y2) + float x1, x2; // 输入历史 + float y1, y2; // 输出历史 +} IIRFilter_t; + +// 20Hz 低通 @ 1kHz 的系数(巴特沃斯) +// 使用双线性变换法计算得到: +void IIR_LPF20_Init(IIRFilter_t *f) { + f->b0 = 0.001837f; + f->b1 = 0.003674f; + f->b2 = 0.001837f; + f->a1 = -1.822623f; + f->a2 = 0.830472f; + f->x1 = f->x2 = f->y1 = f->y2 = 0.0f; +} + +float IIR_Process(IIRFilter_t *f, float x) { + float y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + - f->a1 * f->y1 - f->a2 * f->y2; + f->x2 = f->x1; + f->x1 = x; + f->y2 = f->y1; + f->y1 = y; + return y; +} + +// 实际使用时,对 ΔR 和 ΔL 各用一个 IIR 滤波器 +IIRFilter_t iir_dR, iir_dL; + +float filtered_dR = IIR_Process(&iir_dR, raw_dR); +float filtered_dL = IIR_Process(&iir_dL, raw_dL); +``` + +### 5.3 降采样 + +滤波后数据从 1kHz 降到 100Hz(每 10ms 处理一次): + +```c +// 每 10ms 执行一次(由定时器触发) +void ProcessLoop_100Hz(void) { + // AD8302 读取已经在 1kHz ISR 中完成 + // 这里处理降采样后的数据 + + float dR_raw = latest_dR; // 最近一次 1kHz 计算的 ΔR + float dL_raw = latest_dL; // 最近一次 1kHz 计算的 ΔL + + // IIR 滤波 + float dR_filt = IIR_Process(&iir_dR, dR_raw); + float dL_filt = IIR_Process(&iir_dL, dL_raw); + + // 基线跟踪 + BaselineTrack(dR_filt, dL_filt); + + // 触发判决 + TriggerDecision(dR_filt - baseline_dR, dL_filt - baseline_dL); +} +``` + +--- + +## 六、基线跟踪算法(详细实现) + +### 6.1 双基线结构 + +维护两组基线:**快基线**(快速恢复)和**慢基线**(温漂跟踪)。 + +```c +typedef struct { + // 快基线(车辆离开后快速恢复) + float dR_fast; // ΔR 快基线值 + float dL_fast; // ΔL 快基线值 + uint32_t cooldown; // 离开计数器 + + // 慢基线(温度漂移跟踪) + float dR_slow; // ΔR 慢基线值 + float dL_slow; // ΔL 慢基线值 + + // 参数 + float alpha_fast; // 快基线学习率(0.01) + float alpha_slow; // 慢基线学习率(0.0005) + uint32_t cooldown_max; // 冷却周期数(100 = 1s @ 100Hz) + + // 输出 + float dR_baseline; // 当前使用的基线值 + float dL_baseline; +} BaselineTracker_t; + +void Baseline_Init(BaselineTracker_t *bt) { + bt->dR_fast = bt->dR_slow = bt->dR_baseline = 0.0f; + bt->dL_fast = bt->dL_slow = bt->dL_baseline = 0.0f; + bt->cooldown = 0; + bt->alpha_fast = 0.01f; + bt->alpha_slow = 0.0005f; + bt->cooldown_max = 100; // 1 秒冷却 +} + +void Baseline_Track(BaselineTracker_t *bt, + float dR, float dL, + uint8_t car_present) { + + if (car_present) { + // 有车 → 冻结所有基线 + bt->cooldown = 0; + return; + } + + if (bt->cooldown < bt->cooldown_max) { + // 冷却期(车辆刚离开,可能有拖尾→基线冻结) + bt->cooldown++; + + // 快基线快速恢复(每步 ~1% 向当前值靠近) + bt->dR_fast += bt->alpha_fast * (dR - bt->dR_fast); + bt->dL_fast += bt->alpha_fast * (dL - bt->dL_fast); + return; + } + + // 冷却结束 → 确认无车 + + // 快基线保持与当前值一致,准备下次车辆到来时快速恢复 + bt->dR_fast = dR; + bt->dL_fast = dL; + + // 慢基线慢速跟踪温漂 + bt->dR_slow += bt->alpha_slow * (dR - bt->dR_slow); + bt->dL_slow += bt->alpha_slow * (dL - bt->dL_slow); + + // 输出基线 = 慢基线(温漂补偿后的真实空载值) + bt->dR_baseline = bt->dR_slow; + bt->dL_baseline = bt->dL_slow; +} +``` + +### 6.2 快速恢复机制(车辆离开后) + +车辆离开瞬间,由于变压器磁芯剩磁、放大器偏置恢复等效应,信号可能需 10~50ms 才能回到真实空载值。 + +```c +// 快速恢复状态机 +// 车辆刚离开 → "预恢复"状态(50ms) +// → 使用快基线 +// → "稳定"状态(500ms 后) +// → 切换到慢基线 + +typedef enum { + BASELINE_STABLE, // 稳态(使用慢基线) + BASELINE_RECOVER, // 预恢复(使用快基线) +} BaselineState_t; + +// 在触发判决中: +// 检测到车辆离开事件: +if (just_left) { + bt->cooldown = 0; + bt->state = BASELINE_RECOVER; + bt->recover_timer = 50; // 50 个 10ms 周期 = 500ms +} +``` + +--- + +## 七、触发判决算法(详细实现) + +### 7.1 多特征模糊触发 + +```c +// ============================================================ +// 触发判决参数 +// ============================================================ +typedef struct { + // 原始阈值 + float dR_trigger; // ΔR 触发阈值(Ω) 推荐:0.005~0.015 + float dL_trigger; // ΔL 触发阈值(μH) 推荐:0.1~0.3 + float dR_release; // ΔR 释放阈值(Ω) 推荐:dR_trigger × 0.6 + float dL_release; // ΔL 释放阈值(μH) 推荐:dL_trigger × 0.6 + + // 微分阈值 + float dRdt_trigger; // ΔR 变化率阈值(Ω/s) + float dLdt_trigger; // ΔL 变化率阈值(μH/s) + + // 模糊权重 + float w_dR; // ΔR 权重 推荐:0.4~0.6 + float w_dL; // ΔL 权重 推荐:0.2~0.3 + float w_dRdt; // 微分权重 推荐:0.1~0.2 + float w_noise; // 噪声自适应 推荐:0.05~0.1 + + // 时间参数 + uint32_t debounce_ms; // 去抖时间(ms) 推荐:30~50 + uint32_t hold_ms; // 存在保持时间(ms)推荐:2000~5000 + + // 自适应参数 + float noise_floor_R; // ΔR 噪声本底(滚动 1s RMS) + float noise_floor_L; // ΔL 噪声本底 +} TriggerParam_t; + +// ============================================================ +// 触发判决状态机 +// ============================================================ +typedef enum { + STATE_IDLE, // 空闲 + STATE_PRE_TRIGGER, // 预触发(去抖确认中) + STATE_TRIGGERED, // 已触发(有车) + STATE_HOLD, // 保持(存在定时器) +} TriggerState_t; + +typedef struct { + TriggerState_t state; + TriggerParam_t param; + + // 去抖计数器 + uint32_t debounce_count; + + // 存在保持定时器 + uint32_t hold_remaining; // 剩余保持时间(ms) + + // 输出 + uint8_t car_present; // 当前是否有车 + uint32_t car_count; // 累计车辆计数 + + // 噪声估计窗口 + float noise_buffer[100]; // 100 点循环缓冲 + uint8_t noise_idx; +} TriggerEngine_t; + +// ============================================================ +// 核心触发判决(每 10ms 执行一次) +// ============================================================ +void Trigger_Process(TriggerEngine_t *te, + float dR, // 相对基线的 ΔR + float dL, // 相对基线的 ΔL + float dRdt, // ΔR 变化率(Ω/s) + float dLdt // ΔL 变化率(μH/s) +) { + // Step 1: 更新噪声本底(仅在无车时) + if (te->state == STATE_IDLE) { + te->noise_buffer[te->noise_idx] = fmaxf(fabsf(dR), fabsf(dL)); + te->noise_idx = (te->noise_idx + 1) % 100; + + // 每 100 点更新一次 RMS 噪声 + if (te->noise_idx == 0) { + float sum_sq = 0; + for (int i = 0; i < 100; i++) + sum_sq += te->noise_buffer[i] * te->noise_buffer[i]; + te->param.noise_floor_R = sqrtf(sum_sq / 100.0f); + te->param.noise_floor_L = te->param.noise_floor_R; // 近似 + } + } + + // Step 2: 计算触发置信度 + float conf; + switch (te->state) { + + case STATE_IDLE: + // 模糊逻辑触发判决 + conf = te->param.w_dR * (dR / te->param.dR_trigger) + + te->param.w_dL * (dL / te->param.dL_trigger) + + te->param.w_dRdt * (fmaxf(dRdt, dLdt) / te->param.dRdt_trigger) + - te->param.w_noise * (te->param.noise_floor_R / te->param.dR_trigger); + + // 归一化触发条件 + if (conf > 1.0f) { + te->debounce_count++; + if (te->debounce_count >= te->param.debounce_ms / 10) { + // 去抖确认 → 进入触发状态 + te->state = STATE_TRIGGERED; + te->debounce_count = 0; + te->car_present = 1; + te->car_count++; + te->hold_remaining = te->param.hold_ms; + } + } else { + te->debounce_count = 0; // 重置去抖 + } + break; + + case STATE_TRIGGERED: + // 有车持续中 + te->hold_remaining = te->param.hold_ms; // 持续刷新保持定时器 + + // 释放条件:两个特征都低于释放阈值 + if (dR < te->param.dR_release && dL < te->param.dL_release) { + te->debounce_count++; + if (te->debounce_count >= te->param.debounce_ms / 10) { + // 确认释放 → 进入保持状态 + te->state = STATE_HOLD; + te->debounce_count = 0; + } + } else { + te->debounce_count = 0; + } + break; + + case STATE_HOLD: + // 存在保持状态(覆盖车底缝隙) + te->hold_remaining -= 10; // 每 10ms 递减 + + // 如果信号重新出现(车辆还在) + if (dR > te->param.dR_trigger || dL > te->param.dL_trigger) { + te->state = STATE_TRIGGERED; + te->hold_remaining = te->param.hold_ms; + break; + } + + // 如果保持定时器超时 + if (te->hold_remaining <= 0) { + te->state = STATE_IDLE; + te->car_present = 0; + } + break; + } +} +``` + +### 7.2 车速估算与谷底检测 + +```c +// ============================================================ +// 车速估算(基于同一线圈前/后沿时差) +// ============================================================ +typedef struct { + float rise_time; // 上升沿 10%~90% 时间(ms) + float fall_time; // 下降沿 90%~10% 时间(ms) + float peak_dR; // 本次车辆 ΔR 峰值 + float peak_dL; // 本次车辆 ΔL 峰值 + float speed_est; // 估计车速(km/h) +} VehicleProfile_t; + +VehicleProfile_t vprof; + +// 在触发上升/下降沿时调用 +void OnTriggerRising(void) { + vprof.rise_time_start = current_time_ms; +} + +void OnTriggerFullyOn(void) { + vprof.rise_time = current_time_ms - vprof.rise_time_start; +} + +void OnTriggerLeaving(void) { + vprof.fall_time_start = current_time_ms; +} + +void OnTriggerFullyOff(void) { + vprof.fall_time = current_time_ms - vprof.fall_time_start; + + // 车速估计(基于已知线圈长度和上升沿时间) + // 假设车辆有效耦合长度 ≈ 线圈长度 + 轴距/2 + float effective_len = coil_length + wheelbase_est / 2.0f; + vprof.speed_est = effective_len / vprof.rise_time * 3.6f; // m/s → km/h +} + +// ============================================================ +// 谷底检测(前车/后车区分) +// ============================================================ +typedef enum { + GAP_NONE, // 无间隙 + GAP_SMALL, // 底盘间隙(属于同一辆车) + GAP_VALLEY, // 车缝(两车之间) +} GapType_t; + +GapType_t DetectGap(float dR, float dL) { + static float dR_prev = 0, dL_prev = 0; + static uint32_t valley_ms = 0; + static uint8_t in_valley = 0; + + // 微分判断是否下降 + float dR_dot = dR - dR_prev; + float dL_dot = dL - dL_prev; + dR_prev = dR; + dL_prev = dL; + + // 检测谷底:dR_dot 从负转正(由降到升) + if (!in_valley && dR_dot < 0 && dR < dR_trigger * 0.5f) { + in_valley = 1; + valley_ms = 0; + } + + if (in_valley) { + valley_ms += 10; // 每 10ms + + // 信号回升 → 谷底结束 + if (dR_dot > 0 && dR > dR_trigger * 0.3f) { + in_valley = 0; + + if (valley_ms > 200) { // 车缝 > 200ms + return GAP_VALLEY; // 判为前后两车 + } else { + return GAP_SMALL; // 判为底盘间隙 + } + } + + // 谷底持续太深 → 车辆离开 + if (dR < dR_release && valley_ms > 500) { + in_valley = 0; + return GAP_VALLEY; + } + } + + return GAP_NONE; +} +``` + +### 7.3 IQ 平面可视化输出(调试用) + +开发调试阶段,可将 IQ 轨迹输出到串口: + +``` +每 10ms 输出一行 CSV: + t_ms, dR_mOhm, dL_uH + +用串口工具接收后可直接绘图: + Excel、Python matplotlib、SerialPlot 等 +``` + +**典型波形解读:** + +``` +纯钢制车通过的 IQ 轨迹: + +dR (mΩ) │ · ← 前轮 + 15 │ · ← 钢底盘主体 + 10 │ · + 5 │ · + 0 └────────────────── + 0 0.5 1.0 1.5 2.0 dL (μH) + +全铝制车通过的 IQ 轨迹: + +dR (mΩ) │ + 30 │ · ← 铝底盘主体 + 20 │ · + 10 │ + 0 └────────────────── + 0 0.2 0.4 0.6 0.8 dL (μH) + +钢铝混合车通过的 IQ 轨迹(典型对角线分布): + +dR (mΩ) │ + 25 │ · ← 铝蒙皮 + 钢骨架 + 20 │ · + 15 │ · + 10 │ · + 5 │ + 0 └────────────────── + 0 0.5 1.0 1.5 2.0 dL (μH) +``` + +--- + +## 八、纯 MCU 数字 IQ 解调方案(备选,零硬件解调器成本) + +如果不用 AD8302,可直接用 MCU 内置 ADC 采样信号,在软件中做数字 IQ 解调。 + +### 8.1 采样要求 + +``` +系统参数: + 激励频率:f₀ = 120kHz + ADC 采样率:f_s = 960kHz(8 倍过采样,每个周期 8 个点) + 采样方式:同步触发(TIM 与 DDS 同步) + + 同时采集两个通道(参考 + 测量): + ADC1: 参考信号 v_ref(t) + ADC2: 测量信号 v_meas(t) + + 每个激励周期采集 8 点,连续采集 N 个周期: + 数据块大小:8 × N 点(N 通常取 50~100) +``` + +### 8.2 数字 IQ 解调算法 + +```c +// ============================================================ +// 数字 IQ 解调 +// 频率 f₀ = 120kHz, f_s = 960kHz +// 每个周期 8 个点,窗口长度 100 个周期 = 800 个采样点 +// ============================================================ + +#define F0 120000.0f // 激励频率 (Hz) +#define FS 960000.0f // 采样率 (Hz) +#define N_CYCLES 100 // 窗口周期数 +#define N_SAMPS (N_CYCLES * 8) // 总采样点数 + +// 预计算的正交参考表(在 init 中计算一次) +float cos_table[N_SAMPS]; +float sin_table[N_SAMPS]; + +void Init_DigitalDemod(void) { + for (int i = 0; i < N_SAMPS; i++) { + float t = (float)i / FS; + cos_table[i] = cosf(2.0f * PI * F0 * t); + sin_table[i] = sinf(2.0f * PI * F0 * t); + } +} + +// 数字 IQ 解调:输入两个通道的原始采样数据 +void DigitalDemod( + float *v_ref, // 参考通道采样数组 [N_SAMPS] + float *v_meas, // 测量通道采样数组 [N_SAMPS] + float *I_out, // 输出:I 分量(同相) + float *Q_out // 输出:Q 分量(正交) +) { + float I_ref = 0, Q_ref = 0; + float I_meas = 0, Q_meas = 0; + + for (int i = 0; i < N_SAMPS; i++) { + // 参考通道 + I_ref += v_ref[i] * cos_table[i]; + Q_ref += v_ref[i] * sin_table[i]; + + // 测量通道 + I_meas += v_meas[i] * cos_table[i]; + Q_meas += v_meas[i] * sin_table[i]; + } + + // 归一化(除以窗口长度) + float inv_N = 1.0f / (float)N_SAMPS; + I_ref *= inv_N; Q_ref *= inv_N; + I_meas *= inv_N; Q_meas *= inv_N; + + // 计算相对幅度比和相位差 + float mag_ref = sqrtf(I_ref * I_ref + Q_ref * Q_ref); + float mag_meas = sqrtf(I_meas * I_meas + Q_meas * Q_meas); + float phase_ref = atan2f(Q_ref, I_ref); + float phase_meas = atan2f(Q_meas, I_meas); + + // 输出 + *I_out = mag_meas / mag_ref; // 归一化幅度 + *Q_out = phase_meas - phase_ref; // 相位差 +} + +// 注意: +// 数字 IQ 方法的刷新率 = f₀ / N_CYCLES = 120kHz / 100 = 1.2kHz +// 可调 N_CYCLES 平衡 SNR 和响应速度 +// N_CYCLES = 100 → 1.2kHz, SNR 高, 响应慢 +// N_CYCLES = 20 → 6kHz, SNR 低, 响应快 +``` + +### 8.3 AD8302 vs 纯MCU 方案对比 + +| 对比项 | AD8302 方案 | 纯 MCU 数字 IQ | +|--------|------------|---------------| +| BOM 成本增量 | +¥8~12 | 零 | +| ΔR 分辨率 | 0.01~0.03Ω | 0.02~0.05Ω | +| 刷新率 | 1kHz | 0.2~6kHz(可调) | +| MCU 算力占用 | 低(~5% CPU) | 中高(~20~40% CPU) | +| 抗混叠要求 | 外置 LPF | 外置抗混叠 LPF(更关键) | +| 开发难度 | 中(硬件+标定) | 高(采样时序+实时性) | +| 调试便利性 | 直观(示波器看 V_MAG/PHS) | 黑盒(全在代码里) | + +**推荐:** 量产产品首选 AD8302 方案,开发验证阶段可用纯 MCU 方案快速原型。 + +--- + +## 九、调试与诊断接口 + +### 9.1 实时数据输出(UART) + +```c +// 调试输出格式(CSV,115200bps) +// 每 10ms 输出一行: + +void DebugOutput(float dR_mOhm, float dL_uH, + float dR_baseline, float dL_baseline, + uint8_t car_state, float temp_C) { + printf("%lu,%0.2f,%0.3f,%0.2f,%0.3f,%d,%0.1f\n", + HAL_GetTick(), + dR_mOhm, // ΔR 单位 mΩ + dL_uH, // ΔL 单位 μH + dR_baseline, // 基线 ΔR 单位 mΩ + dL_baseline, // 基线 ΔL 单位 μH + car_state, // 0=无车 1=有车 + temp_C // 温度 °C + ); +} +``` + +### 9.2 AD8302 自检 + +上电后检查 AD8302 是否正常工作: + +```c +uint8_t AD8302_SelfTest(void) { + // 1. 检查 V_MAG 和 V_PHS 是否在 0~1.8V 范围内 + float V_MAG = ReadAD8302_MAG(); + float V_PHS = ReadAD8302_PHS(); + + if (V_MAG < 0.1f || V_MAG > 1.7f) return 0; // 异常 + if (V_PHS < 0.1f || V_PHS > 1.7f) return 0; // 异常 + + // 2. 检查 VREF 输出是否为 1.8V ±5% + float VREF = ReadAD8302_VREF(); + if (VREF < 1.71f || VREF > 1.89f) return 0; + + // 3. 计算瞬间信噪比 + float mag_stddev = EstimateNoise(V_MAG, 100); // 100 点 + if (mag_stddev > 0.01f) return 0; // 噪声过大 + + return 1; // 自检通过 +} +``` + +--- + +## 十、性能验证与调参指引 + +### 10.1 现场调试步骤 + +``` +Step 1:空载标定 + - 线圈周围无金属 + - 采集 V_MAG₀, V_PHS₀ + - 计算噪声本底 σ_MAG, σ_PHS + +Step 2:模拟车辆(铁板测试) + - 1m×1m 钢板置于线圈正上方 + - 记录 ΔR、ΔL 变化量 + - 验证触发判决是否正常工作 + +Step 3:铝板测试 + - 1m×1m 铝板(3~5mm厚) + - 验证 ΔR 信号是否足够大 + - 调整模糊权重使铝板可靠触发 + +Step 4:实车测试 + - 纯钢、钢铝混合、全铝车辆各 10 次通过 + - 统计触发成功率和响应时间 + +Step 5:环境测试 + - 高温/低温(恒温箱) + - 喷水模拟雨天 + - 验证基线和补偿算法 +``` + +### 10.2 参数调优速查 + +| 现象 | 可能原因 | 调整方向 | +|------|---------|---------| +| 铝车漏触发 | ΔR 阈值太高 | 降低 dR_trigger(如 0.015→0.008Ω) | +| 温漂误触发 | 基线跟踪太慢 | 增大 alpha_slow | +| 雨天后频繁误触发 | 积水漂移 | 增大上升沿速率阈值 | +| 车辆离开后长时间保持"有车" | 存在定时器太长 | 减小 hold_ms | +| 跟车计数不足 | 车缝谷底判断太严 | 减小 T_gap_min | +| 高海拔频繁异常触发 | 匝间放电 | 降低激励电压 / 增强绝缘 | + +--- + +## 文档结束 diff --git a/docs/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md b/docs/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md new file mode 100644 index 0000000..62bc959 --- /dev/null +++ b/docs/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md @@ -0,0 +1,1001 @@ +# 路径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 | 好买 | + +#### 外围元件成本 + +| 类型 | 路径A(AD8302) | 路径B(AD8333) | 路径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~22(MCU本身已有) +外围 ¥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的 2~3 倍,是路径C的 3~4 倍。** + +--- + +### 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 引脚 LFCSP(5mm×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 通道数 | 2(V_MAG, V_PHS) | 2~4(I, Q 或 I+, I-, Q+, Q-) | 2(v_ref, v_meas) | +| 采样率需求 | 1kHz | 1kHz(I/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 关键性能对比 + +| 指标 | 路径A(AD8302) | 路径B(AD8333) | 路径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 关键引脚与功能 + +``` +AD8333(32-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) + 总电流:~36mA(VPOS)+ ~20mA(VNEG) + 总功耗:~280mW + + ※ 双电源供电是路径B的显著缺点——需要负压生成电路。 + ※ 替代方案:使用虚拟地(VREF 作为信号地),但噪声性能会下降。 + +去耦: + VPOS:100nF + 10μF 陶瓷,紧贴引脚 + VNEG:100nF + 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 原始数据采集 + +```c +// ============================================================ +// 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°) +③ 直流偏置:混频器输出存在直流偏置(影响低频频响) +``` + +**校准原理:** + +```c +// ============================================================ +// 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 倍) + +```c +// ============================================================ +// 核心:从校准后的 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) // 输出:ΔL(H) +{ + // 相对于空载基线的变化量 + 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 的算法对比:** + +```c +// 路径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完全通用,直接复用: + +```c +// 从 方案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.25V(VREF/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 采样接口抽象化即可切换 +``` + +--- + +### 八、总结 + +#### 路径B(AD8333)的优缺点 + +**优势:** +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 │ ⚠️ │ ❌ │ ✅ │ + │ 团队新手 │ ✅ │ ❌ │ ⚠️ │ + │ 超跑/铝多 │ ⚠️ │ ✅ │ ❌ │ + │ 双电源禁忌 │ ✅ │ ❌ │ ✅ │ + │ 芯片交期紧 │ ✅ │ ❌ │ ✅ │ + │ 快速原型 │ ⚠️ │ ❌ │ ✅ │ + └────────────┴──────────┴──────────┴───────────┘ +``` + +--- + +## 文档结束 diff --git a/docs/线圈车检器车辆特征判别方法.md b/docs/线圈车检器车辆特征判别方法.md new file mode 100644 index 0000000..24bcf86 --- /dev/null +++ b/docs/线圈车检器车辆特征判别方法.md @@ -0,0 +1,457 @@ +# 线圈式车辆检测器对底盘高低、材质、轮轴及前后车的判别方法 + +> **作者:** 小德 +> **分类:** 线圈车检 · 特征判别 · 信号分析 +> **日期:** 2026-07-05 + +--- + +## 前言 + +传统的线圈车检器(LD/LC 检测器)只输出"有/无车"的存在信号,但在现代停车和交通管理场景中,我们需要挖掘线圈信号中更丰富的信息。同一线圈回路的 ΔL 幅值、相位、时间波形中,蕴藏了底盘高度、金属材质、金属面积比例、轮轴位置乃至跟车状态的密码。 + +本文从电磁场耦合原理出发,逐一拆解每一种特征的判别方法。 + +--- + +## 一、判别底盘高低 + +### 1.1 物理原理 + +底盘高度决定了金属底盘与线圈平面的耦合距离。根据电磁场衰减规律: + +``` +ΔL ≈ -k × (A_metal / h²) × μ_eff + +其中: + h = 底盘离线圈平面的高度 + A_metal = 底盘金属有效面积 + μ_eff = 底盘材质的等效磁导率 + k = 线圈几何因子 +``` + +**关键关系:** ΔL 与 1/h² 成正比。底盘越低,ΔL 越大。 + +### 1.2 信号特征 + +``` +ΔL 幅值(归一化) +│ +│ SUV +│ ╱ ╲ 轿车(底盘低) +│ ╱ ╲ ╱ ̄ ̄ ̄╲ +│ ╱ ╲ ╱ ╲ +│ ╱ ╲ ╲ +│╱ ╲ ╲ +└──────────────────────────────→ 时间 + 低底盘车 ΔL > 高底盘车 ΔL +``` + +- **轿车/跑车**(底盘低,~120~180mm):ΔL 大,信号上升沿陡 +- **SUV/MPV**(底盘中高,~200~300mm):ΔL 中等 +- **卡车/大巴**(底盘高,~400~800mm):ΔL 小,但铁质面积大,两者部分抵消 + +### 1.3 判别方法 + +**幅值归一化法:** + +``` +底盘高度指数 H_idx = ΔL_peak / A_est + +其中 A_est 为金属面积的估计值(见第三节) +H_idx 越大 → 底盘越低 +``` + +**经验阈值参考(基于 2m×0.8m 标准线圈,~100μH):** + +| 车型参考 | H_idx 范围 | 底盘高度估计 | +|---------|-----------|-------------| +| 跑车/轿跑 | > 1.8 | < 150mm | +| 轿车 | 1.3 ~ 1.8 | 150~200mm | +| SUV | 0.8 ~ 1.3 | 200~300mm | +| 轻卡/MPV | 0.5 ~ 0.8 | 300~500mm | +| 大巴/重卡 | < 0.5 | > 500mm | + +**注意事项:** +- 底盘高度和铁质面积是耦合的,单独看 ΔL 幅值无法区分"大铁皮远距离"和"小铁皮近距离" +- 需要结合波形宽度(车长)和波形形态联合判定 +- 铝质底盘(部分高端车)ΔL 偏小,容易误判为"高底盘" + +--- + +## 二、判别铝合金质 / 铁质 + +### 2.1 物理原理 + +铁磁材料(钢、铁)和非铁磁材料(铝、铜)在交变磁场中的响应不同: + +| 特性 | 铁磁材料(铁/钢) | 非铁磁(铝/铜) | +|------|-----------------|----------------| +| 相对磁导率 μr | >> 1(100~5000) | ≈ 1 | +| 电导率 σ | 中等(~10⁷ S/m) | 高(~3.8×10⁷ S/m) | +| 趋肤深度 δ(@100kHz) | ~0.1mm(很小) | ~0.3mm | +| 主导效应 | 磁导率效应 + 涡流 | 纯涡流 | +| 线圈等效 L 变化 | 大幅减小 | 中等减小 | +| 线圈等效 R 变化 | 中等增大 | 大幅增大(涡流损耗大) | + +**核心原理:** 铁质材料因为有高 μr,磁导率效应使磁场更加集中到材料内部,同时极小的趋肤深度意味着涡流集中在表面极薄的一层。铝合金 μr ≈ 1,没有磁导率集中效应,涡流分布更深。 + +### 2.2 判别方法:L-R 相位分解 + +最实用的方法是同时检测线圈的**等效电感变化 ΔL** 和**等效电阻变化 ΔR**(或等效 Q 值变化): + +``` +设线圈复阻抗 Z = R + jωL + +金属覆盖后: + Z' = (R + ΔR) + jω(L + ΔL) + +其中 ΔL < 0(电感减小),ΔR > 0(损耗增加) +``` + +**判别空间:** + +``` + ΔR ↑ + │ + │ · 铝质(ΔR 大,ΔL 中等) + │ + │ + │ · 铁质(ΔR 中等,ΔL 大) + │ + └──────────────────→ |ΔL| +``` + +**材质判别指数 M_idx = |ΔL| / ΔR** + +| M_idx | 判断 | 说明 | +|-------|------|------| +| > 2.0 | 铁质主导 | ΔL 远大于 ΔR,磁导率效应主导 | +| 1.0 ~ 2.0 | 混合材质 | 铁铝混合底盘 | +| < 1.0 | 铝质主导 | ΔR 相对更大,涡流损耗主导 | + +### 2.3 实际限制 + +- 需要检测器硬件支持 **ΔR 检测**(传统 LC 振荡式检测器只输出频率/电感变化,不检测电阻) +- 新型 DDS 注入式或阻抗分析式检测器可以同时测 L 和 R +- 温度对 R 影响较大,需要温漂补偿 +- 底盘表面涂漆、锈蚀会削弱信号 + +--- + +## 三、判别铁质面积 / 铝合金面积 + +### 3.1 多频检测法(频率扫描) + +不同频率下趋肤深度不同,可以间接推断不同深度/不同材质的分布: + +``` +δ = √(2ρ / ωμ_0 μ_r) + +低频(~20kHz):趋肤深度大 → 能"看"到较深层的金属 +高频(~200kHz):趋肤深度小 → 只反映表面 +``` + +**典型频点配置:** + +| 频段 | 频率 | 穿透深度(钢) | 穿透深度(铝) | 用途 | +|------|------|--------------|--------------|------| +| 低频 | 20~40kHz | ~0.2mm | ~0.6mm | 分辨整体铁质体积 | +| 中频 | 80~120kHz | ~0.1mm | ~0.3mm | 综合判别 | +| 高频 | 150~250kHz | ~0.06mm | ~0.2mm | 分辨表面铝层 | + +**面积估计算法:** + +``` +铁质面积 ≈ f₁(|ΔL_low|, |ΔL_mid|) × 校准系数 +铝质面积 ≈ f₂(ΔR_high - ΔR_low, ΔL_high - ΔL_low) × 校准系数 +``` + +### 3.2 单频等效面积法(经济方案) + +如果只有单频检测器,可以通过以下经验公式估计: + +``` +等效金属面积 S_metal ≈ k × |ΔL| × h²_est + +h_est 为估计底盘高度(来自第一节或查表) +k 为线圈几何校准系数 +``` + +**进一步分解为铁质和铝质部分:** + +``` +S_iron ≈ k₁ × (2 × |ΔL| - ΔR × L₀ / R₀) × h² +S_alum ≈ k₂ × (ΔR × L₀ / R₀ - |ΔL|) × h² +``` + +其中 L₀、R₀ 为空载线圈参数。 + +### 3.3 波形包络法与面积比例 + +``` +通过车长方向的 ΔL 包络: + ┌─────────────────┐ + │ ╱ ̄ ̄ ̄╲ │ + │ ╱ ╲ │ + │╱ ╲ │ + └─────────────────┘ + ├── 铁质区 ──┤ 波形饱满,包络平直 + ├── 铝质区 ──┤ 波形下降,包络下凹 +``` + +- **铁质主导段:** ΔL 大、波形饱满、包络顶部平坦 +- **铝质主导段:** ΔL 偏小、波形下凹 + +通过波形包络的分段积分,结合 L-R 分解,可以得出底盘中铁质和铝质的**沿车长方向分布图**。 + +--- + +## 四、判别轮轴位置 + +### 4.1 物理基础 + +轮轴是粗钢质圆柱体,对线圈的耦合方式与大面积底盘不同: + +- 车轮经过时:轮轴作为**集中钢质体**通过线圈上方 +- 轮轴的 ΔL 效应在波形上表现为**局部尖峰**(在平坦底盘波形上的凸起) +- 前后轮的两个峰值间距 = 轴距 + +### 4.2 波形特征 + +``` +ΔL +│ +│ 底盘区 轮轴峰值 +│ ╱ ̄ ̄ ̄ ̄╲ ╱╲ +│ ╱ ╲ ╱ ╲ +│ ╱ 轮轴尖峰 ╲╱ ╲ +│╱ ↑ ╱ ╲ +│ ↑ ╱ ╲ +│ ↑ = 轴距 轮轴尖峰 +└────────────────────────────→ 时间 + + ├── ΔT轴距 ──┤ +``` + +### 4.3 算法实现 + +**步骤一:波形预处理** + +``` +对 ΔL(t) 进行带通滤波(0.5~10Hz),提取出轮轴高频分量 +轮轴信号 S_axle(t) = BPF(ΔL(t)) +``` + +**步骤二:峰值检测** + +``` +在 S_axle(t) 中寻找局部极大值,满足: + 1. S_peak > 底盘平均值的 15%~25% + 2. 峰值间距 > 1m 对应的通过时间(排除噪声) + 3. 连续两个峰值 → 对应前后轮轴 +``` + +**步骤三:轴距计算** + +``` +轴距 = v × ΔT_peak × 比例系数 + +其中 v 为车速(通过前后线圈或同一线圈上升/下降沿估算) +ΔT_peak 为前后两个轮轴峰值的时差 +``` + +**步骤四:车型分类** + +| 轴距范围 | 车型判断 | +|---------|---------| +| < 2.5m | 微小型车 | +| 2.5 ~ 2.8m | 紧凑型/轿车 | +| 2.8 ~ 3.2m | 中型/中大型 | +| > 3.2m | 大型/SUV/轻客 | + +### 4.4 注意事项 + +- **采样率要求:** 至少 100Hz 以上才能可靠捕获轮轴峰值(车速 30km/h 时,轴距2.7m对应通过时间约0.32s,需要>20个采样点) +- **多轴车辆:** 卡车/大巴可能有2~3组轮轴,需要做峰值分组匹配 +- **底盘波形平坦度:** 铝合金或塑料底盘区域波形衰减大,轮轴峰值相对更明显 +- **拖车/挂车:** 牵引车和挂车的轮轴间距特殊,需单独建模 + +--- + +## 五、判别前车 / 后车(跟车状态区分) + +### 5.1 问题定义 + +在连续跟车场景下,线圈必须判出: +1. 前车已离开线圈 → 释放"有车"状态 +2. 后车紧接着进入线圈 → 重新触发"有车"状态 +3. 前后车之间要有明确的"无车"间隔,才能正确计数 + +### 5.2 信号形态分析 + +``` +车辆1(前车) 车缝 车辆2(后车) +╱ ̄ ̄ ̄╲ ╱ ̄ ̄ ̄╲ +╱ ╲ ΔL↓ ╱ ╲ +╱ ╲________╱ ╲ + ↑ 谷底值 +``` + +**三种跟车场景:** + +**场景A:正常跟车(有车缝)** +``` +ΔL 下降到接近基线 → 释放 → 重新触发 +判断:两车明确分开,计数+1 +``` + +**场景B:低速蠕行跟车(车缝极短)** +``` +ΔL 下降但未达释放阈值 → 保持"有车" +判断:保持状态,不额外计数 +需要:动态释放阈值 + 谷底检测 +``` + +**场景C:拖车/挂车(中间有间隙但属于同一车)** +``` +ΔL 在中间下降但轮轴结构连续 +判断:通过轮轴模式匹配识别是否同车 +``` + +### 5.3 谷底检测算法 + +**关键思路:** 不依赖固定的释放阈值,通过波形曲线识别"谷底"形态。 + +``` +状态:有车 + │ + ├── 实时计算 ΔL 的微分 d(ΔL)/dt + │ + ├── d(ΔL)/dt 由负转正(由降到升)→ 检测到局部谷底 + │ └── 记录谷底值 V_valley + │ + ├── V_valley 持续 > 释放阈值 T_release 的持续时间 ΔT_valley + │ └── ΔT_valley > T_gap_min(如 200ms) + │ → 判断为"车缝"(两车之间) + │ → 释放"有车",计数+1,等待后车触发 + │ + └── ΔT_valley < T_gap_min + → 判断为"底盘间隙"(同车部件间缝隙) + → 保持"有车"状态 +``` + +### 5.4 关键参数 + +| 参数 | 推荐值 | 说明 | +|------|--------|------| +| T_gap_min(最小车缝时间) | 150~300ms | 低速跟车时可调大 | +| 谷底相对深度 | > 触发幅值的 60% | 车缝须明显低于底盘峰值 | +| 微分去抖时间 | 30~50ms | 防毛刺导致误判谷底 | +| 低速模式切换 | 车速 < 5km/h 时激活 | 延长 T_gap_min 至 500ms | + +### 5.5 前车/后车的完整判别状态机 + +``` + ┌─────────────────────────────┐ + │ │ + ▼ │ + ┌──────────┐ 触发 ┌──────────┐│ + │ 无车 │ ────────→ │ 有车 ││ + │ (空闲) │ │ (保持) ││ + └──────────┘ └──────────┘│ + ▲ │ │ + │ │ │ + │ ┌──────┴──────┐ │ + │ │ 谷底检测 │ │ + │ │ (微分判据) │ │ + │ └──────┬──────┘ │ + │ │ │ + │ ┌──────────┴──────┐ │ + │ │ ΔT_valley 比较 │──┘ + │ │ T_gap_min 阈值 │ + │ └──────────┬──────┘ + │ │ + │ ┌────────┴────────┐ + │ │ │ + │ ΔT > T_gap ΔT < T_gap + │ │ │ + │ ▼ ▼ + │ ┌──────────┐ ┌──────────┐ + │ │ 释放+计数 │ │ 保持有车 │ + │ │ → 无车 │ │ (同车) │ + │ └──────────┘ └──────────┘ + │ │ + └─────────┘ +``` + +--- + +## 六、综合应用:多特征联合判定流程 + +在实际应用中,单一判据往往不够可靠。推荐按以下流程组合使用: + +``` + 原始 ΔL(t) + ΔR(t) 信号 + │ + ┌─────────────────┼─────────────────┐ + ▼ ▼ ▼ + ┌──────────┐ ┌──────────┐ ┌──────────┐ + │ 波形预处理 │ │ L-R 分解 │ │ 微分提取 │ + │ (滤波去噪) │ │ 材质判别 │ │ 峰值检测 │ + └─────┬────┘ └────┬─────┘ └────┬─────┘ + │ │ │ + ▼ ▼ ▼ + ┌──────────┐ ┌──────────┐ ┌──────────┐ + │ 幅值分析 │ │ 材质指数 │ │ 轮轴定位 │ + │ 底盘高度 │ │ 面积估计 │ │ 轴距计算 │ + └─────┬────┘ └────┬─────┘ └────┬─────┘ + │ │ │ + └───────────────┼───────────────┘ + │ + ▼ + ┌──────────────┐ + │ 综合判定器 │ + │ (决策树/表决) │ + └──────┬───────┘ + │ + ┌───────────────┼───────────────┐ + ▼ ▼ ▼ + ┌──────────┐ ┌──────────┐ ┌──────────┐ + │ 车型大/小 │ │ 材质分类 │ │ 前/后车 │ + │ 底盘高低 │ │ 面积比 │ │ 轴距判断 │ + └──────────┘ └──────────┘ └──────────┘ +``` + +--- + +## 七、硬件能力要求对照 + +| 判别项 | 最低硬件要求 | 推荐硬件能力 | +|--------|------------|-------------| +| 底盘高低 | ΔL 测量(标准 LD 检测器) | ΔL + 基线跟踪 + 温度补偿 | +| 铁质/铝质区分 | ΔL + ΔR 同时测量 | 阻抗分析(100Hz~200kHz) | +| 金属面积估计 | ΔL + ΔR + 频点切换 | 多频扫描(3~5个频点) | +| 轮轴位置 | 100Hz+ 采样率 | 200Hz+ 采样 + 带通滤波 | +| 前/后车区分 | 50Hz+ 采样 + 微分算法 | 100Hz+ 采样 + 谷底检测 | +| 综合判别 | 以上全部 + MCU 处理能力 | ARM Cortex-M4+ 或 DSP | + +--- + +## 八、常见陷阱与注意事项 + +1. **底盘的铁质与铝质是混合的**——没有纯铁或纯铝底盘,实际是不同比例的组合,判别结果应输出"趋向性"而非绝对分类 + +2. **温漂影响 ΔR 远大于 ΔL**——材质判别用的 ΔR 必须有温度补偿机制(参考空载基线 + 温度传感器) + +3. **车身覆盖件(蒙皮)与底盘结构件的区别**——机盖/翼子板常用铝,但底盘骨架是钢,两者的信号叠加需要滤波器分离 + +4. **涂装/锈蚀/污泥**——非导电涂层不影响涡流,但厚泥浆会改变有效耦合距离,雨天湿底盘信号可能增强 + +5. **特种车辆(救护车/消防车)**——大量铝制车身 + 钢制底盘,混合信号需特殊模式识别 + +6. **装防滑链的车辆**——铁链产生大量快速变化的伪轮轴信号,需做频谱异常检测剔除 + +--- + +## 文档结束 diff --git a/docs/车身与线圈相对位置检测分析.md b/docs/车身与线圈相对位置检测分析.md new file mode 100644 index 0000000..510efab --- /dev/null +++ b/docs/车身与线圈相对位置检测分析.md @@ -0,0 +1,160 @@ +# 车身与线圈相对位置对电感变化量、感应能力及触发可靠性的影响分析 + +> **作者:** 小德 +> **分类:** 线圈车检 · 信号分析 +> **日期:** 2026-07-05 + +--- + +## 一、物理基础:线圈磁场分布 + +环形线圈通电后,其正上方的磁通密度分布并非均匀。俯视来看,磁场强度呈如下分布: + +- **线圈导体正上方** —— 磁场最强,涡流耦合最强 +- **线圈中心空洞上方** —— 磁场中等,涡流耦合弱于导体正上方 +- **线圈边缘外侧** —— 磁场急剧衰减,可忽略不计 +- **引线端附近** —— 电流初次流入线圈,磁场略密于远端 + +电感变化量 ΔL 的物理本质:金属底盘涡流产生二次磁场,抵消原线圈磁场。金属覆盖面积越大、越靠近强磁区,ΔL 越大。 + +--- + +## 二、五种覆盖位置的电感变化量差异 + +### 2.1 车辆完全覆盖线圈(理想工况) + +- ΔL 幅值:标称值的 80%~100%(最大) +- 信噪比:最高,最稳定 +- 车型特征完整性:能同时反映底盘高低、铁质面积、轮轴位置 +- 结论:最佳工况,触发和车型判别都最优 + +### 2.2 覆盖线圈左边一半 / 右边一半 + +- ΔL 幅值:完全覆盖的 50%~65% +- 关键问题:磁场分布不均匀导致左右不对称 + - 靠左行驶 → ΔL 偏大 + - 靠右行驶 → ΔL 偏小 +- 车型误差:同一辆车,靠左走像大车,靠右走像小车 +- 现场常见坑:车道偏窄,车辆习惯靠一边 → 触发死区或漏计数 + +### 2.3 覆盖线圈前一半(引线端) + +- ΔL 幅值:完全覆盖的 55%~70% +- 磁场特点:引线端磁场最强,ΔL 相对较大 +- 典型场景:正向单向通行驶入 + +### 2.4 覆盖线圈后一半(远离引线端) + +- ΔL 幅值:完全覆盖的 65%~80% +- 磁场特点:远端磁场稍弱于引线端 +- 实用结论:同一辆车正向驶入和倒车驶入的 ΔL 不同 + +### 2.5 对角线/随机半覆盖 + +- ΔL 幅值:完全覆盖的 45%~55%(最不稳定) +- 涡流回路:不完整、不确定性最大 +- 现场表现:最容易出现触发抖动、反复触发/释放 + +--- + +## 三、感应能力与车型判别能力对比 + +**车型判别的物理基础:** + +车型判别通常看两个指标的组合: +- **ΔL 幅值** —— 对应底盘铁质面积、底盘的金属连续性 +- **ΔL 变化曲线(时间波形)** —— 对应车长、轴距、底盘轮廓 + +**两种常见判别算法:** +- **幅值法**:阈值分段(ΔL < T1=小车, T1<ΔLT2=大车)—— 依赖 ΔL 稳定可重复 +- **波形匹配法**:车辆通过的 ΔL-时间曲线的包络和时长 —— 需要完整覆盖路径 + +**对比表:** + +| 覆盖位置 | ΔL 可重复性 | 触发可靠性 | 车型判别能力 | 主要问题 | +|----------|------------|-----------|-------------|---------| +| 完全覆盖 | 最高 | 最优 | 最优 | 无 | +| 左/右一半 | 低 | 中等 | 差 | 行驶轨迹敏感 | +| 前一半 | 中高 | 较高 | 中等 | 幅值偏小需降阈值 | +| 后一半 | 中高 | 较高 | 中等 | 同上 | +| 对角线~50% | 极低 | 低 | 不可用 | 车型判别基本无效 | + +**核心结论:** 车型判别必须以完全覆盖为前提,否则判出来不如不判。存在检测(有/无)可以容忍半个覆盖,但车型不行。 + +--- + +## 四、确保安全触发和稳定存在状态的设计 + +### 4.1 线圈工艺层面 + +**线圈尺寸匹配原则:** + +``` +线圈宽度 = 车道宽度 × 0.6 ~ 0.65 + +车道 3m → 线圈 1.8m × 0.8m +车道 2.5m → 线圈 1.5m × 0.6m +``` + +- 保证车辆偏左/偏右时至少覆盖线圈 40% 以上面积 +- 极端偏行车道边缘时至少还有 20% 覆盖率兜底 + +**灵敏度设置经验公式:** + +``` +S_set = 0.5 × ΔL_min_cover × 匹配系数 + +ΔL_min_cover = 最恶劣车道位置下的实测 ΔL +匹配系数 = 1.2 ~ 1.5(温度漂移裕量) +``` + +### 4.2 软件逻辑层面 + +**触发判决——两段式确认状态机:** + +``` +[空闲] → ΔL > 触发阈值(持续≥20ms去抖) + → [预触发] → 持续确认 ≥50~100ms + → [确认触发] → 输出"有车" + → 启动存在定时器 +``` + +**存在问题——双重保持机制:** + +``` +[确认有车] + ├─ ΔL > 释放阈值 → 正常保持 + ├─ ΔL < 释放阈值 且 存在定时器未超时 → 软保持 + └─ 存在定时器超时 且 ΔL < 释放阈值 → 释放为无车 +``` + +**推荐参数:** + +| 参数 | 推荐值 | 说明 | +|------|--------|------| +| 触发阈值 T_trigger | ΔL_base + 3σ 噪声 | 高于基线 3 倍噪声幅度 | +| 释放阈值 T_release | ΔL_base + 2σ 噪声 | 带回差,防抖动释放 | +| 去抖时间 | 30 ~ 50ms | 防闪电/电机干扰毛刺 | +| 存在保持时间 | 1 ~ 5s(可配置) | 覆盖车底缝隙空窗期 | +| 保持回差比 | T_release / T_trigger ≈ 0.5 ~ 0.7 | 防高频释放再触发 | + +### 4.3 半覆盖场景的特殊处理 + +当检测到车辆是半覆盖驶入(ΔL 明显低于历史均值且变化率大): + +- 触发阈值:仍用标准值 +- 释放阈值:降低到标准值的 60% +- 存在保持时间:延长到 3~5s +- 目的:防止"车身刚压到又缩回去"的误释放 + +--- + +## 五、总结矩阵 + +| 覆盖情况 | ΔL 相对值 | 触发可靠性 | 车型判别 | 推荐场景 | +|----------|-----------|-----------|---------|---------| +| 完全覆盖 | ~100% | 最优 | 最优 | 标准收费车道 | +| 左/右一半 | 50%~65% | 中等 | 差 | 需加宽线圈/双线圈 | +| 前一半 | 55%~70% | 较高 | 中等 | 正向单向通行 | +| 后一半 | 65%~80% | 较高 | 中等 | 正向单向通行 | +| 对角线~50% | 45%~55% | 低 | 不可用 | 尽量避免 | diff --git a/docs/铝制车架有效感应方法.md b/docs/铝制车架有效感应方法.md new file mode 100644 index 0000000..bb51077 --- /dev/null +++ b/docs/铝制车架有效感应方法.md @@ -0,0 +1,475 @@ +# 铝制车架有效感应方法——从原理到落地的完整拆解 + +> **作者:** 小德 +> **分类:** 线圈车检 · 铝制车架 · 微弱信号检测 +> **日期:** 2026-07-05 + +--- + +## 背景与问题 + +随着汽车轻量化趋势,全铝车架(如奥迪 A8、捷豹 XJ、特斯拉 Model S 部分车型)越来越普遍。传统 LC 振荡式线圈检测器对此类车辆的检测面临挑战: + +- 铝 μr ≈ 1,无磁导率增强效应,ΔL 仅为同尺寸铁质底盘的 1/3~1/5 +- 纯铝底盘车辆通过时,ΔL 可能低至 0.02%~0.05%(传统检测器灵敏度下限约为 0.01%~0.02%) +- 某些超跑的全碳纤维 + 铝制副车架组合,电感变化微乎其微 +- 铝对线圈等效电阻的影响(ΔR)虽比铁质大,但传统检测器不测量 ΔR + +**这意味着:铝制车架是线圈车检器面临的最严峻的信号挑战之一。** + +--- + +## 一、原理层面——为什么铝难检测,以及如何利用铝的特性 + +### 1.1 铝的电磁响应本质 + +| 参数 | 铝(Al) | 铁/钢(Fe/Steel) | 影响 | +|------|---------|------------------|------| +| 相对磁导率 μr | 1.000022 | 100~5000 | 铁有磁场增强效应 | +| 电导率 σ | ~3.8×10⁷ S/m | ~1×10⁷ S/m | 铝导电性更好 | +| 趋肤深度 δ(@100kHz) | ~0.26mm | ~0.18mm(钢) | 铝涡流穿透略深 | +| 复阻抗变化 | ΔL 小 + ΔR 大 | ΔL 大 + ΔR 中 | 两者信号维度不同 | + +**核心结论:** 铁质靠"导磁"增强信号,铝质靠"导电"产生涡流。两者信号落在不同的维度空间——铁在 ΔL 上突出,铝在 ΔR 上突出。 + +### 1.2 铝制车架检测的突破口 + +传统方法只测 ΔL(频率偏移),等于只用一只眼看世界。**铝制车架检测必须从单维(ΔL)转向双维(ΔL + ΔR)检测。** + +``` +传统检测器视角: + 只看 ΔL → 铝制车架:弱信号 ❌ + +改进检测器视角: + 看 ΔL + ΔR → 铝制车架:ΔR 较强 ✅ +``` + +### 1.3 各频率下铝的信号强弱 + +趋肤深度随频率变化,影响涡流耦合效率: + +``` +频率 δ_铝 表现形式 +10kHz ~0.82mm 涡流穿透深,但耦合效率低 +50kHz ~0.37mm 折中 +100kHz ~0.26mm 常用频段,耦合效率较高 +200kHz ~0.18mm 涡流集中在表面 +500kHz ~0.12mm 表面效应显著,ΔR 提升 + +推荐工作频段:80~200kHz(兼顾 ΔL 和 ΔR 信噪比) +``` + +--- + +## 二、电路层面——检测器拓扑与检测方案设计 + +### 2.1 方案选型对比 + +| 方案 | 核心原理 | 铝检测能力 | 复杂度 | 成本 | +|------|---------|-----------|-------|------| +| **方案A:LC 振荡 + ΔR 提取** | 传统振荡器 + 幅度检测 | ★★★ | 低 | 低 | +| **方案B:DDS 注入 + 阻抗分析** | 数字信号注入 + IQ 解调 | ★★★★★ | 高 | 中 | +| **方案C:自平衡电桥** | 交流电桥 + 差分放大 | ★★★★ | 中 | 中 | +| **方案D:脉冲涡流** | 脉冲激励 + 时域分析 | ★★★ | 中 | 低 | + +**推荐:** 新设计优先选 **方案B(DDS 注入式)**,性价比和性能最均衡。 + +### 2.2 方案A:LC 振荡 + ΔR 提取(低成本改造) + +在传统 LC 振荡器基础上增加幅度检测支路: + +``` + ┌─────────────┐ + │ LC 振荡器 │───→ 频率测量 → ΔL + │ (Colpitts) │ + └──────┬──────┘ + │ 振荡幅度 + ▼ + ┌─────────────┐ + │ 幅度检测 │───→ 幅度测量 → ΔR + │ (RMS-DC / │ + │ 包络检波) │ + └─────────────┘ +``` + +**原理:** 铝涡流增加线圈等效串联电阻 → 振荡器 Q 值下降 → 振荡幅度衰减。通过测量幅度变化推算 ΔR。 + +**关键技术细节:** + +- 振荡器须带 **AGC(自动增益控制)**——否则幅度变化会被环路增益补偿掩埋 +- 正确的拓扑:AGC 量固定后,观察**残余幅度波动** +- 也可以不加 AGC,改用**高精度幅度测量 + 幅度/频率联合建模** + +**幅度-电感联合判据:** + +``` +设空载幅度为 V₀,频率为 f₀ +车辆覆盖后幅度为 V₁,频率为 f₁ + +Δf / f₀ ∝ ΔL (传统判据) +ΔV / V₀ ∝ ΔR (新增判据,对铝更敏感) + +铝车架特征:ΔV/V₀ 显著,Δf/f₀ 轻微 +铁车架特征:Δf/f₀ 显著,ΔV/V₀ 中等 +``` + +**ΔR 估算公式:** + +``` +ΔR ≈ R₀ × (V₀/V₁ - 1) × α + +其中 R₀ 为线圈直流+交流电阻(含损耗) +α 为电路拓扑校正因子(≈ 0.5~1.5,需标定) +``` + +### 2.3 方案B:DDS 注入 + IQ 解调(推荐方案) + +这是目前检测铝制车架**最有效的电路架构**。 + +``` + ┌────────────────┐ + │ DDS 信号源 │ + │ (AD9833/AD9850) │ + └───────┬────────┘ + │ 正弦波激励 + ▼ + ┌───────────────────────────────────┐ + │ 线圈接口电路(缓冲/功放) │ + │ 激励线圈 → 检测差分电压 │ + └──────────────┬──────────────────┘ + │ 响应信号 + ▼ + ┌───────────────────────────────────┐ + │ IQ 解调器(AD8302 / AD8333) │ + │ 混频 + LPF → I/Q 分量 │ + └──────┬──────────────┬────────────┘ + ▼ ▼ + ┌──────────┐ ┌──────────┐ + │ I 通道 │ │ Q 通道 │ + │ (电阻分量) │ │ (电抗分量)│ + └─────┬────┘ └─────┬────┘ + ▼ ▼ + ┌──────────────────────────┐ + │ MCU ADC / DSP 采样 │ + │ 计算 Z = R + jX │ + │ 提取 ΔR, ΔL │ + └──────────────────────────┘ +``` + +**为何 IQ 解调有效?** + +- **I 通道(同相分量)** — 正比于等效电阻 R,对铝制车架极度敏感 +- **Q 通道(正交分量)** — 正比于等效电抗 X,对铁质车架更敏感 +- 两者的组合可以分离"材质"和"距离"的影响 + +**复阻抗变化比率(铝车架举例):** + +``` +空载:Z₀ = R₀ + jωL₀ +铝车架覆盖:ΔR/R₀ ≈ 3~8%,ΔL/L₀ ≈ 0.3~1% ← ΔR 比 ΔL 大一个数量级! +铁车架覆盖:ΔR/R₀ ≈ 1~3%,ΔL/L₀ ≈ 2~6% ← ΔL 比 ΔR 大 +``` + +### 2.4 方案C:自平衡电桥(中等成本/性能) + +``` + ┌────┐ + ┌──────┤ R1 ├──────┐ + │ └────┘ │ + ─┤ ├─ 差分放大 → ADC + ~│ ┌────┐ │ + └──────┤ Zx ├──────┘ + └────┘ + 激励源 Zx = 线圈阻抗 + +初始平衡:R1 = |Z₀|(空载线圈) +车辆覆盖:Zx 变化 → 电桥失衡 → 差分输出 +``` + +**优势:** 直接输出与 ΔZ 成正比的电压信号,非常干净。 +**劣势:** 需要高精度平衡电阻(或数控电阻),温漂敏感。 + +### 2.5 电路关键设计要点 + +**① 激励信号质量:** + +``` +频率稳定度:优于 ±10ppm(DDS 可轻松做到) +幅度稳定度:优于 ±0.1%(需 AGC 或参考通道) +谐波失真:THD < -60dB(避免谐波干扰解调) +``` + +**② 接收通道动态范围:** + +``` +铝车架 ΔR 变化:0.5%~10%(典型) +ADC 有效位数:≥ 16bit(至少 14bit ENOB) +动态范围:≥ 80dB +采样率:≥ 100ksps(便于数字滤波) +``` + +**③ 温度补偿:** + +``` +铜线圈 TCR ≈ 3900ppm/°C ← 这是最大的漂移源! +ΔT = 10°C 时,R_coil 变化 ≈ 3.9% → 与铝车架信号量级相当 + +补偿方法: + 1. 线圈附近放置 NTC/Pt1000 温度传感器 + 2. 数字查表补偿 R(T) = R₂₅ × (1 + α(T-25)) + 3. 空载基线实时更新(慢跟踪,排除车辆占用时) +``` + +--- + +## 三、元器件选型层面——关键器件推荐 + +### 3.1 DDS 信号源 + +| 型号 | 最大频率 | 分辨率 | 特点 | +|------|---------|-------|------| +| **AD9833** | 25MHz | 28-bit | 低功耗、SPI、适合基础方案 | +| **AD9834** | 37.5MHz | 28-bit | 内置比较器,可调幅度 | +| **AD9850** | 125MHz | 32-bit | 经典方案,频率精确 | +| **AD9959** | 200MHz | 32-bit | 四通道同步输出(高级方案) | + +**推荐:** AD9834(性价比均衡)或 AD9959(需要多频点扫描时) + +### 3.2 IQ 解调器 + +| 型号 | 工作频率 | 解调方式 | 特点 | +|------|---------|---------|------| +| **AD8302** | DC~2.7GHz | 幅度+相位(单端) | 集成增益/相位检测,最常用 | +| **AD8333** | DC~50MHz | 双路 IQ 解调 | 真正的正交解调,性能更好 | +| **LTC5599** | 0.04~1GHz | IQ 解调器 | 低噪声,高线性度 | +| **SW 解调(MCU)** | 受限于采样率 | 数字 IQ | 零硬件成本,适合低频 | + +**推荐:** AD8302(简易方案)或 AD8333 + MCU 数字滤波(高性能方案) + +### 3.3 采样 ADC + +| 型号 | 分辨率 | 采样率 | 特点 | +|------|-------|-------|------| +| **ADS1256** | 24-bit | 30ksps | Δ-Σ,8通道,适合低频 | +| **AD7760** | 24-bit | 2.5Msps | 高性能,宽带 | +| **ADS131M04** | 24-bit | 64ksps | 4通道同步,功耗低 | +| **内置 MCU ADC** | 12~16bit | >1Msps | STM32G4/G7 系列 16bit | + +**推荐:** STM32G474 内置 12bit ADC(过采样至 16bit)或外挂 ADS1256 + +### 3.4 运放 / 前端 + +| 型号 | 特点 | 用途 | +|------|------|------| +| **OPA2188** | 零漂移、低噪声 | 电桥差分、缓冲 | +| **ADA4522** | 轨到轨、超低噪声 | 前置放大 | +| **THS4531** | 全差分、低功耗 | 驱动 ADC 输入 | + +### 3.5 线圈设计与变压器耦合 + +铝车架检测对线圈要求更高: + +``` +匝数 :4~8 圈(比标准多 1~2 圈,增加电感量提升信噪比) +电感量 :100~300μH(比标准略高) +Q 值 :> 80(空载),Q 值越高,ΔR 检测灵敏度越高 +线径 :≥ 0.75mm²(多股丝包线更好,降低趋肤效应损耗) +尺寸 :推荐 1.8m×0.6m(窄长型,增加电流路径) +``` + +**变压器耦合隔离:** + +``` +DDS 输出 → 变压器 1:N 升压 → 线圈 → 变压器 N:1 -> IQ 解调 + +优势: + - 直流隔离(消除地环路) + - 阻抗匹配(提升 SNR) + - 可通过匝比提升激励电压 + +推荐匝比:1:2~1:5(激励侧),补偿接收侧衰减 +``` + +--- + +## 四、算法层面——微弱信号提取与判别 + +### 4.1 基线建立与实时跟踪 + +铝车架的 ΔR 信号量级与温漂相当,基线算法是成败关键。 + +``` +算法:慢速基线跟踪 + 快速突变检测 + ▲ + 基线更新率:0.01~0.05Hz │ + (只在确认无车时更新) │ + │ + ΔR 基线 ────┘ + + ┌────┐ ┌────┐ + │无车│ │无车│ + └────┘ ┌────────────────┐└────┘ + │ 铝车通过: │ + │ ΔR 快速上升 │ + │ + ΔL 小幅下降 │ + └────────────────┘ +``` + +``` +伪代码: + +baseline_R = R_current // 初始化基线 +α_baseline = 0.0005 // 极慢速学习率 +cooldown_counter = 0 // 车辆离开冷却 + +每采样周期: + if (R_current > baseline_R + R_trigger × 0.8): + // 可能有车 → 停止基线更新 + cooldown_counter = 0 + + else if (cooldown_counter < COOLDOWN_MAX): + // 车辆刚离开,基线冻结防拖尾 + cooldown_counter++ + + else: + // 确认无车 → 慢跟踪基线温漂 + baseline_R += α_baseline × (R_current - baseline_R) +``` + +### 4.2 多特征联合触发的模糊逻辑 + +铝车架不应只依赖单一 ΔL 或 ΔR 阈值: + +``` +输入特征: + f1 = ΔL —— 电感变化(对铁质敏感) + f2 = ΔR —— 电阻变化(对铝质敏感) + f3 = ΔL_short —— 短窗微分(捕捉上升沿速率) + f4 = noise_floor —— 当前噪声本底(自适应阈值用) + +综合触发判据(模糊逻辑): + + 铝车置信度 = w_ΔR × f2 / N_R + w_noise × noise_factor + + 触发条件:铝车置信度 > CONF_THRESHOLD + OR (ΔL > L_threshold_low) // 兼容铁质车 + OR (ΔR > R_threshold_high) // 大铝件单独触发 +``` + +**推荐权重:** + +``` +对铝制车架有利的权重分配: + ΔR 权重 : 0.5~0.6 (铝的主特征) + ΔL 权重 : 0.2~0.3 (辅助,铝也有电抗变化) + 上升沿速率 : 0.1~0.2 (区分车辆和缓慢漂移) + 噪声自适应 : 0.1 (动态阈值) +``` + +### 4.3 相关性差分算法 + +旨在消除温漂和干扰的共模分量: + +``` +ΔR_compensated = ΔR_raw - β × ΔT × TCR_coil + - γ × (ΔL_raw / L₀) × coupling_factor + +其中: + β = 温度补偿系数 + γ = 交叉解耦系数(消除 ΔL 对 ΔR 测量的串扰) +``` + +### 4.4 空载品质因数 Q 监测(自诊断) + +Q 值下降可能意味着线圈问题(断裂、受潮、引线松动): + +``` +Q = ωL / R + +空载 Q 值监控规则: + Q/Q₀ < 0.7 → 警告:线圈可能异常 + Q/Q₀ < 0.5 → 报警:需检修线圈 +``` + +低 Q 值会严重削弱 ΔR 检测灵敏度,铝车架检测对此尤其敏感。 + +### 4.5 软件流程图 + +``` + ┌──────────────────┐ + │ 系统初始化 │ + │ DDS 配置 / ADC │ + │ 基线采集(5s) │ + └────────┬─────────┘ + ▼ + ┌──────────────────┐ + ┌──────│ IQ 解调采样周期 │ + │ │ (每1~5ms) │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 计算 ΔR, ΔL │ + │ │ 温度补偿 │ + │ │ 交叉解耦 │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 噪声本底估计 │ + │ │ (滚动 1s 窗口) │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 模糊逻辑触发判决 │ + │ │ (ΔR + ΔL + 微分) │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 判决是否有车? │──→ 输出状态 + 特征 + │ └────────┬─────────┘ + │ │ + └───────────────┘ + (循环) +``` + +--- + +## 五、整机性能预期 + +| 指标 | 传统 LC 振荡 | DDS 注入 + IQ 解调 | +|------|------------|-------------------| +| ΔL 分辨率 | 0.01%~0.02% | 0.001%~0.005% | +| ΔR 分辨率 | 不支持 | 0.01%~0.05% | +| 铝制车架检测率 | 50%~70%(不可靠) | 95%~99%(可靠) | +| 温漂抑制 | 差(无补偿) | 好(数字补偿+基线跟踪) | +| 车型判别 | 有限(仅ΔL) | 优良(ΔL+ΔR+波形) | +| BOM 成本增量 | 基准 | +¥15~40 | + +--- + +## 六、总结:检测铝制车架的关键措施 + +``` +┌───────────────────────────────────────────────────┐ +│ 铝制车架检测的关键突破 │ +├───────────────────────────────────────────────────┤ +│ │ +│ ① 原理突破:从单维 ΔL 转向双维 ΔL + ΔR │ +│ → 铝在 ΔR 上的信号比 ΔL 强 3~10 倍 │ +│ │ +│ ② 电路突破:从 LC 振荡转向 DDS 注入 + IQ 解调 │ +│ → 复阻抗 Z = R + jX 的分量独立测量 │ +│ │ +│ ③ 器件突破:高 Q 线圈 + 低漂移前端 + 16bit+ ADC │ +│ → 信噪比提升 10~20dB │ +│ │ +│ ④ 算法突破:基线跟踪 + 温漂补偿 + 模糊逻辑触发 │ +│ → 铝/铁/混合材质全覆盖检测 │ +│ │ +└───────────────────────────────────────────────────┘ +``` + +建议从方案B(DDS + IQ 解调)入手做原型验证,这是铝制车架检测的最优功耗与检测率平衡方案。如果老大有现成的硬件平台,我可以协助做具体的参数选型计算。 + +--- + +## 文档结束 diff --git a/docs/铝制车架有效感应方法_v2.0.md b/docs/铝制车架有效感应方法_v2.0.md new file mode 100644 index 0000000..b97e324 --- /dev/null +++ b/docs/铝制车架有效感应方法_v2.0.md @@ -0,0 +1,913 @@ +# 铝制车架有效感应方法——从原理到落地的完整拆解 + +> **作者:** 小德 +> **分类:** 线圈车检 · 铝制车架 · 微弱信号检测 +> **版本:** V2.0 +> **日期:** 2026-07-05 +> **更新内容:** 增补方案B对不同车身材质(钢/钢铝混合/铝)、不同气候与海拔条件的综合表现分析与最优应对措施 + +--- + +## 背景与问题 + +随着汽车轻量化趋势,全铝车架(如奥迪 A8、捷豹 XJ、特斯拉 Model S 部分车型)越来越普遍。传统 LC 振荡式线圈检测器对此类车辆的检测面临挑战: + +- 铝 μr ≈ 1,无磁导率增强效应,ΔL 仅为同尺寸铁质底盘的 1/3~1/5 +- 纯铝底盘车辆通过时,ΔL 可能低至 0.02%~0.05%(传统检测器灵敏度下限约为 0.01%~0.02%) +- 某些超跑的全碳纤维 + 铝制副车架组合,电感变化微乎其微 +- 铝对线圈等效电阻的影响(ΔR)虽比铁质大,但传统检测器不测量 ΔR + +**这意味着:铝制车架是线圈车检器面临的最严峻的信号挑战之一。** + +--- + +## 一、原理层面——为什么铝难检测,以及如何利用铝的特性 + +### 1.1 铝的电磁响应本质 + +| 参数 | 铝(Al) | 铁/钢(Fe/Steel) | 影响 | +|------|---------|------------------|------| +| 相对磁导率 μr | 1.000022 | 100~5000 | 铁有磁场增强效应 | +| 电导率 σ | ~3.8×10⁷ S/m | ~1×10⁷ S/m | 铝导电性更好 | +| 趋肤深度 δ(@100kHz) | ~0.26mm | ~0.18mm(钢) | 铝涡流穿透略深 | +| 复阻抗变化 | ΔL 小 + ΔR 大 | ΔL 大 + ΔR 中 | 两者信号维度不同 | + +**核心结论:** 铁质靠"导磁"增强信号,铝质靠"导电"产生涡流。两者信号落在不同的维度空间——铁在 ΔL 上突出,铝在 ΔR 上突出。 + +### 1.2 铝制车架检测的突破口 + +传统方法只测 ΔL(频率偏移),等于只用一只眼看世界。**铝制车架检测必须从单维(ΔL)转向双维(ΔL + ΔR)检测。** + +``` +传统检测器视角: + 只看 ΔL → 铝制车架:弱信号 ❌ + +改进检测器视角: + 看 ΔL + ΔR → 铝制车架:ΔR 较强 ✅ +``` + +### 1.3 各频率下铝的信号强弱 + +趋肤深度随频率变化,影响涡流耦合效率: + +``` +频率 δ_铝 表现形式 +10kHz ~0.82mm 涡流穿透深,但耦合效率低 +50kHz ~0.37mm 折中 +100kHz ~0.26mm 常用频段,耦合效率较高 +200kHz ~0.18mm 涡流集中在表面 +500kHz ~0.12mm 表面效应显著,ΔR 提升 + +推荐工作频段:80~200kHz(兼顾 ΔL 和 ΔR 信噪比) +``` + +--- + +## 二、电路层面——检测器拓扑与检测方案设计 + +### 2.1 方案选型对比 + +| 方案 | 核心原理 | 铝检测能力 | 复杂度 | 成本 | +|------|---------|-----------|-------|------| +| **方案A:LC 振荡 + ΔR 提取** | 传统振荡器 + 幅度检测 | ★★★ | 低 | 低 | +| **方案B:DDS 注入 + 阻抗分析** | 数字信号注入 + IQ 解调 | ★★★★★ | 高 | 中 | +| **方案C:自平衡电桥** | 交流电桥 + 差分放大 | ★★★★ | 中 | 中 | +| **方案D:脉冲涡流** | 脉冲激励 + 时域分析 | ★★★ | 中 | 低 | + +**推荐:** 新设计优先选 **方案B(DDS 注入式)**,性价比和性能最均衡。 + +### 2.2 方案A:LC 振荡 + ΔR 提取(低成本改造) + +在传统 LC 振荡器基础上增加幅度检测支路: + +``` + ┌─────────────┐ + │ LC 振荡器 │───→ 频率测量 → ΔL + │ (Colpitts) │ + └──────┬──────┘ + │ 振荡幅度 + ▼ + ┌─────────────┐ + │ 幅度检测 │───→ 幅度测量 → ΔR + │ (RMS-DC / │ + │ 包络检波) │ + └─────────────┘ +``` + +**原理:** 铝涡流增加线圈等效串联电阻 → 振荡器 Q 值下降 → 振荡幅度衰减。通过测量幅度变化推算 ΔR。 + +**关键技术细节:** + +- 振荡器须带 **AGC(自动增益控制)**——否则幅度变化会被环路增益补偿掩埋 +- 正确的拓扑:AGC 量固定后,观察**残余幅度波动** +- 也可以不加 AGC,改用**高精度幅度测量 + 幅度/频率联合建模** + +**幅度-电感联合判据:** + +``` +设空载幅度为 V₀,频率为 f₀ +车辆覆盖后幅度为 V₁,频率为 f₁ + +Δf / f₀ ∝ ΔL (传统判据) +ΔV / V₀ ∝ ΔR (新增判据,对铝更敏感) + +铝车架特征:ΔV/V₀ 显著,Δf/f₀ 轻微 +铁车架特征:Δf/f₀ 显著,ΔV/V₀ 中等 +``` + +**ΔR 估算公式:** + +``` +ΔR ≈ R₀ × (V₀/V₁ - 1) × α + +其中 R₀ 为线圈直流+交流电阻(含损耗) +α 为电路拓扑校正因子(≈ 0.5~1.5,需标定) +``` + +### 2.3 方案B:DDS 注入 + IQ 解调(推荐方案) + +这是目前检测铝制车架**最有效的电路架构**。 + +``` + ┌────────────────┐ + │ DDS 信号源 │ + │ (AD9833/AD9850) │ + └───────┬────────┘ + │ 正弦波激励 + ▼ + ┌───────────────────────────────────┐ + │ 线圈接口电路(缓冲/功放) │ + │ 激励线圈 → 检测差分电压 │ + └──────────────┬──────────────────┘ + │ 响应信号 + ▼ + ┌───────────────────────────────────┐ + │ IQ 解调器(AD8302 / AD8333) │ + │ 混频 + LPF → I/Q 分量 │ + └──────┬──────────────┬────────────┘ + ▼ ▼ + ┌──────────┐ ┌──────────┐ + │ I 通道 │ │ Q 通道 │ + │ (电阻分量) │ │ (电抗分量)│ + └─────┬────┘ └─────┬────┘ + ▼ ▼ + ┌──────────────────────────┐ + │ MCU ADC / DSP 采样 │ + │ 计算 Z = R + jX │ + │ 提取 ΔR, ΔL │ + └──────────────────────────┘ +``` + +**为何 IQ 解调有效?** + +- **I 通道(同相分量)** — 正比于等效电阻 R,对铝制车架极度敏感 +- **Q 通道(正交分量)** — 正比于等效电抗 X,对铁质车架更敏感 +- 两者的组合可以分离"材质"和"距离"的影响 + +**复阻抗变化比率(铝车架举例):** + +``` +空载:Z₀ = R₀ + jωL₀ +铝车架覆盖:ΔR/R₀ ≈ 3~8%,ΔL/L₀ ≈ 0.3~1% ← ΔR 比 ΔL 大一个数量级! +铁车架覆盖:ΔR/R₀ ≈ 1~3%,ΔL/L₀ ≈ 2~6% ← ΔL 比 ΔR 大 +``` + +### 2.4 方案C:自平衡电桥(中等成本/性能) + +``` + ┌────┐ + ┌──────┤ R1 ├──────┐ + │ └────┘ │ + ─┤ ├─ 差分放大 → ADC + ~│ ┌────┐ │ + └──────┤ Zx ├──────┘ + └────┘ + 激励源 Zx = 线圈阻抗 + +初始平衡:R1 = |Z₀|(空载线圈) +车辆覆盖:Zx 变化 → 电桥失衡 → 差分输出 +``` + +**优势:** 直接输出与 ΔZ 成正比的电压信号,非常干净。 +**劣势:** 需要高精度平衡电阻(或数控电阻),温漂敏感。 + +### 2.5 电路关键设计要点 + +**① 激励信号质量:** + +``` +频率稳定度:优于 ±10ppm(DDS 可轻松做到) +幅度稳定度:优于 ±0.1%(需 AGC 或参考通道) +谐波失真:THD < -60dB(避免谐波干扰解调) +``` + +**② 接收通道动态范围:** + +``` +铝车架 ΔR 变化:0.5%~10%(典型) +ADC 有效位数:≥ 16bit(至少 14bit ENOB) +动态范围:≥ 80dB +采样率:≥ 100ksps(便于数字滤波) +``` + +**③ 温度补偿:** + +``` +铜线圈 TCR ≈ 3900ppm/°C ← 这是最大的漂移源! +ΔT = 10°C 时,R_coil 变化 ≈ 3.9% → 与铝车架信号量级相当 + +补偿方法: + 1. 线圈附近放置 NTC/Pt1000 温度传感器 + 2. 数字查表补偿 R(T) = R₂₅ × (1 + α(T-25)) + 3. 空载基线实时更新(慢跟踪,排除车辆占用时) +``` + +--- + +## 三、元器件选型层面——关键器件推荐 + +### 3.1 DDS 信号源 + +| 型号 | 最大频率 | 分辨率 | 特点 | +|------|---------|-------|------| +| **AD9833** | 25MHz | 28-bit | 低功耗、SPI、适合基础方案 | +| **AD9834** | 37.5MHz | 28-bit | 内置比较器,可调幅度 | +| **AD9850** | 125MHz | 32-bit | 经典方案,频率精确 | +| **AD9959** | 200MHz | 32-bit | 四通道同步输出(高级方案) | + +**推荐:** AD9834(性价比均衡)或 AD9959(需要多频点扫描时) + +### 3.2 IQ 解调器 + +| 型号 | 工作频率 | 解调方式 | 特点 | +|------|---------|---------|------| +| **AD8302** | DC~2.7GHz | 幅度+相位(单端) | 集成增益/相位检测,最常用 | +| **AD8333** | DC~50MHz | 双路 IQ 解调 | 真正的正交解调,性能更好 | +| **LTC5599** | 0.04~1GHz | IQ 解调器 | 低噪声,高线性度 | +| **SW 解调(MCU)** | 受限于采样率 | 数字 IQ | 零硬件成本,适合低频 | + +**推荐:** AD8302(简易方案)或 AD8333 + MCU 数字滤波(高性能方案) + +### 3.3 采样 ADC + +| 型号 | 分辨率 | 采样率 | 特点 | +|------|-------|-------|------| +| **ADS1256** | 24-bit | 30ksps | Δ-Σ,8通道,适合低频 | +| **AD7760** | 24-bit | 2.5Msps | 高性能,宽带 | +| **ADS131M04** | 24-bit | 64ksps | 4通道同步,功耗低 | +| **内置 MCU ADC** | 12~16bit | >1Msps | STM32G4/G7 系列 16bit | + +**推荐:** STM32G474 内置 12bit ADC(过采样至 16bit)或外挂 ADS1256 + +### 3.4 运放 / 前端 + +| 型号 | 特点 | 用途 | +|------|------|------| +| **OPA2188** | 零漂移、低噪声 | 电桥差分、缓冲 | +| **ADA4522** | 轨到轨、超低噪声 | 前置放大 | +| **THS4531** | 全差分、低功耗 | 驱动 ADC 输入 | + +### 3.5 线圈设计与变压器耦合 + +铝车架检测对线圈要求更高: + +``` +匝数 :4~8 圈(比标准多 1~2 圈,增加电感量提升信噪比) +电感量 :100~300μH(比标准略高) +Q 值 :> 80(空载),Q 值越高,ΔR 检测灵敏度越高 +线径 :≥ 0.75mm²(多股丝包线更好,降低趋肤效应损耗) +尺寸 :推荐 1.8m×0.6m(窄长型,增加电流路径) +``` + +**变压器耦合隔离:** + +``` +DDS 输出 → 变压器 1:N 升压 → 线圈 → 变压器 N:1 -> IQ 解调 + +优势: + - 直流隔离(消除地环路) + - 阻抗匹配(提升 SNR) + - 可通过匝比提升激励电压 + +推荐匝比:1:2~1:5(激励侧),补偿接收侧衰减 +``` + +--- + +## 四、算法层面——微弱信号提取与判别 + +### 4.1 基线建立与实时跟踪 + +铝车架的 ΔR 信号量级与温漂相当,基线算法是成败关键。 + +``` +算法:慢速基线跟踪 + 快速突变检测 + ▲ + 基线更新率:0.01~0.05Hz │ + (只在确认无车时更新) │ + │ + ΔR 基线 ────┘ + + ┌────┐ ┌────┐ + │无车│ │无车│ + └────┘ ┌────────────────┐└────┘ + │ 铝车通过: │ + │ ΔR 快速上升 │ + │ + ΔL 小幅下降 │ + └────────────────┘ +``` + +``` +伪代码: + +baseline_R = R_current // 初始化基线 +α_baseline = 0.0005 // 极慢速学习率 +cooldown_counter = 0 // 车辆离开冷却 + +每采样周期: + if (R_current > baseline_R + R_trigger × 0.8): + // 可能有车 → 停止基线更新 + cooldown_counter = 0 + + else if (cooldown_counter < COOLDOWN_MAX): + // 车辆刚离开,基线冻结防拖尾 + cooldown_counter++ + + else: + // 确认无车 → 慢跟踪基线温漂 + baseline_R += α_baseline × (R_current - baseline_R) +``` + +### 4.2 多特征联合触发的模糊逻辑 + +铝车架不应只依赖单一 ΔL 或 ΔR 阈值: + +``` +输入特征: + f1 = ΔL —— 电感变化(对铁质敏感) + f2 = ΔR —— 电阻变化(对铝质敏感) + f3 = ΔL_short —— 短窗微分(捕捉上升沿速率) + f4 = noise_floor —— 当前噪声本底(自适应阈值用) + +综合触发判据(模糊逻辑): + + 铝车置信度 = w_ΔR × f2 / N_R + w_noise × noise_factor + + 触发条件:铝车置信度 > CONF_THRESHOLD + OR (ΔL > L_threshold_low) // 兼容铁质车 + OR (ΔR > R_threshold_high) // 大铝件单独触发 +``` + +**推荐权重:** + +``` +对铝制车架有利的权重分配: + ΔR 权重 : 0.5~0.6 (铝的主特征) + ΔL 权重 : 0.2~0.3 (辅助,铝也有电抗变化) + 上升沿速率 : 0.1~0.2 (区分车辆和缓慢漂移) + 噪声自适应 : 0.1 (动态阈值) +``` + +### 4.3 相关性差分算法 + +旨在消除温漂和干扰的共模分量: + +``` +ΔR_compensated = ΔR_raw - β × ΔT × TCR_coil + - γ × (ΔL_raw / L₀) × coupling_factor + +其中: + β = 温度补偿系数 + γ = 交叉解耦系数(消除 ΔL 对 ΔR 测量的串扰) +``` + +### 4.4 空载品质因数 Q 监测(自诊断) + +Q 值下降可能意味着线圈问题(断裂、受潮、引线松动): + +``` +Q = ωL / R + +空载 Q 值监控规则: + Q/Q₀ < 0.7 → 警告:线圈可能异常 + Q/Q₀ < 0.5 → 报警:需检修线圈 +``` + +低 Q 值会严重削弱 ΔR 检测灵敏度,铝车架检测对此尤其敏感。 + +### 4.5 软件流程图 + +``` + ┌──────────────────┐ + │ 系统初始化 │ + │ DDS 配置 / ADC │ + │ 基线采集(5s) │ + └────────┬─────────┘ + ▼ + ┌──────────────────┐ + ┌──────│ IQ 解调采样周期 │ + │ │ (每1~5ms) │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 计算 ΔR, ΔL │ + │ │ 温度补偿 │ + │ │ 交叉解耦 │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 噪声本底估计 │ + │ │ (滚动 1s 窗口) │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 模糊逻辑触发判决 │ + │ │ (ΔR + ΔL + 微分) │ + │ └────────┬─────────┘ + │ ▼ + │ ┌──────────────────┐ + │ │ 判决是否有车? │──→ 输出状态 + 特征 + │ └────────┬─────────┘ + │ │ + └───────────────┘ + (循环) +``` + +--- + +## 五、整机性能预期 + +| 指标 | 传统 LC 振荡 | DDS 注入 + IQ 解调 | +|------|------------|-------------------| +| ΔL 分辨率 | 0.01%~0.02% | 0.001%~0.005% | +| ΔR 分辨率 | 不支持 | 0.01%~0.05% | +| 铝制车架检测率 | 50%~70%(不可靠) | 95%~99%(可靠) | +| 温漂抑制 | 差(无补偿) | 好(数字补偿+基线跟踪) | +| 车型判别 | 有限(仅ΔL) | 优良(ΔL+ΔR+波形) | +| BOM 成本增量 | 基准 | +¥15~40 | + +--- + +## 六、总结:检测铝制车架的关键措施 + +``` +┌───────────────────────────────────────────────────┐ +│ 铝制车架检测的关键突破 │ +├───────────────────────────────────────────────────┤ +│ │ +│ ① 原理突破:从单维 ΔL 转向双维 ΔL + ΔR │ +│ → 铝在 ΔR 上的信号比 ΔL 强 3~10 倍 │ +│ │ +│ ② 电路突破:从 LC 振荡转向 DDS 注入 + IQ 解调 │ +│ → 复阻抗 Z = R + jX 的分量独立测量 │ +│ │ +│ ③ 器件突破:高 Q 线圈 + 低漂移前端 + 16bit+ ADC │ +│ → 信噪比提升 10~20dB │ +│ │ +│ ④ 算法突破:基线跟踪 + 温漂补偿 + 模糊逻辑触发 │ +│ → 铝/铁/混合材质全覆盖检测 │ +│ │ +└───────────────────────────────────────────────────┘ +``` + +建议从方案B(DDS + IQ 解调)入手做原型验证,这是铝制车架检测的最优功耗与检测率平衡方案。如果老大有现成的硬件平台,我可以协助做具体的参数选型计算。 + +--- + +## 七、方案B在不同材质车架下的信号表现 + +### 7.1 纯钢制车架(传统车) + +| 信号维度 | 幅值范围 | 信噪比 | 触发依赖 | +|----------|---------|-------|---------| +| ΔL/L₀ | 2%~6% | ⭐⭐⭐⭐⭐ | ΔL 阈值即可,非常简单 | +| ΔR/R₀ | 1%~3% | ⭐⭐⭐ | 辅助判据 | +| |ΔL|/ΔR 比值 | > 2.0 | 铁质标志性 | + +**IQ 平面表现:** + +``` + I 轴 (ΔR) + ↑ + │ · 铝合金 (I大,Q小) + │ + │ · 钢铝混合 (I中,Q中) + │ + │ · 纯钢制 (I小,Q大) + │ + └──────────────────→ Q 轴 (ΔL) +``` + +- **Q 轴偏移大**:涡流 + 高 μr 磁导率增强效应,电抗变化显著 +- **I 轴偏移小**:钢的电导率较低(~1×10⁷ S/m),涡流损耗相对有限 +- **检测难易度:最简单**,传统 LC 振荡器即可可靠工作 +- **方案B的优势不显著**,但额外提供的 ΔR 信息可用于材质分类 + +**推荐触发策略:** + +``` +以 ΔL 为主判据(阈值设为 ~1.5%),ΔR 作为辅助验证 +由于信号幅度大,无需模糊逻辑,门限判决即可 +``` + +--- + +### 7.2 全铝制车架 + +| 信号维度 | 幅值范围 | 信噪比 | 触发依赖 | +|----------|---------|-------|---------| +| ΔL/L₀ | 0.3%~1% | ⭐⭐ | 仅靠 ΔL 不可靠 | +| ΔR/R₀ | 3%~8% | ⭐⭐⭐⭐ | **主判据** | +| |ΔL|/ΔR 比值 | < 1.0 | 铝质标志性 | + +**IQ 平面表现:** + +- **I 轴偏移大**:铝的高电导率(~3.8×10⁷ S/m)产生强涡流损耗 +- **Q 轴偏移小**:μr≈1,无磁导率增强,电抗变化微弱 +- **检测难易度:最难**,但也恰恰是方案B的**核心价值所在** +- **方案B表现卓越**:ΔR 信号比 ΔL 强 3~10 倍,IQ 解调可精准提取 + +**推荐触发策略:** + +``` +以 ΔR 为主判据(阈值设为 ~1.5%~2%),ΔL 作为辅助 +需模糊逻辑综合判断,融合上升沿速率排除温漂 +必须有可靠的温度补偿和基线跟踪 +``` + +--- + +### 7.3 钢铝混合车架(目前主流轻量化方案) + +这是当前最常见的车型——钢制骨架 + 铝制蒙皮/副车架/机盖。 + +| 信号维度 | 幅值范围 | 信噪比 | 说明 | +|----------|---------|-------|------| +| ΔL/L₀ | 1%~3% | ⭐⭐⭐⭐ | 钢骨架主导的电抗变化 | +| ΔR/R₀ | 2%~5% | ⭐⭐⭐⭐ | 铝蒙皮主导的损耗变化 | +| |ΔL|/ΔR 比值 | 0.8~2.0 | 材质混合,比值在中间带 | + +**IQ 平面表现:** + +``` +钢铝混合的信号轨迹是两者的矢量叠加: + + 纯钢质点 ────→ 钢铝混合点 ────→ 纯铝质点 + (Q大,I小) (Q中,I中) (Q小,I大) + +信号矢量在 IQ 平面上沿对角线分布 +``` + +**检测难易度:中等**——兼顾两端的触发策略即可覆盖。 + +**方案B的独特优势:** + +- 传统 LC 振荡器对钢铝混合车无法做材质区分 +- 方案B可以通过 **|ΔL|/ΔR 比值** 估计钢铝比例 +- 行车道上统计**钢铝比分布**可辅助判断车辆品牌/车系 + +**推荐触发策略:** + +``` +ΔR 和 ΔL 双通道 OR 判决: + ΔR > R_threshold (1.5%) → 触发 + ΔL > L_threshold (1.0%) → 触发 + 两者均不达阈值时才判为无车 +``` + +--- + +### 7.4 材质自适应识别算法 + +利用方案B的 IQ 双通道,可在检测到车辆的同时进行**材质分类**: + +``` +每辆车通过时计算特征向量: + [ΔL_peak, ΔR_peak, ΔL_rise_time, ΔR_rise_time, |ΔL|/ΔR] + +分类逻辑: + if (|ΔL|/ΔR > 1.8) → 钢制主导 + if (|ΔL|/ΔR < 1.0) → 铝制主导 + if (1.0 ≤ |ΔL|/ΔR ≤ 1.8) → 钢铝混合 +``` + +**置信度提升方法:** + +- 取车辆通过**中间 60% 时段**的稳定信号均值(避开前/后沿过渡区) +- 多车统计平滑:同一位置的 10 辆车统计结果做概率建模 +- 结合线圈基准 Q 值校准:高 Q 线圈对 ΔR 更敏感,比值阈值需微调 + +--- + +### 7.5 各材质下的方案B总体验收表现 + +| 材质 | 方案B 检测率 | 触发稳定度 | 材质识别率 | 相比传统方案提升 | +|------|------------|-----------|-----------|----------------| +| 纯钢制 | 99.9%+ | ⭐⭐⭐⭐⭐ | 95%+ | 提升不大(本来就能检测) | +| 钢铝混合 | 99.5%+ | ⭐⭐⭐⭐ | 85%~90% | **显著提升**(传统无法判材质) | +| 全铝制 | 95%~99% | ⭐⭐⭐⭐ | 90%~95% | **革命性**(传统不可靠) | +| 碳纤维+铝 | 90%~95% | ⭐⭐⭐ | 80%~85% | **突破性**(传统几乎不可检) | + +--- + +## 八、气候与海拔条件的影响及应对 + +### 8.1 温度极端(-40°C ~ +85°C) + +**影响分析:** + +``` +低温(-40°C): + - 铜线圈 R ↓ 约 25%(相对 25°C) + - Q 值 ↑,信号灵敏度 ↑ + - 但 ΔR 基线大幅下移,需跟踪 + +高温(+85°C): + - 铜线圈 R ↑ 约 23% + - Q 值 ↓,信噪比 ↓ + - ΔR 检测灵敏度下降最明显 +``` + +**对材质判别的干扰:** + +| 条件 | 对 ΔL 影响 | 对 ΔR 影响 | 对 |ΔL|/ΔR 比值影响 | +|------|-----------|-----------|---------------| +| 低温 -40°C | 极小(<0.01%) | 基线大幅下移 | 比值偏大,钢倾向 | +| 高温 +85°C | 极小(<0.01%) | 基线大幅上移 | 比值偏小,铝倾向 | + +**方案B应对措施:** + +``` +① 增强基线跟踪:高温时学习速率提高 2~3 倍 + α_baseline_hot = α_baseline × (1 + 2×(T-25)/60) + +② 比值温度补偿: + Ratio_compensated = |ΔL|/(ΔR × K_T) + K_T = 1 + α_T_R × (T - 25) + 其中 α_T_R 为实验标定的温度系数 + +③ 高温降额触发:T > 70°C 时 ΔR 阈值的 120% + 避免温度漂移导致的误触发 + +④ 双基线策略: + 维护 + +``` +④ 双基线策略: + 维护两组基线——"稳态基线"(慢跟踪温漂)和"动态基线"(快跟踪瞬变) + 车辆离开后先用动态基线快速恢复,3~5s 后切换回稳态基线 +``` + +--- + +### 8.2 湿度与降雨 + +**物理影响机制:** + +``` +水介电常数 εr ≈ 80(空气 εr ≈ 1) + +① 积水改变线圈周围的等效介电常数 → 寄生电容 ↑ → 谐振频率偏移 + Δf/f₀ ≈ - (ΔC_parasitic) / (2C_total) + 可能产生 0.01%~0.05% 的虚假 ΔL 信号 + +② 雨水本身电导率低,ΔR 变化极小(<0.01%) + 但路面含融雪剂/盐分的积水 → 电导率 ↑ → ΔR 显著 ↑ + 融雪盐水的 ΔR 可达 0.5%~2%,可能误触发 + +③ 潮湿对线圈绝缘的影响 + 绝缘电阻下降 → 漏电流 ↑ → 等效并联电阻 ↓ → Q 值 ↓ +``` + +**方案B的雨后现场表现:** + +| 条件 | ΔL 虚假漂移 | ΔR 虚假漂移 | 误触发风险 | 应对难度 | +|------|------------|------------|-----------|---------| +| 纯雨水 | 0.01%~0.03% | < 0.01% | 低 | 容易 | +| 路面积水(浅) | 0.02%~0.05% | 0.01%~0.02% | 中低 | 中 | +| 融雪盐水 | 0.03%~0.08% | 0.5%~2% | **高** | 较难 | +| 海水浸泡 | 0.1%~0.2% | 5%~15% | **极高** | 需特殊处理 | + +**方案B应对措施:** + +``` +① 利用 IQ 双通道区分积水与车辆: + + 积水特征: + - ΔL 和 ΔR 同时缓慢变化(分钟级),不是车辆那种秒级突变 + - L-R 耦合模式特殊:ΔL 正(介电常数升高像"多了介质") + + 车辆特征: + - ΔL 和 ΔR 突变(秒级) + - 两者变化速率同步 + +② 上升沿速率滤波器: + 只接受 d(ΔR)/dt > R_slope_min 的信号 + 排除积水等缓慢漂移 + +③ 融雪盐季节触发阈值自动抬升 20%~30% + +④ 线圈防水工艺: + 密封灌封(环氧树脂/沥青)防止水分侵入线圈缝隙 + 引线接头做防水处理 +``` + +--- + +### 8.3 积雪与结冰 + +**物理影响机制:** + +``` +干雪(εr ≈ 1.2~2.0):介电效应极弱,几乎不影响 +湿雪(εr ≈ 5~20):部分介电效应 +冰层(εr ≈ 3.2):介电效应弱于水 +雪水混合物 + 融雪剂:同 8.2 节盐水情况 + +厚积雪(> 10cm)的机械作用: + - 抬高车身有效耦合距离 h → ΔL 和 ΔR 信号同时下降 + - 对铝车架的 ΔR 检测影响更大(信号本就偏弱) +``` + +**不同雪况对铝车架检测的影响:** + +| 雪况 | 对 ΔR 影响 | 对 ΔL 影响 | 综合影响 | +|------|-----------|-----------|---------| +| 薄干雪(< 3cm) | < 2% | < 1% | 可忽略 | +| 厚干雪(> 10cm) | 5%~15% 下降 | 3%~8% 下降 | 铝车信号接近阈值 | +| 湿雪/冰层 | 3%~5% 下降 | 2%~4% 下降 | 中等影响 | +| 雪+融雪剂 | 显著漂移 | 中等漂移 | 高影响 | + +**方案B应对措施:** + +``` +① 雪季灵敏度自适应: + 检测到连续多日低温 + 无车时段基线波动增大 + → 自动降低 ΔR 触发阈值至标准值的 70%~80% + +② 激增抑制算法: + 融雪剂导致的 ΔR 变化是缓变的(小时级) + 车辆导致的 ΔR 变化是快变的(秒级) + 通过微分时间常数区分 + +③ 线圈加热(高端方案): + 在线圈内嵌入加热丝(或无源利用线圈自身铜损发热) + 温和加热(~5W/m²)防止线圈上表面积雪结冰 + 需配合温度传感器避免过热损坏路面 +``` + +--- + +### 8.4 高海拔环境(> 2000m) + +**物理影响机制:** + +``` +① 空气介电常数变化:εr 随气压降低变化极微(< 0.05%) + 对线圈谐振频率影响可忽略 + +② 空气击穿电压下降(巴邢定律): + 海拔 3000m → 空气击穿电压降至海平面的 ~70% + 海拔 5000m → 降至 ~50% + +③ 线圈匝间高压击穿风险: + 高 Q 线圈的匝间电压可达数百 V(特别是 DDS 升压激励时) + 匝间/引线间放电 → 寄生电容突变 → 虚假信号 + +④ 散热恶化: + 空气稀薄 → 对流散热效率下降 ~30%(3000m) + DDS 功放/变压器温升 ↑ +``` + +**方案B应对措施:** + +``` +① 激励电压降额: + + 海拔 0~2000m:标准激励(~10Vpp,变压器升压后 ~50Vpp) + 海拔 2000~4000m:激励电压降至标准的 70% + 海拔 > 4000m:激励电压降至标准的 50% + +② 线圈绝缘增强: + + 匝间绝缘:聚酰亚胺漆包线(耐温 > 200°C,绝缘强度 > 5kV) + 灌封:有机硅凝胶灌封(消除匝间气隙,防止局部放电) + 引线间距:增大至海平面的 1.5 倍 + +③ Q 值降额策略: + + 高海拔时有意降低线圈 Q 值(串联合适的阻尼电阻) + 牺牲灵敏度换取可靠性 + 动态切换:海拔传感器自动切换 Q 值模式 + +④ 温度管理: + + 加强 DDS 功放散热(加大散热片/主动风冷) + 变压器选用更高 Curie 温度的磁芯材料 +``` + +**各海拔下方案B性能预估:** + +| 海拔 | 激励电压 | Q 值 | 铝车 ΔR 检测率 | 可靠性 | +|------|---------|------|---------------|-------| +| 0~1000m | 100% | 标准 | 95%~99% | ⭐⭐⭐⭐⭐ | +| 1000~2000m | 90% | 标准 | 93%~98% | ⭐⭐⭐⭐⭐ | +| 2000~3000m | 80% | 降低 10% | 90%~96% | ⭐⭐⭐⭐ | +| 3000~4000m | 70% | 降低 20% | 85%~93% | ⭐⭐⭐ | +| > 4000m | 50% | 降低 30% | 75%~88% | ⭐⭐ | + +--- + +### 8.5 综合环境自适应策略 + +方案B配备**环境模式自动切换系统**,根据多传感器输入动态调整参数: + +``` +环境模式判定依据: + ├── 温度 T(板上温度传感器) + ├── 湿度 RH(湿度传感器,或通过空载 Q 值推算) + ├── 海拔 P(气压传感器,如 BMP280) + ├── 基线波动率 σ_baseline(软件统计) + └── 季节因子(日历推算:12-2月冬季,6-8月夏季) +``` + +**模式切换矩阵:** + +``` +┌────────────────┬──────────┬──────────┬──────────┬──────────┐ +│ 模式 │ 正常模式 │ 高温模式 │ 雨雪模式 │ 高海拔 │ +│ │ │ > 50°C │ 高湿/雪 │ > 2500m │ +├────────────────┼──────────┼──────────┼──────────┼──────────┤ +│ ΔR 阈值缩放 │ 1.0× │ 1.2× │ 1.3× │ 1.0× │ +│ ΔL 阈值缩放 │ 1.0× │ 1.0× │ 1.0× │ 1.0× │ +│ ΔR/ΔL 权重比 │ 1:1 │ 1.2:1 │ 1.5:1 │ 1:1 │ +│ 基线学习速率 │ 标准 │ 2× │ 0.5× │ 1× │ +│ 上升沿速率阈值 │ 标准 │ 标准 │ 2× │ 标准 │ +│ 存在保持时间 │ 2s │ 1.5s │ 3s │ 2s │ +│ 激励电压 │ 100% │ 100% │ 100% │ 70% │ +│ IQ 解调增益 │ 1× │ 1× │ 1.2× │ 1.5× │ +└────────────────┴──────────┴──────────┴──────────┴──────────┘ +``` + +**模式切换逻辑:** + +``` +if (海拔 > 2500m): + 模式 = 高海拔 +else if (温度 > 50°C): + 模式 = 高温 +else if (湿度 > 80% OR 基线波动 > 2σ): + 模式 = 雨雪 +else: + 模式 = 正常 +``` + +--- + +## 九、方案B的全场景最优配置推荐 + +### 9.1 推荐硬件配置速查表 + +| 场景 | DDS | 解调器 | ADC | 线圈 Q 值 | 激励频率 | 激励电压 | +|------|-----|-------|-----|----------|---------|---------| +| 通用停车场 | AD9834 | AD8302 | MCU 内置 | > 80 | 120kHz | 标准 | +| 全铝车多(高端商圈) | AD9834 | AD8333 | ADS1256 | > 100 | 150kHz | 标准+10% | +| 东北/西北(冬雪) | AD9834 | AD8302 | ADS1256 | > 80 | 100kHz | 标准 | +| 西南/青藏(高海拔) | AD9850 | AD8302 | ADS1256 | 可调 | 80kHz | 降额 | +| 华南(高温高湿) | AD9834 | AD8333 | ADS1256 | > 90 | 130kHz | 标准 | + +### 9.2 推荐软件参数速查表 + +| 场景 | ΔR 阈值 | ΔL 阈值 | 模糊权重 (R:L:dR/dt) | 基线速率 | +|------|---------|---------|---------------------|---------| +| 通用停车场 | 1.5% | 0.8% | 0.5:0.3:0.2 | 0.0005 | +| 全铝车多 | 1.2% | 0.5% | 0.6:0.2:0.2 | 0.0003 | +| 东北/西北(冬雪) | 2.0% | 1.0% | 0.5:0.3:0.2 | 0.0002 | +| 西南/青藏(高海拔) | 1.5% | 0.8% | 0.5:0.3:0.2 | 0.0005 | +| 华南(高温高湿) | 1.8% | 0.8% | 0.6:0.2:0.2 | 0.001 | +| 恶劣综合(冬+高湿+铝多) | 1.5% | 0.8% | 0.5:0.3:0.2 | 0.0003 | + +### 9.3 最终推荐 + +``` + ┌──────────────────────────┐ + │ 方案B 是最优全能方案 │ + ├──────────────────────────┤ + │ │ + │ 纯钢车 → 100%可靠 │ + │ 钢铝混合 → 99%+可靠 │ + │ 全铝车 → 95%~99%可靠 │ + │ 雨雪天 → 可达上述 90% │ + │ 高海拔 → 可达上述 85% │ + │ │ + │ BOM 成本增幅仅 ¥15~40 │ + │ 相比传统 LC 方案 │ + │ │ + └──────────────────────────┘ +``` + +DDS 注入 + IQ 解调方案是当前综合性能最优、环境适应性最强、对不同材质最均衡的线圈车检方案。配合环境自适应模式切换,可在绝大多数现场条件下稳定工作。 + +--- + +## 文档结束(V2.0)