feat(V4B): V4.36.30 — 环带超时兜底: 时间回滞替代空间回滞
用户反馈 V4.36.29: 抬一点就释放(容差压塌回滞到4) / 反复试探=连续过车? - 撤 REL_LO_TOL=4: 回滞恢复 8 counts (Origin-49 触发/Origin-41 释放) - 新增 REL_BAND_TIMEOUT_TICKS=250(2.5s): 低Q 触发后 CAPVD 平滑>进入线 (已离开触发深度) 持续 2.5s → 强制释放 - 根治'板停空间回滞带内永久卡死'(试探场景); 真实车深压不触发(安全); J1 撤板 75s→2.5s; 抬 4 counts 不再立刻释放 - '越来越难释放'机制: 拿起板 Origin 被 env 学高, 试探快于收敛则净升 (远期 env 过冲抑制) - 低L 灵敏度自适应(进入带回放大)列为下一档评估 语法0 error, 4测试全绿; spec V2.46 / devlog V2.65
This commit is contained in:
@@ -45,6 +45,7 @@ uint32_t loop1_CAPVD_slow = 0; // 释放判定慢滤波值 (方案A)
|
||||
uint32_t g_rel_smooth = 0; // V4.36.19: 低Q 释放平滑值 (τ≈50ms, 复刻打印降采样平均效应)
|
||||
uint8_t g_q_lo = 0; // V4.36.19: 低Q 档标志 (空场 f>100kHz, update_q_confirm_need 同步)
|
||||
uint16_t g_origin_freeze_tick = 0; // V4.36.26: 释放后 Origin 均值窗冻结计数 (500ms, 切断 cycle 正反馈)
|
||||
uint16_t g_rel_band_cnt = 0; // V4.36.30: 低Q 环带超时兜底计数 (离开触发深度持续 2.5s → 强制释放)
|
||||
uint32_t loop1_Origin;
|
||||
uint32_t loop1_ORG_SUM;
|
||||
uint16_t loop1_ORG_CNT;
|
||||
@@ -288,7 +289,6 @@ static uint8_t rel_release_hit(void)
|
||||
if (g_q_lo) {
|
||||
_cmp = g_rel_smooth;
|
||||
_line = loop1_Origin - ((loop1_dlt_ORG * REL_BAND_LO_MULT) / 100);
|
||||
if (_line > REL_LO_TOL) _line -= REL_LO_TOL; /* V4.36.29: 容差破死锁(等效线 Origin-45) */
|
||||
}
|
||||
return (_line < _cmp) ? 1 : 0;
|
||||
}
|
||||
@@ -525,6 +525,7 @@ void INIT_VD(void)
|
||||
g_rel_smooth = 0; /* V4.36.19: 低Q 释放平滑清零 */
|
||||
g_q_lo = 0; /* V4.36.19: 低Q 档标志清零 */
|
||||
g_origin_freeze_tick = 0; /* V4.36.26: 释放冻结计数清零 */
|
||||
g_rel_band_cnt = 0; /* V4.36.30: 环带兜底计数清零 */
|
||||
loop1_CAP_OK = 0;
|
||||
loop1_CAPVD = 0;
|
||||
loop1_CAPVD_slow = 0; // 方案A: 释放慢滤波复位
|
||||
@@ -1363,6 +1364,7 @@ void vd1_task(void)
|
||||
loop1_CAPVD_slow = loop1_CAPVD;
|
||||
#endif
|
||||
g_rel_smooth = loop1_CAPVD; /* V4.36.19: 低Q 释放平滑 snap 到进入点 */
|
||||
g_rel_band_cnt = 0; /* V4.36.30: 环带兜底计数进入时清零 */
|
||||
|
||||
if (!SET_SAFE) {
|
||||
loop1_LC_HOLD = 1;
|
||||
@@ -1491,6 +1493,33 @@ void vd1_task(void)
|
||||
} else {
|
||||
if (loop1_cnt_release > 0) loop1_cnt_release = 0;
|
||||
}
|
||||
|
||||
/* V4.36.30: 环带超时兜底(仅低Q) — 板已离开触发深度(CAPVD 平滑 > 进入线)
|
||||
* 持续 2.5s → 强制释放. 空间回滞带(触发线~释放线)内停住不再永久卡死;
|
||||
* 真实车深压(dev 远深于触发线)不触发; 撤板/缓离离开触发线后 2.5s 内必释放 */
|
||||
if (g_q_lo) {
|
||||
uint32_t _entry_ln = loop1_Origin -
|
||||
(((uint32_t)loop1_Origin * SensTable[loop1_SensLevel]) >> 16);
|
||||
if (g_rel_smooth > _entry_ln) {
|
||||
g_rel_band_cnt++;
|
||||
if (g_rel_band_cnt >= REL_BAND_TIMEOUT_TICKS) {
|
||||
g_rel_band_cnt = 0;
|
||||
PRINT("Car_OFF(band_timeout), Value:%d CAPVD:%d Origin:%d dlt:%d\n",
|
||||
loop1_Value, loop1_CAPVD, loop1_Origin, loop1_dlt_ORG);
|
||||
loop1_VD_FLAG = 0;
|
||||
loop1_FLAG_OUT = 1;
|
||||
loop1_VD_HOLD = 0;
|
||||
loop1_LC_HOLD = 0;
|
||||
loop1_ORG_CNT = 0;
|
||||
loop1_ORG_SUM = 0;
|
||||
Hold_CNT = 0;
|
||||
loop1_cnt_release = 0;
|
||||
g_origin_freeze_tick = REL_ORIGIN_FREEZE_TICKS;
|
||||
}
|
||||
} else {
|
||||
g_rel_band_cnt = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user