docs: devlog — V2.4 冻结超时稳定性检查
This commit is contained in:
@@ -437,45 +437,39 @@ if (!g_loop_stable) {
|
|||||||
|
|
||||||
### 问题
|
### 问题
|
||||||
|
|
||||||
V1.5 引入的 Origin 污染保护机制在 CAPVD 异常偏高时**永久冻结**基线。如果线圈因环境变化(温度漂移、器件老化、更换线圈)稳定在新的频率值,Origin 永远不会更新 → 绿灯常亮、永久误判有车。只有 MCU 复位才能恢复。
|
V1.5 引入的 Origin 污染保护机制在 CAPVD 异常偏高时**永久冻结**基线。如果线圈因环境变化(温度漂移、器件老化、更换线圈)稳定在新的频率值,Origin 永远不会更新 → 绿灯常亮、永久误判有车。
|
||||||
|
|
||||||
### 方案
|
### 方案
|
||||||
|
|
||||||
在冻结路径上增加**超时自动恢复机制**:
|
在冻结路径上增加**超时自动恢复 + 稳定性验证**:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define FREEZE_TIMEOUT 3000 // ~30s @ 10ms/tick
|
#define FREEZE_TIMEOUT 3000 // ~30s @ 10ms/tick
|
||||||
|
#define FREEZE_STABILITY_RATE 2 // 稳定性窗口: 参考值的 ±2%
|
||||||
|
|
||||||
if (dev >= dlt_ORG × 4) {
|
if (dev >= dlt_ORG × 4) {
|
||||||
loop1_freeze_cnt++;
|
if (freeze_cnt == 0)
|
||||||
if (loop1_freeze_cnt >= FREEZE_TIMEOUT) {
|
freeze_ref = CAPVD; // 记录冻结起始值
|
||||||
// 超时: 持续偏高但稳定 → 环境变化,接受新基线
|
else if (|CAPVD - freeze_ref| > freeze_ref × 2%)
|
||||||
loop1_Origin = loop1_CAPVD; // 直接更新为新常态值
|
reset(freeze_cnt, freeze_ref); // 波动过大 → 重新计时
|
||||||
loop1_freeze_cnt = 0;
|
|
||||||
// 重置累计,后续正常滑动平均跟踪
|
freeze_cnt++;
|
||||||
} else {
|
if (freeze_cnt >= 3000) {
|
||||||
// 未超时: 继续冻结(防车辆驶入时的 Xn 先增尖峰)
|
Origin = CAPVD; // 连续30s稳定在±2%窗口内 → 接受
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 行为表格
|
### 行为表格
|
||||||
|
|
||||||
| 场景 | CAPVD 行为 | 冻结计数 | 结果 |
|
| 场景 | CAPVD 行为 | 稳定性检查 | 结果 |
|
||||||
|------|-----------|---------|------|
|
|------|-----------|-----------|------|
|
||||||
| 车辆驶入(Xn 先增) | 偏高 2~3s 后下降 | < 3000 → 清零 | 正常冻结保护 ✓ |
|
| 车辆驶入(Xn 先增) | 偏高 2~3s 后下降 | 中途恢复 → `freeze_cnt` 清零 | 正常冻结保护 ✓ |
|
||||||
| 温度漂移 | 缓慢爬升到新值并稳定 | > 3000 → 超时 | Origin 更新到新值 ✓ |
|
| 温度漂移 | 缓慢爬升到新值并稳定 | 爬升阶段频繁重置;稳定后连续 30s | Origin 更新 ✓ |
|
||||||
| 更换线圈 | 瞬间跳到新频率 | > 3000 → 超时 | Origin 更新到新值 ✓ |
|
| 更换线圈 | 瞬间跳到新频率 | 稳定后连续 30s | Origin 更新 ✓ |
|
||||||
| EMI 间歇干扰 | 偏高后恢复 | 恢复时清零 | 正常冻结保护 ✓ |
|
| 车辆缓慢驶入(CAPVD 持续爬升) | 持续偏高且不断上升 | 每超出 ±2% 就重置 → 永远到不了 30s | **不触发更新** ✓ |
|
||||||
|
|
||||||
### 冻结计数重置时机
|
最后一行是关键:如果没有稳定性检查,车辆缓慢驶入时 CAPVD 持续偏高 30s 也会触发 Origin 更新——这是错误的。
|
||||||
|
|
||||||
| 触发条件 | 操作 |
|
|
||||||
|---------|------|
|
|
||||||
| `dev < dlt_ORG × 4`(CAPVD 回到正常范围) | `freeze_cnt = 0`,恢复跟踪 |
|
|
||||||
| 超时触发(Origin 强制更新后) | `freeze_cnt = 0` |
|
|
||||||
| 车辆进入(`loop1_VD_FLAG = 1`) | `freeze_cnt = 0` |
|
|
||||||
| `INIT_VD()`(上电/安全复位) | `freeze_cnt = 0` |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -483,6 +477,7 @@ if (dev >= dlt_ORG × 4) {
|
|||||||
|
|
||||||
| 版本 | 时间 | 说明 |
|
| 版本 | 时间 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
|
| V2.4 | 2026-06-29 | 冻结超时增加稳定性检查: CAPVD 需连续 30s 稳定在 ±2% 窗口内 |
|
||||||
| V2.3 | 2026-06-29 | 基线冻结超时: 持续偏高30s后强制更新 Origin,防止环境变化死锁 |
|
| V2.3 | 2026-06-29 | 基线冻结超时: 持续偏高30s后强制更新 Origin,防止环境变化死锁 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| V2.2 | 2026-06-26 | 稳定期绕过 IIR/斜率限幅,用 Value 直接收敛基线 |
|
| V2.2 | 2026-06-26 | 稳定期绕过 IIR/斜率限幅,用 Value 直接收敛基线 |
|
||||||
|
|||||||
Reference in New Issue
Block a user