feat: 冻结超时增加稳定性检查 — CAPVD波动超±2%则重置计数
问题: 上次提交仅计数冻结持续时长,若CAPVD在冻结期间大幅波动 (如车辆缓慢驶入过程中CAPVD持续爬升),30s后也会被误认为"环境变化"。 方案: - 新增 loop1_freeze_ref: 记录进入冻结时的CAPVD值 - 每tick检查 |CAPVD - freeze_ref| > freeze_ref * 2% - 波动超限 → 重置计数并以当前值重新开始计时 - 只有CAPVD连续30s稳定在±2%窗口内 → 才更新Origin 这确保了"连续稳定的新值"而非"连续偏高但波动的值"才会触发基线更新。
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
#define MAX_SLOPE_RATE 5 // 斜率限幅: 单次最大变化 5% (物理限制, 拒绝 EMI 尖峰)
|
||||
#define ENTRY_CONFIRM 3 // 进入确认: 连续 N 次低于阈值才判定有车
|
||||
#define FREEZE_TIMEOUT 3000 // 基线冻结超时: ~30s @ 10ms/tick, 持续偏高后强制更新基线
|
||||
#define FREEZE_STABILITY_RATE 2 // 冻结稳定性窗口: 参考值的 ±2% (CAPVD 需在此范围内才累计超时)
|
||||
|
||||
/*===========================================================================
|
||||
* 离开检测模式
|
||||
@@ -105,6 +106,7 @@ extern uint8_t loop1_cnt_release; // 离开防抖计数
|
||||
extern uint32_t loop1_CAPVD_fast; // 快速 IIR 值 (α=0.5, τ≈28ms, 用于检测)
|
||||
extern uint8_t loop1_entry_cnt; // 进入确认计数
|
||||
extern uint16_t loop1_freeze_cnt; // 基线冻结持续计数(超时后强制更新 Origin)
|
||||
extern uint32_t loop1_freeze_ref; // 冻结参考值(CAPVD 偏离此值超限则重置计数)
|
||||
#if USE_FLATNESS_EXIT
|
||||
extern uint8_t g_exit_state; // 离开检测: 0=追踪斜率, 1=等待平坦
|
||||
extern uint16_t g_max_slope; // 第一上升坡面最大 |f'|
|
||||
|
||||
Reference in New Issue
Block a user