docs: devlog — 记录 V2.1 CAPVD_fast 初始化修复 + V2.2 稳定期绕过 IIR/斜率限幅

This commit is contained in:
wangfq
2026-06-29 09:12:58 +08:00
parent 16090a48fa
commit 55a6a2e99b

View File

@@ -361,10 +361,84 @@ else
---
## 2026-06-26 — CAPVD_fast 初始化修复
### 问题
M4 V2.0 引入双路 IIR 后,进入检测使用 `CAPVD_fast`(快速 IIRα=0.5)。但 `CAPVD_fast` 始终为 0导致首次进入判定就触发有车。
### 根因
```c
// 原代码(错误):
if (loop1_CAPVD_fast != 0) {
loop1_CAPVD_fast = (loop1_CAPVD_fast + loop1_CAPVD) / 2;
}
```
TMR3 ISR 首次捕获时直接设置 `loop1_CAPVD`(不为 0`INIT_VD``CAPVD_fast` 初始化为 0。`vd1_task` 进入时 `CAPVD != 0``if (CAPVD_fast != 0)` 永远为 false → `CAPVD_fast` 保持 0 不更新。
### 修复
条件反转:`== 0` 时首次锁定当前 CAPVD 值,之后正常执行快速 IIR。
```c
// 修复后:
if (loop1_CAPVD_fast == 0) {
loop1_CAPVD_fast = loop1_CAPVD; // 首次直接锁定
} else {
loop1_CAPVD_fast = (loop1_CAPVD_fast + loop1_CAPVD) / 2;
}
```
---
## 2026-06-26 — 稳定期绕过 IIR 和斜率限幅
### 问题
上电后很快输出有车状态。日志显示:
```
First_capSum:177406, Origin:177406 ← 首测为瞬态高值
Loop stable, Origin:149755 ← 稳定期后 Origin 仍偏高
Car_In, Value:128654, Origin:149755 ← Origin - Value = 21067 >> dlt=82
```
### 根因
V2.0 引入的 **5% 斜率限幅** 在稳定期内仍然生效。首测 CAPVD=177406 是瞬态高值(~38% 偏高),斜率限幅让 CAPVD 在 128 个采样周期内只能缓慢下降到 149755 — 无法在稳定期内充分收敛。100 窗口滑动平均被前半段的高值污染,导致 Origin 停在 149755远高于真实值 ~128688。
### 修复
稳定期内不走 IIR 和斜率限幅——**直接用 raw Value** 建立基线:
```c
if (!g_loop_stable) {
/* 稳定期内不做斜率限幅和 IIR — 直接用 Value 快速收敛到真实基线 */
loop1_CAPVD = loop1_Value;
loop1_CAPVD_fast = loop1_Value;
// ... 滑动平均跟踪 ...
return;
}
```
稳定期结束后恢复正常 IIR + 斜率限幅用于检测。
| 场景 | 修复前 | 修复后 |
|------|--------|--------|
| 首测瞬态 | 177406 被限幅缓慢下降 | 直接被 128688 覆盖 |
| Origin 收敛 | 149755 (偏离 +16%) | ~128688 (正确) |
| 稳定期结束 | Origin 偏离 → 误判有车 | 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 |
| V1.7 | 2026-06-26 | vTaskDelay 10→50ms 修正(对齐原始 TMR15 5ms×10 设计);基线更新 1s→5s |
| V1.6 | 2026-06-24 | 时序修正OUT_DELAY/PULSE_DELAY→500msRS485→TTL Tx |