docs: devlog — 记录 V2.1 CAPVD_fast 初始化修复 + V2.2 稳定期绕过 IIR/斜率限幅
This commit is contained in:
@@ -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 |
|
| V2.0 | 2026-06-26 | M4 优化: 双路 IIR + 斜率限幅 + 进入确认;tick 10ms |
|
||||||
| V1.7 | 2026-06-26 | vTaskDelay 10→50ms 修正(对齐原始 TMR15 5ms×10 设计);基线更新 1s→5s |
|
| 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 |
|
| V1.6 | 2026-06-24 | 时序修正:OUT_DELAY/PULSE_DELAY→500ms;RS485→TTL Tx |
|
||||||
|
|||||||
Reference in New Issue
Block a user