feat(V4B): V4.23 — 红灯呼吸对齐vd960Loop(≈2.6s) + 上电自检基准判稳

现场测试 DLD154V4 反馈两问题修复:

1. 红灯呼吸太快 → 借鉴 vd960Loop 效果 (main.c poll_red_pwm)
   - 参数按 665/6800 缩放取整: 大步 100→39(≈5.9%), 近顶 20→10(≈1.5%),
     分界 585(88%), 峰值保持 660×3 步
   - 周期 ≈1.6s → ≈2.6s (仿真 42 步×60ms=2520ms)

2. 绿灯上电自检闪到"稳定基准值"才停 (TaskLoop.c 稳定期判稳)
   - 根因: 固定 128 样本即判稳, 与基准是否稳定无关; static 计数不清零,
     二次稳定期(安全复位)1 样本瞬间判稳
   - 修复: 全局 g_stable_cnt/g_settle_cnt, 每窗(100样本≈1s)Origin 均值
     漂移 ≤0.1% → settle++, 连续 2 窗 + 最少 128 样本判稳; 硬兜底 500
     样本(5s); 计数判稳退出/INIT_VD 清零

验证: tests/test_power_on_stable.c (200/300/500/200 样本 PASS),
      tests/test_red_breath.c (周期 2520ms/峰值保持/写值≤ARR PASS),
      gcc -fsyntax-only 两文件 0 error (借 vd960Loop AT32F421 库头)
文档: devlog 置顶 + 修订表回填 V2.12~V2.20 + V2.21; product-manual §5.1/
      核心特性; technical-spec V2.2 (§5.2 参数表/§7 判稳语义/§15 修订记录)

待现场验证: 呼吸观感、绿灯自检时长 (无车 2~3s / 首窗尖峰 3s / 5s 兜底)
This commit is contained in:
wangfq
2026-09-02 16:26:03 +08:00
parent 47898fd16e
commit cd0fd90770
8 changed files with 405 additions and 51 deletions
+20 -8
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V2.6 | 文档版本: V2.1
> 单路线圈车辆检测器 | 固件版本: V4.23 | 文档版本: V2.2
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -443,7 +443,10 @@ if (dev < dlt_ORG * 4) {
| PULSE_DELAY | 50 | **500 ms** | 脉冲输出宽度 |
| HOLD_TIME | 5×1200 | **~5 min** | 有限存在超时 |
| LC_HOLD_TIME | 4×1200 | **~4 min** | 安全复位超时 |
| STABLE_SAMPLES | 128 tick | **~128 ms** | 上电稳定期 |
| STABLE_SAMPLES | 128 tick | **≥1.3 s** | 上电稳定期最少样本(基准漂移达标才判稳,见 §7) |
| STABLE_ORIGIN_PPT | 1 | — | 判稳带:窗口 Origin 均值漂移 ≤ Origin×0.1% |
| STABLE_SETTLE_WINDOWS | 2 | ~2 s | 连续窗口漂移达标数 |
| STABLE_MAX_SAMPLES | 500 tick | **~5 s** | 自检硬兜底上限(超时强制判稳) |
| FREEZE_TIMEOUT | 1000 | **~10 s** | 基线冻结超时(连续稳定后更新 Origin) |
> **M4 优化**V2.0 将 tick 从 50ms (TMR15 5ms×10) 提升到 10ms (vTaskDelay 10ms)。IIR 系数同步调整(α 从 79/256→18/256),保持等效时间常数。进入确认 3×10ms + 500ms IN_DELAY = ~530ms,比旧设计 (50ms + 500ms = 550ms) 略快。基线更新从 5s 加速到 1s。
@@ -522,20 +525,28 @@ Origin 首次确立后,线圈振荡未真正稳定。立即启用检测容易
### 7.2 实现
```c
#define STABLE_SAMPLES 128 // ~128ms
#define STABLE_SAMPLES 128 // 最少样本 (128×10ms≈1.3s)
#define STABLE_ORIGIN_PPT 1 // 判稳带: 窗口均值漂移 ≤ Origin×0.1%
#define STABLE_SETTLE_WINDOWS 2 // 连续 2 窗漂移达标判稳
#define STABLE_MAX_SAMPLES 500 // 硬兜底 5s (防环境长期不稳无限自检)
if (!g_loop_stable) {
// 仅跟踪基线,不检测车辆
// 仅跟踪基线,不检测车辆 (窗=100样本≈1s)
update_moving_average(&ORG_SUM, &ORG_CNT, &Origin, CAPVD, 100);
if (++_stable_cnt >= STABLE_SAMPLES)
g_loop_stable = 1; // 稳定确认,正式启用检测
return; // 跳过进入/离开判断
// 每窗完成时比较 Origin 均值漂移: ≤0.1% → g_settle_cnt++, 否则清零
if ((g_stable_cnt >= STABLE_SAMPLES && g_settle_cnt >= STABLE_SETTLE_WINDOWS)
|| g_stable_cnt >= STABLE_MAX_SAMPLES)
g_loop_stable = 1; // 基准稳定确认, 正式启用检测 (V4.23)
return; // 跳过进入/离开判断
}
```
稳定期间绿灯继续慢闪(`poll_green_led` 条件包含 `!g_loop_stable`)。
稳定期间绿灯继续慢闪(`poll_green_led` 条件包含 `!g_loop_stable`**闪烁持续到基准值稳定才停止**
安全复位时 `loop1_LC_Reset` 重置 `g_loop_stable = 0`
> **V4.23 判稳语义**:自检结束 = 基准值稳定(连续 2 窗 Origin 漂移 ≤0.1%),而非固定样本数。
> 旧实现固定 128 样本即判稳,与基准是否稳定无关,且 static 计数残留导致二次稳定期 1 样本瞬间判稳——已改全局计数并在判稳退出/INIT_VD 时清零。
---
## 8. 线圈重连逻辑
@@ -740,3 +751,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V1.0 | 2026-06-24 | 技术规格书初版(V1.5 固件) |
| V2.0 | 2026-06-29 | 更新至 V2.5 固件:双路 IIR、斜率限幅、进入确认、冻结超时+稳定性 |
| V2.1 | 2026-06-29 | 更新至 V2.6:单路 IIR ALFA_CAP1=79, WINDOW_ORIGIN=500, 两阶段基线 |
| V2.2 | 2026-09-02 | 更新至 V4.23:上电稳定期判稳语义(基准漂移≤0.1%×2窗 + 5s兜底)、红灯呼吸周期≈2.6s、绿灯自检描述 |