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

- 现状盘点: set_flp_level/loopFreq_Level 已具备, 缺检测/决策/软切换
- 物理层: 四档频率表, 66/76nF 仅 7.3% 间隔(不均匀), 注入锁定才是真敌人
- 干扰检测: 差拍抖动/慢拍/冻结占比 → 干扰度 D (复用 §10 健康度)
- 时机策略: A上电/B运行中/C混合(推荐) 三方案 + 切换时序与安全约束
- 频率规划: 8+ 线圈共享 4 档的复用策略 + 邻道协调卡点
- 开发计划: 6 阶段 25+ 任务 (硬件标定→检测→决策→软切换→整合→现场)
- 5 个决策点待用户拍板 (方案/初始档位/切换代价/邻道协调/范围)
This commit is contained in:
wangfq
2026-08-25 11:37:19 +08:00
parent 2a267967b4
commit 8151d5700e
+245
View File
@@ -0,0 +1,245 @@
# 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 再做全自动?还是一次到位?