Files
DLD110SV4B/docs/devlog.md
T
wangfq e3a27af24f feat: 检测算法移植 DLD154V4B V2.0, 删除旧线圈算法
- 自适应测量窗 2^19 (~8.74ms @60MHz), IIR 79/256 + 斜率限幅 5%
- 稳定期 128 窗快速收敛; 基线跟踪窗 500 + 冻结保护(超时+稳定性双条件)
- 进入确认 3 次; 平坦性三条件离开 (CN200910309382), 阈值按新幅值基准缩放
- 删除 FltHistoryManager/SecondOrderState/StageRangeConfig/二次判断/FUNCTION_A/B
- 断线重连/有限存在超时: 全复位重建基线; 安全复位恢复启用; 灵敏度开关运行时生效
- BLE: loop_capvd 去掉 <<5, condition 改用 g_env_activity, variation 幅值基准 8x
- 修复 update_moving_average window uint8 截断; 稳定期计数器改全局可复位
- FIRMWARE_VER 4.00 -> 4.20; 新增 README.md 与 docs/devlog.md
2026-07-18 23:30:12 +08:00

94 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DLD110SV4 开发日志
> MCU: CH591R (RISC-V, BLE) @60MHz | 通道: 1 路线圈 | 调试口: UART0 (DEBUG 编译, 230400)
## 2026-07-18 — 检测算法移植 DLD154V4B (V2.0)
### 背景
DLD110SV4 原固件 (V4.x) 使用旧一代算法: 一阶滤波 + 二阶变化量 + FltHistoryManager
多时间窗基准 + 二次判断 (FUNCTION_A/B) + 快速变化检测等多套机制叠加, 分支复杂、
参数纠缠, 现场调优困难。DLD154V4B 已在 AT32F421 上完成算法精简重构 (对齐 M1H 参考
实现 + M4 优化), 本次将其整体移植到 CH591R, 旧线圈算法代码全部删除。
### 移植内容
| 模块 | 旧实现 | 新实现 (移植后) |
|------|--------|----------------|
| 测量窗 | `LPCNT=(32768/Xn)<<6`, `Value=ΣXn>>5` (~65536, 窗长 ~35ms) | `LPCNT=2^19/Xn`, `Value=ΣXn` (~524288, 窗长 ~8.74ms) |
| 滤波 | IIR 79/256, 无限幅 | IIR 79/256 + 斜率限幅 5% (EMI 尖峰拒绝) |
| 开机收敛 | INIT_SAMPLE_COUNT=10 累加平均 | 稳定期 128 窗, 小窗口 100, 绕过 IIR |
| 基线跟踪 | 窗口 50, 有车冻结 | 窗口 500, 冻结保护 (超时 ~8.7s + 稳定性 ±2% 双条件) |
| 进入判定 | 单次阈值 (FUNCTION_B 时 3 次) | 连续 3 次确认 (ENTRY_CONFIRM) |
| 离开判定 | 滞回 + check_flat_leave + 二次判断嵌套 | 平坦性三条件 (CN200910309382), 滞回阈值 sens_out |
| 有限存在超时 | FLAG_HOLD_TIMEOUT → INIT_VD + 快速补偿窗 | 同思路保留: 全复位重建基线 |
| 断线重连 | flt_mgr.flag_loop_reconnect 多阶段恢复 (保留断开前 Origin 重判) | **简化为全复位重建基线** (断开时继电器已释放, 行为对齐 M1H) |
| 安全复位 | 代码存在但 LC_HOLD 激活被注释 (实际不生效) | **恢复启用**: loopSafe_Timeout 非 0 时进车启动计时 |
| 灵敏度切换 | 仅开机读取 (主循环 poll 被注释) | 每个测量窗轮询滑动开关, 运行时即时生效 |
### 删除的旧算法模块
`SecondOrderState` / `get_second_order` / `FltHistoryManager` (flt_mgr) /
`StageRangeConfig` (stage_config) / `update_flt_history` / `check_flt_by_stage` /
`check_flat_leave` / `update_lower_upper` / `reload_lower_upper` /
rapid_change 快速变化检测 / relay_on(off)_confirm 多重确认 / FUNCTION_A/B 分支。
`FUNCTION_*` 宏与 `g_function_mode` 保留 (BLE 协议 direction_mode 高 4 位仍读写),
但算法不再消费。
### 参数适配 (CH591R @60MHz)
| 参数 | DLD154V4B (@120MHz, 10ms) | DLD110SV4 (@60MHz) | 说明 |
|------|--------------------------|--------------------|------|
| MEASUREMENT_BASE | 131072 (2^17) | 524288 (2^19) | 窗长 2^19/60M ≈ 8.74ms, 接近 10ms 任务节拍 |
| ALFA_CAP1 | 79 (τ≈32ms) | 79 (τ≈24ms) | |
| WINDOW_ORIGIN | 500 (5s) | 500 (~4.4s) | |
| FREEZE_TIMEOUT | 1000 (10s) | 1000 (~8.7s) | |
| SLOPE_FLAT_THRESH | 100 | 350 | 幅值基准放大 4×、窗周期 0.87×, 净缩放 ~3.5× |
| MIN_DELTA2 / MIN_DELTA3 | 5 / 2 | 18 / 7 | 同上缩放, **待现场验证** |
| VARIATION_EVENT_TH | — | 40 | BLE variation 事件阈值, 对应旧代码的 5 (幅值 8×) |
### BLE 接口适配 (dbn_ble_srv.c)
- `loop_capvd` 上报: 旧值为 `ΣXn>>5`, BLE 端 `<<5` 还原; 新值直接 `ΣXn`,
**删除 `<<5`**。频率公式 `freq = g_sys_freq / (loop_capvd / LPCNT) + 360` 结构不变
(+360 为硬件校准偏移, 待现场复核)。
- `condition` (线圈环境评估 0~15): 旧源 `flt_mgr.cnt_not_idle`; 新源 `g_env_activity`
(CAPVD 相邻差 > ENV_ACT_TH=30 累加 / 否则衰减, **阈值待现场验证**)。
- `variation` = Origin CAPVD, 有符号, 饱和到 ±32767; 幅值基准变为 2^19,
**小程序端若有固定阈值需同步放大 8×**
### 顺手修复
- `update_moving_average``window` 参数 uint8_t → **uint16_t** (500 会被截断为 244,
DLD154V4B 已知 pitfall)。
- DLD154V4B 的 `_stable_cnt` 为函数内 static, 二次进入稳定期时不清零 → 1 个样本即判稳。
移植版改为全局 `loop1_stable_cnt`, 稳定期结束与 INIT_VD/安全复位时清零。
(**DLD154V4B 侧同样的隐患待回改**)
- TMR0 ISR 增加 Xn==0 保护 (除零) 与 LPCNT>65535 保护 (Xn 毛刺)。
- 进入判定成立时平坦性差分基准 `g_prev_capvd` 以当前 CAPVD 播种, 避免离开检测
第一帧出现虚假大斜率。
### 行为变化说明 (现场注意)
1. **断线重连不再尝试恢复断开前的车辆状态**, 一律重建基线 (~1.1s 稳定期 + 绿灯快闪)。
重连时若线圈上有车, 基线落在占用值, 不输出存在信号 — 与断开即释放的行为一致。
2. 安全复位 (loopSafe_Timeout) 从"配置存在但不生效"变为真正生效, 升级存量设备时
注意该参数配置值。
3. 灵敏度滑动开关运行时切换即时生效, 不再需要重新上电。
### 待现场验证
- [ ] 各频率档下 LPCNT / 实测窗长 / CAPVD 幅值 (示波器 + DEBUG 串口)
- [ ] 平坦性离开阈值 SLOPE_FLAT_THRESH=350, MIN_DELTA2=18, MIN_DELTA3=7
- [ ] ENV_ACT_TH=30 (condition 上报的灵敏程度)
- [ ] BLE 频率读数 +360 偏移是否仍准确 (测量方案已变)
- [ ] 小程序 variation 显示幅值 (基准放大 8×)
---
## 修订记录
| 版本 | 时间 | 说明 |
|------|------|------|
| V1.0 | 2026-07-18 | 建仓; 算法移植 DLD154V4B V2.0, 删除旧线圈算法; FIRMWARE_VER 4.00→4.20 |