From 55a6a2e99b1413561977c911fa5524b06cbc2d46 Mon Sep 17 00:00:00 2001 From: wangfq Date: Mon, 29 Jun 2026 09:12:58 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20devlog=20=E2=80=94=20=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=20V2.1=20CAPVD=5Ffast=20=E5=88=9D=E5=A7=8B=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20+=20V2.2=20=E7=A8=B3=E5=AE=9A=E6=9C=9F=E7=BB=95?= =?UTF-8?q?=E8=BF=87=20IIR/=E6=96=9C=E7=8E=87=E9=99=90=E5=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/devlog.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/docs/devlog.md b/docs/devlog.md index 2be4a26..8f89460 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -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→500ms;RS485→TTL Tx |