From d8411ef351ff11b2ce6e28cbd2b30209e3901854 Mon Sep 17 00:00:00 2001 From: wangfq Date: Tue, 8 Sep 2026 15:29:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(V4B):=20V4.36.36=20=E2=80=94=20=E5=B0=B1?= =?UTF-8?q?=E7=BB=AA=E5=B7=A9=E5=9B=BA=E6=9C=9F=20Q=20=E5=88=86=E7=BA=A7?= =?UTF-8?q?=20(=E9=AB=985s/=E4=B8=AD7s/=E4=BD=8E10s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 低Q 上电判稳完(绿灯灭)即压板 → 绿灯常亮 (系统未收敛完) 判稳完成(1204)后按 Q 档置巩固期, 绿灯继续慢闪至期满灭: - READY_HOLD_HI=1000(5s)/MID=1400(7s)/LO=2000(10s) @5ms tick (poll_green_led 递减) - 巩固期系统正常收敛(Origin/EMA/滤波) → 绿灯灭=可操作 - Q 档与 update_q_confirm_need 同口径 (f>100k 低/80~100k 中/≤80k 高) - Loop stable 打印带 ready:Ns 语法0 error, 4测试全绿; spec V2.53 / devlog V2.71 --- docs/devlog.md | 13 +++++++++++++ docs/technical-spec.md | 3 ++- utilities/at32f421_freertos_demo/inc/TaskLoop.h | 5 +++++ utilities/at32f421_freertos_demo/inc/cmcng.h | 4 ++-- utilities/at32f421_freertos_demo/src/TaskLoop.c | 16 ++++++++++++++-- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/docs/devlog.md b/docs/devlog.md index 1f98ed3..a773702 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -4,6 +4,18 @@ --- +## 2026-09-08 — 就绪巩固期 Q 分级:低Q 上电首压防卡(固件 V4.36.36) + +用户反馈:电感偏低/低Q 线圈上电自检结束(绿灯灭)马上压板,大概率绿灯常亮;10s 后再测正常。要求绿灯自检闪时长分级:高Q 5s/中Q 7s/低Q ≥10s。 + +**实现**(判稳完成 1204 处按 Q 三分置巩固期;poll_green_led ISR 5ms 递减): +- READY_HOLD_HI_TICKS=1000(5s)/MID=1400(7s)/LO=2000(10s) @5ms tick +- 巩固期条件加入绿灯慢闪 (INI || !power_up || !stable || g_ready_hold_tick>0) +- 期间 Origin 均值窗/EMA/滤波正常收敛 → 绿灯灭=系统已巩固 → 首压不卡 +- Q 档与 update_q_confirm_need 同口径: f>100k 低 / 80~100k 中 / ≤80k 高 +- Loop stable 打印带 ready:Ns 便于现场核对 +语法 0 error、4 测试全绿;REV 4.36.36;spec V2.53 / devlog V2.71。 + ## 2026-09-08 — EMA cast 顺序根治:爆炸源定位(固件 V4.36.35) 35µH V4.36.34 全绿日志(13+ cycle 全正常,band_timeout 兜底实战 2 次 14:10:54/14:11:05,SUM 对照 0~58M 循环符合 500 窗)——但 VEM 恒 130715 暴露玄机:CAPVD 经常低 2~10 counts(差负)而 VEM 纹丝不动。 @@ -2139,6 +2151,7 @@ if (dev >= dlt_ORG × 4) { | 版本 | 时间 | 说明 | |------|------|------| +| V2.71 | 2026-09-08 | V4.36.36 就绪巩固期 Q 分级(高5s/中7s/低10s): 低Q 上电首压防卡 | | V2.70 | 2026-09-08 | V4.36.35 EMA cast 根治(有符号先除): (uint32)负差/128=+3355万爆炸源; ADR 条件修复 | | V2.69 | 2026-09-08 | V4.36.34 EMA 钳位自愈+SUM/ADR 诊断: 35µH VEM 垃圾实锤(写源待定) | | V2.68 | 2026-09-04 | V4.36.33 vac_ref 重锚阈值(Origin−EMA>1×dlt 才锚 EMA): 修边缘悬停拉低 EMA 触发高度漂移 | diff --git a/docs/technical-spec.md b/docs/technical-spec.md index ef24bb3..137c3d4 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -1,6 +1,6 @@ # DLD154V4B 技术规格书 -> 单路线圈车辆检测器 | 固件版本: V4.36.35 | 文档版本: V2.52 +> 单路线圈车辆检测器 | 固件版本: V4.36.36 | 文档版本: V2.53 > 本文档面向工程开发、系统集成及故障深度分析 --- @@ -845,3 +845,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的 | V2.50 | 2026-09-04 | **V4.36.33 vac_ref 重锚阈值 VAC_REF_DELTA_DLT=1**:用户反馈触发高度漂移(间隔几秒再压变浅、多试几轮恢复)——EMA(α128 τ1.28s)+4×dlt 宽窗把金属板悬感应边缘(dev−20~−40)当真空快学 → vac_ref 被拉低 → 触发线漂移。修: 仅 Origin−EMA>1×dlt(真锚错 J1 130 counts) 才重锚 EMA, 小偏差用 Origin | | V2.51 | 2026-09-08 | **V4.36.34 EMA 钳位+自愈+诊断**:35µH 日志 VEM 垃圾实锤(536M→846M→2224M 递增, 10:23:03 起) → EMA 内存被越界写(值≈ORG_SUM 语义但数值不匹配; 写源未定)。防御: EMA 每步限 ±3×dlt、与 Origin 偏差>25% 自愈回 Origin;诊断: DBG 加 SUM(ORG_SUM 对照)+每 10s ADR(四变量地址) | | V2.52 | 2026-09-08 | **V4.36.35 EMA cast 顺序根治**:(uint32_t)负差/128 = +3355万/样本(C 语义: 负 cast uint32 后无符号除法)——V4.36.31 引入的 EMA 爆炸源, V4.36.34 自愈每样本兜住(炸+重置净零)掩盖; 修: 有符号先除 (uint32_t)(_ema_d/128)。35µH V4.36.34 全绿: 13+ cycle 正常+band_timeout 兜底 2 次实战; ADR 条件修复(_t_ms 恒 2000 原永不触发) | +| V2.53 | 2026-09-08 | **V4.36.36 就绪巩固期 Q 分级**:低Q 上电判稳完(绿灯灭)即压板 → 绿灯常亮(系统未收敛完)。判稳完成后再按 Q 档绿灯继续慢闪: 高Q 5s(READY_HOLD_HI=1000)/中Q 7s(MID=1400)/低Q 10s(LO=2000, 5ms tick)——期间 Origin/EMA/滤波继续收敛, 绿灯灭才允许操作。Loop stable 打印带 ready:Ns | diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index a6b43b5..1721acc 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -68,6 +68,11 @@ #define ORIGIN_LOWLEARN_TICKS 200 // V4.36.32: 冻结后降权低速补偿期 2000ms: 残余低值样本权重降 ×1/MULT // 仿 PD132T 慢采样等效(10ms 快采样让 5s 窗装得快, 残余易拉低 Origin; 慢学更稳) #define ORIGIN_LOWLEARN_MULT 5 // V4.36.32: 降权期均值窗放大 500→2500 样本(25s 窗), 学习速率 1/5 +#define READY_HOLD_HI_TICKS 1000 // V4.36.36: 判稳后就绪巩固期 (5ms tick): 高Q 5s/中Q 7s/低Q 10s + // 低Q 上电自检刚完(绿灯灭)即压板易绿灯常亮 — 巩固期绿灯继续慢闪, + // 期间 Origin/EMA/滤波继续收敛, 绿灯灭才允许操作 (5s/7s/≥10s 用户拍板) +#define READY_HOLD_MID_TICKS 1400 // 中Q 7s +#define READY_HOLD_LO_TICKS 2000 // 低Q 10s #define REL_CONFIRM_HI 3 // 高Q 释放确认样本 #define REL_CONFIRM_MID 4 // 中Q #define REL_CONFIRM_LO 5 // 低Q: 释放边界抖动, 多样本防输出抖落 diff --git a/utilities/at32f421_freertos_demo/inc/cmcng.h b/utilities/at32f421_freertos_demo/inc/cmcng.h index fb04190..165b295 100644 --- a/utilities/at32f421_freertos_demo/inc/cmcng.h +++ b/utilities/at32f421_freertos_demo/inc/cmcng.h @@ -14,11 +14,11 @@ #define __CMCNG_H__ #define PRODUCT_MODEL "DLD154" -#define FIRMWARE_VER "4.36.35" // ..޶ (2026-09-03 : СĶֻ REV; MAIN/SUB ɲƷ) +#define FIRMWARE_VER "4.36.36" // ..޶ (2026-09-03 : СĶֻ REV; MAIN/SUB ɲƷ) #define HARDWARE_VER "3.00" #define FIRMWARE_VER_MAIN 4 #define FIRMWARE_VER_SUB 36 -#define FIRMWARE_VER_REV 35 +#define FIRMWARE_VER_REV 36 #define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_SUB 0 diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index 722566c..82b59c7 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -48,6 +48,7 @@ uint16_t g_origin_freeze_tick = 0; // V4.36.26/32: 释放后 Origin 全冻 uint16_t g_origin_lowlearn_tick = 0; // V4.36.32: 冻结后降权低速补偿计数 (2s, 残余低值降权学入) uint16_t g_rel_band_cnt = 0; // V4.36.30: 低Q 环带超时兜底计数 (离开触发深度持续 2.5s → 强制释放) uint32_t g_vacuum_ema = 0; // V4.36.31: 真空 EMA 基线 (B3: 释放/触发参考与锚错 Origin 解耦) +uint16_t g_ready_hold_tick = 0; // V4.36.36: 判稳后就绪巩固期计数 (5ms tick, poll_green_led 递减; 按 Q 档置 5s/7s/10s) uint32_t loop1_Origin; uint32_t loop1_ORG_SUM; uint16_t loop1_ORG_CNT; @@ -365,7 +366,9 @@ void poll_green_led(void) static uint16_t _slow_tick = 0; /*--- 自检阶段:慢闪(就绪过程指示;此阶段继电器未驱动) ---*/ - if (loop1_INI_LOOP || !g_loop_power_up_state || !g_loop_stable) { + if (loop1_INI_LOOP || !g_loop_power_up_state || !g_loop_stable || g_ready_hold_tick > 0) { + /* V4.36.36: 就绪巩固期 (判稳后按 Q 档 5s/7s/10s) 绿灯继续慢闪, 递减放此 (ISR 5ms) */ + if (g_ready_hold_tick > 0) g_ready_hold_tick--; _slow_tick++; if (_slow_tick >= GREEN_SLOW_HALF) { _slow_tick = 0; @@ -542,6 +545,7 @@ void INIT_VD(void) g_origin_freeze_tick = 0; /* V4.36.26: 释放冻结计数清零 */ g_rel_band_cnt = 0; /* V4.36.30: 环带兜底计数清零 */ g_vacuum_ema = 0; /* V4.36.31: 真空 EMA 清零 (判稳后重建) */ + g_ready_hold_tick = 0; /* V4.36.36: 就绪巩固期清零 (重建判稳时会再置) */ g_origin_lowlearn_tick = 0; /* V4.36.32: 降权期计数清零 */ loop1_CAP_OK = 0; loop1_CAPVD = 0; @@ -1205,7 +1209,15 @@ void vd1_task(void) g_stable_cnt = 0; // 计数退出时清零: 二次稳定期(安全复位)从零开始 g_settle_cnt = 0; g_vacuum_ema = loop1_Origin; /* V4.36.31: 判稳完成建立真空基线 */ - PRINT("Loop stable, Origin:%d\n", loop1_Origin); + /* V4.36.36: 就绪巩固期按 Q 分档 (高Q 5s/中Q 7s/低Q 10s) — 绿灯继续慢闪期间系统收敛 */ + { + uint32_t _f0 = calc_freq_khz(loop1_Origin, loop1_LPCNT); + if (_f0 > RECONNECT_Q_MID_F_KHZ) g_ready_hold_tick = READY_HOLD_LO_TICKS; + else if (_f0 > RECONNECT_Q_HI_F_KHZ) g_ready_hold_tick = READY_HOLD_MID_TICKS; + else g_ready_hold_tick = READY_HOLD_HI_TICKS; + } + PRINT("Loop stable, Origin:%d, ready:%us\n", loop1_Origin, + (unsigned)(g_ready_hold_tick / 200)); } return; }