diff --git a/docs/devlog.md b/docs/devlog.md index cffe47c..8339d1b 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -2151,6 +2151,7 @@ if (dev >= dlt_ORG × 4) { | 版本 | 时间 | 说明 | |------|------|------| +| V2.77 | 2026-09-08 | 注释同步: TaskLoop.c/h + tests 全部 疾闪 → 一长两短 (V4.36.38 现役描述, 历史版本行保留变更记录) | | V2.76 | 2026-09-08 | V4.36.40 热切换修复: fault3 强制期 Origin/LPCNT 冻结 → recover 改 TMR3 实时 Xn 判回窗(240000/Xn); 恢复后 LOOP_OK 回位自动发起重连确认+判稳重建 Origin, 换线圈不断电 ~6s 自愈 | | V2.75 | 2026-09-08 | V4.36.39: COIL_UNDER_MIN_AS_OPEN 默认 0→1 (用户拍板) —— L<20µH 短路级出厂等同断开 | | V2.74 | 2026-09-08 | V4.36.38: fault2 可用级黄灯 疾闪100ms → 一长两短(900/300/100/300/100/700ms 6相, 用户定) | diff --git a/docs/technical-spec.md b/docs/technical-spec.md index fa3ace2..23c0305 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -1,6 +1,6 @@ # DLD154V4B 技术规格书 -> 单路线圈车辆检测器 | 固件版本: V4.36.40 | 文档版本: V2.58 +> 单路线圈车辆检测器 | 固件版本: V4.36.40 | 文档版本: V2.59 > 本文档面向工程开发、系统集成及故障深度分析 --- @@ -862,3 +862,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的 | V2.56 | 2026-09-08 | V4.36.38: fault2 可用级黄灯指示 疾闪100ms → **一长两短** (900/300/100/300/100/700ms 循环, 用户定节奏) | | V2.57 | 2026-09-08 | V4.36.39: COIL_UNDER_MIN_AS_OPEN 默认值 0→1 (用户拍板) —— L<20µH 短路级出厂即等同断开(判车停+继电器释放+绿灯灭) | | V2.58 | 2026-09-08 | V4.36.40 热切换修复: recover 恢复判定改 TMR3 实时 Xn(240000/Xn) —— 原 calc_freq_khz(冻结Origin,LPCNT) 永不回窗致换线圈死锁; 恢复后自然走重连+判稳重建 Origin | +| V2.59 | 2026-09-08 | 注释同步: 代码/测试全部 疾闪 → 一长两短 (V2.55~58 历史版本行保留当时变更记录) | diff --git a/tests/test_coil_range.c b/tests/test_coil_range.c index fdf1fae..b6e81ab 100644 --- a/tests/test_coil_range.c +++ b/tests/test_coil_range.c @@ -3,7 +3,7 @@ * * 验证对象: TaskLoop.c coil_monitor() (V4.26 拍板规格) * 默认低频档口径(43nF 三极管板, V4.36.37 方案A 分级): - * g_coil_fault: 0=正常 1=出窗一长一短(f<18k 或 125171k 短路级 L<20µH → 断开级快闪(宏 COIL_UNDER_MIN_AS_OPEN 功能随动) * 防抖: 越界/恢复均连续 COIL_FAULT_HOLD_TICKS(500tick=5s) 才置位/清除 * (V4.36.21 加长, 下限判定重要防误检瞬态冲高) @@ -100,8 +100,8 @@ static void test_boundaries(void) run_ticks(125, 500); assert(g_coil_fault == 0); /* 边界 125 正常(窗内) */ run_ticks(126, 500); assert(g_coil_fault == 1); /* 126 → L偏小出窗, 一长一短级 */ run_ticks(156, 500); assert(g_coil_fault == 1); /* 156 → 出窗但仍≥24µH, 一长一短级 */ - run_ticks(157, 500); assert(g_coil_fault == 2); /* 157 → 156~171k 可用级, 疾闪 */ - run_ticks(171, 500); assert(g_coil_fault == 2); /* 171 → 边界仍可用级疾闪 (f@20µH=171.6k) */ + run_ticks(157, 500); assert(g_coil_fault == 2); /* 157 → 156~171k 可用级, 一长两短 */ + run_ticks(171, 500); assert(g_coil_fault == 2); /* 171 → 边界仍可用级一长两短 (f@20µH=171.6k) */ run_ticks(172, 500); assert(g_coil_fault == 3); /* 172 → L<20µH 短路级, 断开级快闪 */ printf("4. 边界 17/18/125/126/156/157/171/172 OK\n"); } @@ -124,6 +124,6 @@ int main(void) test_recover(); test_boundaries(); test_jitter_no_alarm(); - printf("\nALL PASS (合理窗18~125kHz; 126~156=一长一短; 157~171=疾闪L20~24µH恒判车; >171=L<20µH短路级快闪; 防抖 5s)\n"); + printf("\nALL PASS (合理窗18~125kHz; 126~156=一长一短; 157~171=一长两短L20~24µH恒判车; >171=L<20µH短路级快闪; 防抖 5s)\n"); return 0; } diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index 5f8982f..afece45 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -81,7 +81,7 @@ #define ENV_WARN_WAIT 200 // 环境预判 (V4.31): dev>+4dlt 高位连续 ~2s → 黄灯预判锁存(回摆保持) #define ENV_RECOVER_WAIT 200 // 恢复确认 (V4.31): 新基线替换后 环境空闲连续 ~2s 才解除预判, 黄灯灭 #define COIL_F_OK_MIN_KHZ 18 // 线圈频率合理窗 (V4.36.18): 默认低频档口径, <18kHz → L偏大 (≈双 250µH+ 大线圈放行) -#define COIL_L_MIN_UH 24 // V4.36.23/25: 出窗偏小指示阈值 µH (对应 COIL_L_MIN_F_KHZ=156): L<此值 → 黄灯疾闪 100ms(独立节奏), 判定恒照常 +#define COIL_L_MIN_UH 24 // V4.36.23/25/38: 出窗偏小指示阈值 µH (对应 COIL_L_MIN_F_KHZ=156): L<此值 → 黄灯一长两短(可用级), 判定恒照常 #define COIL_L_SHORT_UH 20 // V4.36.37: 真短路级阈值 µH (方案A 分级): L<20µH(f>171k) → 断开级快闪(200ms, 与真断开同款), COIL_UNDER_MIN_AS_OPEN 作用于此级 #define COIL_L_SHORT_F_KHZ 171 // V4.36.37: f@20µH=171.6k 取 171: f>此值 → L<20µH 短路级 #define COIL_UNDER_MIN_AS_OPEN 1 // V4.36.24/37/39: L<20µH(f>171k, 短路级) 是否视为线圈断开完全状态(方案A 作用域从 156k 移到 171k): diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index e610a1d..afbe2d1 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -177,7 +177,7 @@ uint32_t g_stab_base = 0; // V4.36.15: 步进比较基准 CAPVD uint8_t g_release_need = 3; // V4.36.8: 释放确认样本数 (按Q档, 高3/中4/低5) uint8_t g_fault_phase = 0; uint16_t g_fault_tick = 0; -uint8_t g_coil_fault = 0; // V4.26/25/37: 电感量异常 0=正常 1=出合理窗→一长一短(f<18k L偏大 / 125k171k L<20µH短路级→断开级快闪(宏=1 等同断开) +uint8_t g_coil_fault = 0; // V4.26/25/37/38: 电感量异常 0=正常 1=出合理窗→一长一短(f<18k L偏大 / 125k171k L<20µH短路级→断开级快闪(宏=1 等同断开) uint16_t g_coil_bad_cnt = 0; // V4.26: 电感异常防抖计数 (V4.36.21: 500tick=5s 置位/清除, 宏 COIL_FAULT_HOLD_TICKS) /*=========================================================================== @@ -980,7 +980,7 @@ static uint32_t coil_l_uH(uint32_t f_khz) * 拍板规格: 默认低频档口径, 空场频率合理窗 20~120kHz, 出界即判定电感量不合理 * (黄灯"一长一短"告警, 见 poll_yellow_led 模式5) * 调用点保证: 仅稳定 + 无车空闲 + 未断开时执行 (车压/自检/断开不判) - * g_coil_fault: 0=正常 1=出窗一长一短 2=156~171k疾闪(可用级) 3=f>171k短路级(断开级快闪) + * g_coil_fault: 0=正常 1=出窗一长一短 2=156~171k一长两短(可用级) 3=f>171k短路级(断开级快闪) * 防抖: 越界/恢复均连续 COIL_FAULT_HOLD_TICKS(500tick=5s, V4.36.21) 才置位/清除 — 下限判定重要, 加长防误检 *===========================================================================*/ static void coil_monitor(void) @@ -994,14 +994,14 @@ static void coil_monitor(void) /* V4.36.25/37 四分语义 (43nF, 方案A 分级): * f<18k → want=1 L偏大 → 一长一短 * 125k171k → want=3 L<20µH 短路级 → 断开级快闪(200ms), COIL_UNDER_MIN_AS_OPEN 决定功能 */ if (f_khz < COIL_F_OK_MIN_KHZ) want = 1; /* L 偏大 */ else if (f_khz > COIL_L_SHORT_F_KHZ) want = 3; /* L<20µH 短路级 → 断开级快闪 */ else if (f_khz > COIL_L_MIN_F_KHZ) - want = 2; /* 156~171k L20~24µH → 疾闪(可用级) */ + want = 2; /* 156~171k L20~24µH → 一长两短(可用级) */ else if (f_khz > COIL_F_OK_MAX_KHZ) want = 1; /* L 偏小(出合理窗, 不低于下限) → 一长一短 */