diff --git a/docs/devlog.md b/docs/devlog.md index 92c79fc..dc5596d 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -4,6 +4,23 @@ --- +## 2026-09-04 — 环带超时兜底:时间回滞替代空间回滞(固件 V4.36.30) + +用户反馈三连(V4.36.29):①抬一点点就释放(容差 4 压塌回滞到 4 counts)②是否启用低L 灵敏度自适应建议 ③反复试探≈连续过车?会不会越来越难释放? + +- ①答:容差方案方向错误——**撤 REL_LO_TOL**,回滞恢复 8 counts(Origin-49 触发 / Origin-41 释放) +- ③答:试探循环=连续过车压力测试;"越来越难释放"机制实证=每次拿起板 CAPVD 冲高→Origin 被 env 学习学高(J1: 129123→130636 跳 1500;均值窗 15s 收敛)→ 试探节奏快于收敛则 Origin 净升 → 释放线升(发散趋势但无界,远期需 env 过冲抑制) +- ②待评估:低L 灵敏度体系调整(进入带回放大)列为下一档 + +**V4.36.30 核心:环带超时兜底(时间回滞替代空间回滞)** +- 空间回滞带(触发线~释放线之间 8 counts 宽)内停住 = 试探卡死根源:任何固定释放线都有带 +- 兜底:低Q VD=1 且 CAPVD 平滑 > 进入线(Origin-49,板已离开触发深度)持续 2.5s → 强制释放 +- 撤板/缓离离开触发线 → 2.5s 内必释放(J1 原 75s → 2.5s) +- 真实车深压(dev 远超触发线)不触发兜底 → 安全 +- 板抬 4 counts 停带内 → 不立刻释放(回滞 8 恢复)→ 停 2.5s 才兜底放(不"太容易") +- g_rel_band_cnt 全局/INIT/进入 snap 清零;仅 g_q_lo 生效 +语法 0 error、4 测试全绿;REV 4.36.30;spec V2.46 / devlog V2.65。 + ## 2026-09-04 — 低Q 延迟释放(75s)根因:Origin 过冲残留 + 平滑差 1 count → 释放容差(固件 V4.36.29) J1 日志(V4.36.28, 23µH):15:46:09 Car_In 后卡 75s,15:47:24 才 Car_OFF(用户撤板后"好久才释放")。 @@ -2050,6 +2067,7 @@ if (dev >= dlt_ORG × 4) { | 版本 | 时间 | 说明 | |------|------|------| +| V2.65 | 2026-09-04 | V4.36.30 环带超时兜底(时间回滞): 撤容差4; 低Q 离开触发深度持续2.5s 强制释放; 试探卡死根治 | | V2.64 | 2026-09-04 | V4.36.29 释放容差 REL_LO_TOL=4: Origin 过冲残留(34)被 VD 冻结→释放线偏高→RSM 差 1 count 卡 75s → 容差破死锁 | | V2.63 | 2026-09-04 | V4.36.28 低Q 锁死根因: 静态带回缺口(23µH 回摆 Origin-36 vs 线 Origin-34 差2counts) → MULT 150→180(带回41); 诊断字段 V4.36.27 | | V2.62 | 2026-09-04 | V4.36.26 低Q 剂量加大: REL_ALFA 30(τ85ms) + 释放后 Origin 均值窗冻结 500ms(治本, 切断 cycle 正反馈) | diff --git a/docs/technical-spec.md b/docs/technical-spec.md index 0ad6210..fec985b 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -1,6 +1,6 @@ # DLD154V4B 技术规格书 -> 单路线圈车辆检测器 | 固件版本: V4.36.29 | 文档版本: V2.45 +> 单路线圈车辆检测器 | 固件版本: V4.36.30 | 文档版本: V2.46 > 本文档面向工程开发、系统集成及故障深度分析 --- @@ -834,3 +834,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的 | V2.43 | 2026-09-04 | **V4.36.26 低Q 发散治理剂量加大(方案A)**:REL_ALFA 46→30(τ 50→85ms);带回保持 35(回滞 14 counts 不再压缩);新增 REL_ORIGIN_FREEZE_TICKS=50——释放确认(Car_OFF)后 Origin 均值窗冻结 500ms,切断「释放残余→Origin 学入→释放线漂移」cycle 间正反馈(治本项) | | V2.44 | 2026-09-04 | **V4.36.27/28 低Q 锁死根因定位与带回修正**(23µH/33µH 双日志对照 + 诊断字段 QLO/RSM/RLN/RCN):排除 Origin 漂移(全程恒定)与 g_q_lo(=1 正常)与平滑滞后(RSM 跟随正常)→ 根因=**静态带回缺口**:23µH 板停临界稳态 CAPVD 回摆仅 Origin-36,释放线 Origin-34(MULT150)反而更高 2 counts → RCN 永不累计 → 锁死;33µH 回摆 Origin-25 富余 9 → 正常。实测 σ≈1-2 counts(此前 σ25 假设错误)。修正 REL_BAND_LO_MULT 150→180(带回 35→41,线 Origin-41 < Origin-36 稳态,余 4 counts;触发-释放回滞 49-41=8 counts=4~8σ 安全);V4.36.27 为诊断字段过渡版 | | V2.45 | 2026-09-04 | **V4.36.29 低Q 释放判定容差 REL_LO_TOL=4**(J1 日志 75s 延迟释放根因):Origin 过冲残留(拿起板 env 学高 34 counts, 释放后均值窗 7s 收敛)被 VD 冻结 → 释放线偏高 → 撤板后真空 CAPVD 距线仅 7 counts、RSM 平滑差 1 count 卡 75s。容差 4 = 等效释放线 Origin-45(回滞 49-45=4 counts, σ1-2 安全);板停触发深处(dev-49)不误释放;正常撤板余量不变 | +| V2.46 | 2026-09-04 | **V4.36.30 环带超时兜底替代容差**(用户反馈 V4.36.29 容差致"抬一点就释放"):撤 REL_LO_TOL=4(回滞恢复 8 counts);新增 REL_BAND_TIMEOUT_TICKS=250——低Q 触发后若 CAPVD 平滑 > 进入线(已离开触发深度)持续 2.5s → 强制释放。空间回滞带内停住(试探卡死)不再永久锁;真实车深压不触发;J1 撤板 2.5s 内释放(原 75s) | diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index 836be08..e45b8ea 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -38,9 +38,8 @@ #define RELEASE_ALFA 21 // 释放慢滤波 α = 21/256 ≈ 0.082 (@10ms → 精确τ≈117ms, V4.04: 对齐 PD132T α79@43.7ms 精确τ≈118ms; 原18→精确τ137ms偏慢) #define REL_ALFA 30 // V4.36.19/26: 低Q 释放平滑 α=30/256≈0.117 (@10ms → τ≈85ms, 46→30): 复刻打印降采样平均效应, 只用于低Q 释放判定抗抖 (V4.36.26 加大剂量 50→85ms) #define REL_BAND_LO_MULT 180 // V4.36.19/28: 低Q 释放带回加宽 % (dlt_rel×1.8: 23→41@SENS3): 防边界试探锁死 -#define REL_LO_TOL 4 // V4.36.29: 低Q 释放判定容差 counts (破"平滑差 1~2 counts 死锁"): - // J1 实测 Origin 过冲残留 34 → 释放线偏高 → 撤板后真空 CAPVD 距线 7 counts, - // RSM 差 1 count 卡 75s; 容差 4 = 等效线 Origin-45, 回滞 49-45=4 (σ1-2 → 2~4σ 安全) +#define REL_BAND_TIMEOUT_TICKS 250 // V4.36.30: 低Q 环带超时兜底 2.5s(@10ms): 板已离开触发深度(CAPVD>进入线) + // 持续 2.5s → 强制释放 (空间回滞带内停住不再永久卡死; 用时间回滞替代空间回滞) // 150(→35)不够: 23µH 现场实测板停临界回摆 Origin-36, 需释放线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 } }