Files
vd_960/vd960Loop/docs/auto-frequency-plan.md
T
wangfq 8151d5700e docs(vd960Loop): 自动分频(Auto Frequency Selection)技术分析与开发计划
- 现状盘点: set_flp_level/loopFreq_Level 已具备, 缺检测/决策/软切换
- 物理层: 四档频率表, 66/76nF 仅 7.3% 间隔(不均匀), 注入锁定才是真敌人
- 干扰检测: 差拍抖动/慢拍/冻结占比 → 干扰度 D (复用 §10 健康度)
- 时机策略: A上电/B运行中/C混合(推荐) 三方案 + 切换时序与安全约束
- 频率规划: 8+ 线圈共享 4 档的复用策略 + 邻道协调卡点
- 开发计划: 6 阶段 25+ 任务 (硬件标定→检测→决策→软切换→整合→现场)
- 5 个决策点待用户拍板 (方案/初始档位/切换代价/邻道协调/范围)
2026-08-25 11:37:19 +08:00

12 KiB
Raw Blame History

vd960Loop 自动分频(Auto Frequency Selection)技术分析与开发计划

分析日期:2026-08-25 场景:高速公路,每条车道 4 个线圈(前后串行),相邻车道也有线圈 目标:检测到干扰时,四通道各自独立调节 4 档电容频率(33/43/66/76nF)错开干扰源


0. 现状盘点

能力 状态 说明
硬件切换 已具备 每通道 2 个 GPIOFLPA1/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 kHz14.1%
10 中低 66nF ~80.7 kHz 19.3 kHz19.3%
11 低频 76nF ~75.2 kHz 5.5 kHz7.3%

关键发现:四档电容间隔不均匀(+30%/+53%/+15%),66nF 与 76nF 之间频率间隔只有 7.3%。f ∝ 1/√C,这个比例与线圈 L 无关(恒为 √(76/66)=1.073)。若按行业惯例"相邻线圈频率差 ≥10%"要求,66/76 这一对不达标

1.2 但真正的敌人不是"差拍大不大",而是"注入锁定"

错频抑制串扰的物理机制分两层:

  1. 异频耦合 → 差拍:本道 f1、邻道 f2,互感耦合产生 |f1f2| 差拍。本道 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 再做全自动?还是一次到位?