# vd960Loop 自动分频(Auto Frequency Selection)技术分析与开发计划 > 分析日期:2026-08-25 > 场景:高速公路,每条车道 4 个线圈(前后串行),相邻车道也有线圈 > 目标:检测到干扰时,四通道各自独立调节 4 档电容频率(33/43/66/76nF)错开干扰源 --- ## 0. 现状盘点 | 能力 | 状态 | 说明 | |------|------|------| | 硬件切换 | ✅ 已具备 | 每通道 2 个 GPIO(FLPA1/2…FLPD1/2),2bit 编码 4 档电容 | | 基础软件 | ✅ 已具备 | `set_flp_level(loop_num, freq_level)` 已实现(storage.c:117) | | 配置字段 | ✅ 已具备 | `Loop_Cng_Unit.loopFreq_Level`(2bit),flash 持久化,协议字段 freq_level 已定义 | | 频率测量 | ✅ 已具备 | CAPVD ∝ 周期,上报实际频率(main.c 转换公式) | | 干扰检测 | ❌ 缺失 | 无"自动判断有干扰"的逻辑 | | 切换决策 | ❌ 缺失 | 无"切哪档、何时切"的逻辑 | | 切换时序 | ❌ 缺失 | 切档会打断检测,无软切换/基线重建流程 | | 频率规划 | ❌ 缺失 | 无多线圈错频分配策略 | **结论:硬件和基础软件齐了,缺的是"自动"三件套:检测 → 决策 → 软切换。** --- ## 1. 物理层分析:四档频率与错频裕量 ### 1.1 四档频率(L₀≈59μH 时) | 档位 | 电容 | 频率 | 相对上一档间隔 | |------|------|------|---------------| | 00 高频 | 33nF | ~114.1 kHz | — | | 01 中高 | 43nF | ~100.0 kHz | 14.1 kHz(14.1%) | | 10 中低 | 66nF | ~80.7 kHz | 19.3 kHz(19.3%) | | 11 低频 | 76nF | ~75.2 kHz | **5.5 kHz(7.3%)** ⚠ | ⚠ **关键发现:四档电容间隔不均匀(+30%/+53%/+15%),66nF 与 76nF 之间频率间隔只有 7.3%**。f ∝ 1/√C,这个比例与线圈 L 无关(恒为 √(76/66)=1.073)。若按行业惯例"相邻线圈频率差 ≥10%"要求,**66/76 这一对不达标**。 ### 1.2 但真正的敌人不是"差拍大不大",而是"注入锁定" 错频抑制串扰的物理机制分两层: 1. **异频耦合 → 差拍**:本道 f1、邻道 f2,互感耦合产生 |f1−f2| 差拍。本道 10ms tick 采样,奈奎斯特 50Hz: - 差拍 >50Hz(如 5.5kHz):欠采样 → 随机高频抖动 → **IIR(τ≈32ms)天然压住**,无害 - 差拍 <50Hz(近频):慢拍,可穿透 IIR → 有害 - 差拍 →0(同频):注入锁定,最危险 2. **同频/近频 → 注入锁定**:f1≈f2 时振荡器互相牵引,频率被拉偏、相位锁定,CAPVD 出现慢周期扰动,直接污染检测。 **结论:错频目标不是"差拍尽量大",而是"避免同档/近档导致注入锁定"。** 只要相邻线圈不同档(≥1 档间隔,即 ≥7.3% 频率差),差拍欠采样抖动可被滤波抑制。**7.3% 的最小档间隔对避免注入锁定足够,但余量偏小**,规划时优先避免 66/76 相邻组合。 ### 1.3 串扰方向性(衔接上一轮分析) - 错频配置下串扰为差拍抖动(正负交替,无稳定极性) - 单极性串扰只在同频/近频耦合时出现(错误配置) - 负向串扰进滑动平均会污染基线(真实危害) --- ## 2. 信号层:干扰检测算法("怎么知道有干扰") ### 2.1 干扰特征(候选) | 特征 | 检测量 | 灵敏度 | 可靠性 | |------|--------|--------|--------| | **差拍抖动** | 无车时窗口内 variation 峰谷差/σ(复用 §10 健康度) | 高(差拍泄漏直接可见) | 高 | | **注入锁定慢拍** | CAPVD 出现 0.5~50Hz 周期性扰动(相邻样本差分谱) | 中 | 高(最隐蔽也最危险) | | **基线冻结频率** | 无车时 dev ≥ 4×dlt_ORG 的次数/占比(§10 冻结占比) | 中 | 高 | | **误触发率** | 无车误触发计数(单位时间) | 低(需要时间累积) | 中(最终后果指标) | ### 2.2 检测窗口约束(关键) - **干扰检测必须在"本道无车"窗口做**——有车时 CAPVD 大变化是正常信号,不能当干扰 - 但邻道车经过时差拍增强(邻道线圈被车扰动)→ 检测窗口应**包含"本道无车 + 邻道有车"时段**(无需知道邻道状态,本道无车时抖动超阈值即视为干扰) - 复用 §10 健康度框架:无车窗口峰谷差 > 阈值 × 连续 N 窗 → 判定"干扰存在" ### 2.3 干扰度评分(量化) ``` 干扰度 D = α·(抖动能量超标度) + β·(冻结占比) + γ·(误触发率归一化) D > D_HIGH → 需切换 D > D_MID → 可疑,加强监测 ``` 阈值需现场标定("待现场验证"),初值建议:无车窗口峰谷差 > 2× 正常噪声底(即 §10 健康度的漂移速率超基线 2 倍)。 --- ## 3. 调节时机策略(核心决策点) ### 方案 A:上电自适应(一次性探测) ``` 上电 → 各通道稳定期 → 分频探测(每档测 ~5s 噪声底)→ 选最优组合 → 固化 → 正常检测 ``` | 维度 | 评价 | |------|------| | 实现 | 简单,无运行中切换风险 | | 探测时长 | 4 通道 × 4 档 × 5s = 80s(交错并行可压到 ~20-30s)| | 缺点 1 | 探测期无检测功能(几十秒)| | 缺点 2 | **邻道可能未同时上电**,探测结果基于不完整邻居信息 | | 缺点 3 | 现场后期新增设备(护栏、新线圈、改造)不响应 | ### 方案 B:运行中自适应(动态切换) ``` 运行中持续监测干扰度 D → 超阈值 → 软切换(无车时执行)→ 切换后评估(改善则保持,恶化则回滚) ``` | 维度 | 评价 | |------|------| | 实现 | 复杂,需软切换 + 回滚 | | 响应 | 实时适应现场变化 | | 风险 | 切换期间通道短暂不可用;切换震荡(需防抖:限次、评估、回滚)| | 硬约束 | **必须有车才能切**(防丢检测);切换后重建基线 | ### 方案 C:混合策略(推荐) ``` 上电探测建立初始分配(快速) + 运行中事件触发复测(慢速、保守) + 回滚保护 ``` - 上电:扫描选档(几十秒,覆盖"邻道未上电"风险用保守选档:选次优但间隔安全的档) - 运行中:干扰度 D 超阈值 或 定时(如每小时)复测 → 软切换 + 评估回滚 - 切换频率限制:1 小时内最多 N 次(防震荡) **切换时机细节(任何方案都需要):** ``` 前置条件: 该通道无车(VD_FLAG=0) 且 无脉冲输出中 且 非安全复位中 执行序列: 挂起检测 → GPIO 切档 → 等待振荡稳定(~100ms, 实测标定) → 重建基线(稳定期 128样本≈1.3s) → 恢复检测 安全约束: 切换期间继电器保持原状态; 四通道交错切换(防同时切换电源跌落) ``` > 切换期间该通道约 1.5s 不可用——**这是方案取舍的核心代价,需用户确认可接受**。 --- ## 4. 频率规划:4 档怎么分给 8+ 个线圈 ### 4.1 冲突定义 场景:每车道 4 线圈(前后)+ 相邻车道 4 线圈。冲突组合: - **同车道前后相邻**:线圈间距 ~几米,磁耦合强 - **左右相邻车道最近线圈**:跨车道间距,耦合中等 - 斜向/隔一档:耦合弱,可复用 ### 4.2 复用策略(蜂窝式频率规划) ``` 同车道 4 线圈: 档位 1-2-3-4 顺序错开(每线圈独立档) 相邻车道错相位: 车道 2 用 2-3-4-1 循环 → 左右最近线圈档位差 ≥1 优先避免: 66/76(7.3% 间隔)相邻组合;同档复用距离 ≥2 个线圈位 ``` ### 4.3 关键矛盾:车检器不知道邻道的档位 无通信前提下可选: | 方案 | 做法 | 评价 | |------|------|------| | **现场配置基准**(推荐起步) | 协议/拨码设置每通道初始档位,各车道按约定错相位 | 简单可靠,依赖施工规范;为后续自动调整提供基准 | | **盲探测避让** | 扫描各档时测抖动能量,避开"差拍落入危险区"的档 | 不需邻道信息,但只能"避开坏的"不能"选最优" | | **差拍频率反推** | 从抖动频谱估计 f_beat,反推邻道档位 | 理论可行,工程复杂(欠采样谱估计),暂缓 | **建议:初始档位现场配置(保证基本错频)+ 自动扫描避让(动态优化)+ 复用规则(防同档相邻)。** --- ## 5. 工程约束与风险清单 | 项 | 约束/风险 | 对策 | |----|----------|------| | 检测中断 | 切换 ~1.5s 不可用 | 无车才切;交错切换;切换评估回滚 | | 安全 | 有车时切档丢检测 → 砸车风险 | **硬约束:VD_FLAG=0 才可切**;继电器保持 | | 看门狗 | 探测/切换流程不能阻塞主循环 | 全部状态机化,单步 ≤50ms | | 基线 | 换档后 CAPVD 跳变 | 重建基线 + 稳定期(现有机制复用)| | 灵敏度 | 换档后阈值变化? | **归一化红利:SensTable 是相对量(×Origin/65536),换档后 Origin 变了但相对阈值不变,灵敏度自动保持** ✓ | | 持久化 | 新档位掉电丢失 | 写回 flash loopFreq_Level | | 切换震荡 | 频繁切换 | 限次(1h≤N)、评估回滚、Hysteresis | | 电源 | 多通道同时切电容冲击 | 交错切换 | | 协议联动 | 运行中档位变化后台未知 | 新增自动分频状态上报(含当前档位/干扰度/切换事件)| | 测试 | 无真实串扰环境难验证 | 实验室双线圈对测 + 工装注入模拟干扰 + 现场实测 | --- ## 6. 开发计划 ### 阶段 0:硬件标定(前置,依赖实验室/现场) - [ ] 0.1 实测四档频率、切换 GPIO 到频率稳定的时间(示波器) - [ ] 0.2 标定振荡稳定等待时间(切档 → CAPVD 有效) - [ ] 0.3 两线圈对测:同档/相邻档/隔档的差拍形态与注入锁定距离 - [ ] 0.4 标定干扰检测阈值初值(正常噪声底、抖动超标倍率) - 输出:参数表(写回代码宏) ### 阶段 1:干扰检测模块(先会"看病",不切换) - [ ] 1.1 新建 `freq_monitor.c/h`:无车窗口抖动能量统计(复用 §10 峰谷差逻辑) - [ ] 1.2 注入锁定慢拍检测(相邻样本差分谱,0.5~50Hz 能量) - [ ] 1.3 干扰度评分 D(抖动 + 冻结占比 + 误触发) - [ ] 1.4 检测状态机:正常/可疑/干扰(带防抖、去程) - [ ] 1.5 协议上报:干扰状态字段(可选,先本地 PRINT) - [ ] 1.6 gcc 隔离单测(模拟差拍/锁定/车辆信号,验证不误报) - 验证:模拟数据注入,检测准确率;实车现场对比人工判断 ### 阶段 2:选档决策(freq_planner) - [ ] 2.1 候选档评估:每档噪声底 + 避让规则(差拍危险区)+ 复用约束(同车道不重复) - [ ] 2.2 决策状态机:保持/切换/回滚(带 Hysteresis + 限次) - [ ] 2.3 持久化:新档位写 flash - [ ] 2.4 单测:给定干扰特征序列 → 期望档位序列 ### 阶段 3:软切换执行(freq_switch) - [ ] 3.1 切档状态机:挂起检测 → GPIO 切档 → 等待稳定 → 重建基线 → 恢复 - [ ] 3.2 与 vd1_task 集成(切档期间跳过检测、继电器保持) - [ ] 3.3 四通道交错切换调度 - [ ] 3.4 切换前后 CAPVD 突变防护(切档瞬间不进入 IIR) - [ ] 3.5 单测:状态机全路径 + 异常分支(切换中有车进入 → 中止/回滚) ### 阶段 4:自适应策略整合(混合方案) - [ ] 4.1 上电分频探测流程(4 通道交错扫描,~30s) - [ ] 4.2 运行中事件触发复测(干扰度超阈值) - [ ] 4.3 定时复测(如 1h,可配置) - [ ] 4.4 切换评估:切后 5 分钟干扰度对比,恶化回滚 - [ ] 4.5 切换限次 + 防震荡 ### 阶段 5:协议/后台联动 + 现场验证 - [ ] 5.1 协议新增:自动分频状态(当前档位/干扰度/切换事件),版本 bump - [ ] 5.2 vd960DBN 解析同步(若走 0xC0 传感帧或独立命令) - [ ] 5.3 现场测试方案:双车道对测、邻道干扰注入、长期稳定性(一周) - [ ] 5.4 devlog/产品文档同步 --- ## 7. 需要用户拍板的决策点 1. **切换时机**:方案 A(仅上电)/ B(仅运行中)/ C(混合,推荐)? 2. **初始档位来源**:现场配置基准(拨码/协议)vs 全自动扫描?(建议:配置基准 + 自动避让) 3. **切换代价**:每通道 ~1.5s 检测中断,可接受?(有车不切,只影响无车时段,实际影响很小) 4. **邻道协调**:相邻车道是否也是自家车检器?能否约定统一的错相位配置规范? 5. **范围**:v1 只做"干扰检测 + 手动/半自动提示"(后台建议换档),v2 再做全自动?还是一次到位?