diff --git a/docs/devlog.md b/docs/devlog.md index 8f89460..6765da0 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -433,10 +433,58 @@ if (!g_loop_stable) { --- +## 2026-06-29 — 基线冻结超时自动恢复 + +### 问题 + +V1.5 引入的 Origin 污染保护机制在 CAPVD 异常偏高时**永久冻结**基线。如果线圈因环境变化(温度漂移、器件老化、更换线圈)稳定在新的频率值,Origin 永远不会更新 → 绿灯常亮、永久误判有车。只有 MCU 复位才能恢复。 + +### 方案 + +在冻结路径上增加**超时自动恢复机制**: + +```c +#define FREEZE_TIMEOUT 3000 // ~30s @ 10ms/tick + +if (dev >= dlt_ORG × 4) { + loop1_freeze_cnt++; + if (loop1_freeze_cnt >= FREEZE_TIMEOUT) { + // 超时: 持续偏高但稳定 → 环境变化,接受新基线 + loop1_Origin = loop1_CAPVD; // 直接更新为新常态值 + loop1_freeze_cnt = 0; + // 重置累计,后续正常滑动平均跟踪 + } else { + // 未超时: 继续冻结(防车辆驶入时的 Xn 先增尖峰) + } +} +``` + +### 行为表格 + +| 场景 | CAPVD 行为 | 冻结计数 | 结果 | +|------|-----------|---------|------| +| 车辆驶入(Xn 先增) | 偏高 2~3s 后下降 | < 3000 → 清零 | 正常冻结保护 ✓ | +| 温度漂移 | 缓慢爬升到新值并稳定 | > 3000 → 超时 | Origin 更新到新值 ✓ | +| 更换线圈 | 瞬间跳到新频率 | > 3000 → 超时 | Origin 更新到新值 ✓ | +| EMI 间歇干扰 | 偏高后恢复 | 恢复时清零 | 正常冻结保护 ✓ | + +### 冻结计数重置时机 + +| 触发条件 | 操作 | +|---------|------| +| `dev < dlt_ORG × 4`(CAPVD 回到正常范围) | `freeze_cnt = 0`,恢复跟踪 | +| 超时触发(Origin 强制更新后) | `freeze_cnt = 0` | +| 车辆进入(`loop1_VD_FLAG = 1`) | `freeze_cnt = 0` | +| `INIT_VD()`(上电/安全复位) | `freeze_cnt = 0` | + +--- + ## 修订记录 | 版本 | 时间 | 说明 | |------|------|------| +| V2.3 | 2026-06-29 | 基线冻结超时: 持续偏高30s后强制更新 Origin,防止环境变化死锁 | +|------|------|------| | V2.2 | 2026-06-26 | 稳定期绕过 IIR/斜率限幅,用 Value 直接收敛基线 | | V2.1 | 2026-06-26 | CAPVD_fast 初始化修复(条件反转为 ==0 首次锁定) | | V2.0 | 2026-06-26 | M4 优化: 双路 IIR + 斜率限幅 + 进入确认;tick 10ms |