From 52e6921a55cc7b20b6b884ffff7be765e84cc46b Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 7 Jul 2026 02:30:03 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20=E8=87=AA=E5=8A=A8=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=202026-07-07=2002:30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FNIRSI_LCR-ST1_逆向分析.md | 831 ----------- memory/2026-07-06.md | 7 + 方案B_AD8302接口与IQ解调算法详解.md | 1315 ------------------ 方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md | 1001 ------------- 线圈车检器车辆特征判别方法.md | 457 ------ 车身与线圈相对位置检测分析.md | 160 --- 铝制车架有效感应方法.md | 475 ------- 铝制车架有效感应方法_v2.0.md | 913 ------------ 8 files changed, 7 insertions(+), 5152 deletions(-) delete mode 100644 FNIRSI_LCR-ST1_逆向分析.md create mode 100644 memory/2026-07-06.md delete mode 100644 方案B_AD8302接口与IQ解调算法详解.md delete mode 100644 方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md delete mode 100644 线圈车检器车辆特征判别方法.md delete mode 100644 车身与线圈相对位置检测分析.md delete mode 100644 铝制车架有效感应方法.md delete mode 100644 铝制车架有效感应方法_v2.0.md diff --git a/FNIRSI_LCR-ST1_逆向分析.md b/FNIRSI_LCR-ST1_逆向分析.md deleted file mode 100644 index a3a1e58..0000000 --- a/FNIRSI_LCR-ST1_逆向分析.md +++ /dev/null @@ -1,831 +0,0 @@ -# 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/memory/2026-07-06.md b/memory/2026-07-06.md new file mode 100644 index 0000000..aaab760 --- /dev/null +++ b/memory/2026-07-06.md @@ -0,0 +1,7 @@ +# 2026-07-06 日志 + +## 08:11 — 技术文档集中管理 +- 老大要求将散落工作区根目录的技术文档统一归入 docs/ +- 迁移 7 篇文档:车身与线圈相对位置检测、方案B AD8302/IQ解调、铝制车架x2、线圈车检器车辆特征判别、FNIRSI LCR-ST1逆向分析 +- git commit + push 至 xdeSpace 远程仓库 +- docs/ 现有共 12 篇技术文档,目录结构清晰 diff --git a/方案B_AD8302接口与IQ解调算法详解.md b/方案B_AD8302接口与IQ解调算法详解.md deleted file mode 100644 index 110bd78..0000000 --- a/方案B_AD8302接口与IQ解调算法详解.md +++ /dev/null @@ -1,1315 +0,0 @@ -# 方案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/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md b/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md deleted file mode 100644 index 62bc959..0000000 --- a/方案B_正交IQ解调路径详解_vs_AD8302_vs_MCU.md +++ /dev/null @@ -1,1001 +0,0 @@ -# 路径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/线圈车检器车辆特征判别方法.md b/线圈车检器车辆特征判别方法.md deleted file mode 100644 index 24bcf86..0000000 --- a/线圈车检器车辆特征判别方法.md +++ /dev/null @@ -1,457 +0,0 @@ -# 线圈式车辆检测器对底盘高低、材质、轮轴及前后车的判别方法 - -> **作者:** 小德 -> **分类:** 线圈车检 · 特征判别 · 信号分析 -> **日期:** 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/车身与线圈相对位置检测分析.md b/车身与线圈相对位置检测分析.md deleted file mode 100644 index 510efab..0000000 --- a/车身与线圈相对位置检测分析.md +++ /dev/null @@ -1,160 +0,0 @@ -# 车身与线圈相对位置对电感变化量、感应能力及触发可靠性的影响分析 - -> **作者:** 小德 -> **分类:** 线圈车检 · 信号分析 -> **日期:** 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/铝制车架有效感应方法.md b/铝制车架有效感应方法.md deleted file mode 100644 index bb51077..0000000 --- a/铝制车架有效感应方法.md +++ /dev/null @@ -1,475 +0,0 @@ -# 铝制车架有效感应方法——从原理到落地的完整拆解 - -> **作者:** 小德 -> **分类:** 线圈车检 · 铝制车架 · 微弱信号检测 -> **日期:** 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/铝制车架有效感应方法_v2.0.md b/铝制车架有效感应方法_v2.0.md deleted file mode 100644 index b97e324..0000000 --- a/铝制车架有效感应方法_v2.0.md +++ /dev/null @@ -1,913 +0,0 @@ -# 铝制车架有效感应方法——从原理到落地的完整拆解 - -> **作者:** 小德 -> **分类:** 线圈车检 · 铝制车架 · 微弱信号检测 -> **版本:** 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)