From 8151d5700ec3c5a0a3345a97a93c4329cc5abe08 Mon Sep 17 00:00:00 2001 From: wangfq Date: Tue, 25 Aug 2026 11:37:19 +0800 Subject: [PATCH] =?UTF-8?q?docs(vd960Loop):=20=E8=87=AA=E5=8A=A8=E5=88=86?= =?UTF-8?q?=E9=A2=91(Auto=20Frequency=20Selection)=E6=8A=80=E6=9C=AF?= =?UTF-8?q?=E5=88=86=E6=9E=90=E4=B8=8E=E5=BC=80=E5=8F=91=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 现状盘点: set_flp_level/loopFreq_Level 已具备, 缺检测/决策/软切换 - 物理层: 四档频率表, 66/76nF 仅 7.3% 间隔(不均匀), 注入锁定才是真敌人 - 干扰检测: 差拍抖动/慢拍/冻结占比 → 干扰度 D (复用 §10 健康度) - 时机策略: A上电/B运行中/C混合(推荐) 三方案 + 切换时序与安全约束 - 频率规划: 8+ 线圈共享 4 档的复用策略 + 邻道协调卡点 - 开发计划: 6 阶段 25+ 任务 (硬件标定→检测→决策→软切换→整合→现场) - 5 个决策点待用户拍板 (方案/初始档位/切换代价/邻道协调/范围) --- vd960Loop/docs/auto-frequency-plan.md | 245 ++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 vd960Loop/docs/auto-frequency-plan.md diff --git a/vd960Loop/docs/auto-frequency-plan.md b/vd960Loop/docs/auto-frequency-plan.md new file mode 100644 index 0000000..ed55ea3 --- /dev/null +++ b/vd960Loop/docs/auto-frequency-plan.md @@ -0,0 +1,245 @@ +# 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 再做全自动?还是一次到位?