docs: 更新开发日志 — 2026-06-29 M4优化移植 (V2.0~V2.5)
This commit is contained in:
@@ -43,10 +43,89 @@ freq = (sclk_freq × input_div × LPCNT) / CAPVD
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-06-29 — DLD154V4B V2.0~V2.5 M4 优化移植
|
||||||
|
|
||||||
|
> 参考: DLD154V4B 单路 M4 优化版算法,移植到 vd960Loop 四路并联
|
||||||
|
|
||||||
|
### 1. 时序加速: vTaskDelay 50ms → 10ms
|
||||||
|
|
||||||
|
主循环 tick 从 50ms 提升到 **10ms**(加速 5×)。TMR15 ISR 保持 5ms,TM1cnt 10 分频得到 50ms 中断,`Hold_CNT/OUTCNT/INCNT` 仍以 50ms 为单位。
|
||||||
|
|
||||||
|
**影响:**
|
||||||
|
- 检测响应更快:进入确认 3×10ms=30ms 即可判定
|
||||||
|
- 冻结超时 1000×10ms=10s
|
||||||
|
- WINDOW_ORIGIN=500 → 基线跟踪窗口 500×10ms=5s(等效原 100×50ms)
|
||||||
|
|
||||||
|
### 2. 斜率限幅 (Slope Limiter)
|
||||||
|
|
||||||
|
```c
|
||||||
|
MAX_SLOPE_RATE = 5% // 单次 IIR 输入变化不超过 CAPVD 的 5%
|
||||||
|
```
|
||||||
|
|
||||||
|
IIR 之前先对 `loop_Value` 做斜率限幅:与当前 `loop_CAPVD` 比较,变化幅度限制在 ±5% 以内(下限 100),防止突发电磁干扰污染 IIR 状态。
|
||||||
|
|
||||||
|
### 3. 进入确认 (Entry Confirm)
|
||||||
|
|
||||||
|
```c
|
||||||
|
ENTRY_CONFIRM = 3 // 连续 3 次低于阈值才判定有车
|
||||||
|
```
|
||||||
|
|
||||||
|
替代原来的单次触发:`loop_CAPVD < (Origin - dlt_ORG)` 计数 `loop_entry_cnt++`,达到 3 次才置 `loop_VD_FLAG=1`。中途高于阈值则清零,消除偶发毛刺导致的误触发。
|
||||||
|
|
||||||
|
### 4. 基线冻结超时 (Freeze Timeout)
|
||||||
|
|
||||||
|
```c
|
||||||
|
FREEZE_TIMEOUT = 1000 // 10s @10ms/tick
|
||||||
|
FREEZE_STABILITY_RATE = 2 // 稳定性窗口 ±2%
|
||||||
|
```
|
||||||
|
|
||||||
|
有车期间基线被冻结(`ORG_CNT/ORG_SUM` 清零不更新),但新增超时机制:
|
||||||
|
- 冻结时记录参考值 `loop_freeze_ref`
|
||||||
|
- 若 CAPVD 波动超过 ±2%,重新计时(车还在动)
|
||||||
|
- 若 CAPVD 在 ±2% 内稳定超过 10s,强制 `Origin = CAPVD`(视为长时间停车,基线应更新)
|
||||||
|
- 解决长时间停车导致基线永久偏离的问题
|
||||||
|
|
||||||
|
### 5. IIR 简化: 双路 → 单路
|
||||||
|
|
||||||
|
初始移植了双路 IIR(慢速 α=18/256 + 快速 α=0.5),经测试发现快速 IIR 引入额外噪声,最终**去掉快速 IIR**,仅保留慢速:
|
||||||
|
|
||||||
|
```c
|
||||||
|
ALFA_CAP1 = 79 // α = 79/256 ≈ 0.31, @10ms → τ ≈ 32ms
|
||||||
|
```
|
||||||
|
|
||||||
|
斜率限幅直接对慢速 IIR 输入做限制,简化逻辑且效果一致。
|
||||||
|
|
||||||
|
### 6. 稳定期快速收敛
|
||||||
|
|
||||||
|
稳定期 `!loop_stable` 绕过 IIR + 斜率限幅:
|
||||||
|
- 直接用 `loop_CAPVD = loop_Value`(raw value)
|
||||||
|
- `update_moving_average` 窗口改为 **100**(小窗口快速收敛)
|
||||||
|
- 128 样本约 1.28s 完成初始化
|
||||||
|
|
||||||
|
稳定后切换回正常 IIR + WINDOW_ORIGIN=500 慢跟踪。
|
||||||
|
|
||||||
|
### 7. 参数修正
|
||||||
|
|
||||||
|
| 参数 | 旧值 | 新值 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| `WINDOW_ORIGIN` | 100 | 500 | 基线窗口 5s @10ms |
|
||||||
|
| `update_moving_average` window | `uint8_t` | `uint16_t` | 修复 500→256 溢出 |
|
||||||
|
| `loop_entry_cnt` | — | `uint8_t` | 新增: 进入确认计数器 |
|
||||||
|
| `loop_freeze_cnt` | — | `uint16_t` | 新增: 冻结持续计数 |
|
||||||
|
| `loop_freeze_ref` | — | `uint32_t` | 新增: 冻结参考值 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 修订记录
|
## 修订记录
|
||||||
|
|
||||||
| 版本 | 时间 | 说明 |
|
| 版本 | 时间 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| V2.2 | 2026-06-26 | vTaskDelay 10→50ms 对齐原始设计 |
|
| V2.5 | 2026-06-29 | 稳定期窗口 100 快速收敛 |
|
||||||
| V2.1 | 2026-06-26 | hold_time/relay_delay 可配置,有限存在完整重启 |
|
| V2.4 | 2026-06-29 | 去掉快速 IIR,ALFA_CAP1=79 @10ms |
|
||||||
| V2.0 | 2026-06-26 | 频率上报 CAPVD→实际频率转换 |
|
| V2.3 | 2026-06-29 | 基线冻结超时 + 稳定性检查 |
|
||||||
|
| V2.2 | 2026-06-29 | 进入确认 ENTRY_CONFIRM=3 |
|
||||||
|
| V2.1 | 2026-06-29 | 斜率限幅 MAX_SLOPE_RATE=5% |
|
||||||
|
| V2.0 | 2026-06-29 | vTaskDelay 50→10ms, 双路 IIR 移植 |
|
||||||
|
| V1.3 | 2026-06-26 | vTaskDelay 10→50ms 对齐原始设计 |
|
||||||
|
| V1.2 | 2026-06-26 | hold_time/relay_delay 可配置,有限存在完整重启 |
|
||||||
|
| V1.1 | 2026-06-26 | 频率上报 CAPVD→实际频率转换 |
|
||||||
|
|||||||
Reference in New Issue
Block a user