diff --git a/docs/devlog.md b/docs/devlog.md index 891a4fa..3af37a7 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -4,6 +4,19 @@ --- +## 2026-09-04 — 最低工作电感量 COIL_L_MIN_UH=20µH,低于则按线圈断开指示(固件 V4.36.20) + +用户需求:设定最低电感量工作值(默认 20µH,43nF 低频档口径,宏定义), +当线圈电感量低于该值时,车检器黄灯快闪、以"线圈断开状态"来指示。 + +- 新增 `COIL_L_MIN_UH 20`(TaskLoop.h);频率窗上限 125→171kHz(=20.06µH, + 43nF: L=2.533e7/(f²×43))——20~38µH 小线圈(含现场 21/23µH 测试线圈)转为可正常工作 +- `coil_fault==2`(f>171kHz, L<20µH)归入黄灯**模式1 断开级快闪**(200ms toggle), + 与 !LOOP_OK/reconn_stab 同级;一长一短(模式5)仅保留给 `coil_fault==1`(L 偏大 f<18kHz) +- coil_monitor 防抖不变(越界/恢复 1s);继电器/判定逻辑不受影响(仅指示级) +- test 边界:171 正常 / 172(L<20µH) 偏小;L 偏大 17;全绿 +语法 0 error、4 测试全绿;REV 4.36.20;spec V2.37 / devlog V2.56。 + ## 2026-09-04 — 故障补偿触发幅度量化说明(文档 V2.55,无代码改动) 用户要求文档给出"多大的环境变化触发黄灯常亮"的具体数字。 @@ -1931,6 +1944,7 @@ if (dev >= dlt_ORG × 4) { | 版本 | 时间 | 说明 | |------|------|------| +| V2.56 | 2026-09-04 | V4.36.20 最低工作电感量 COIL_L_MIN_UH=20µH (43nF): L<20µH(f>171k)→断开级快闪; 一长一短仅 L 偏大; test 171/172 | | V2.55 | 2026-09-04 | 故障补偿触发幅度量化说明 (dev>+4×dlt; SENS=3≈电感+0.31%) | | V2.54 | 2026-09-04 | V4.36.19 低Q 释放抗抖: τ50ms 平滑判释放+带回×1.5 (REL_ALFA/REL_BAND_LO_MULT), 高/中Q 零影响 | | V2.53 | 2026-09-04 | V4.36.18 频率窗下界 20→18kHz (18~125kHz) | diff --git a/docs/product-manual.md b/docs/product-manual.md index 3a18a59..1ecc5b8 100644 --- a/docs/product-manual.md +++ b/docs/product-manual.md @@ -186,8 +186,8 @@ SW_5 = ON 时:车辆(金属)持续压线超过 **4 分钟**(LC_HOLD_TIME | 故障类型 | 红灯 | 绿灯 | 黄灯 | 说明 | |---------|------|------|------|------| -| 线圈断开(当前) | 呼吸 | 灭 | **快闪** (200ms) | 检查线圈连接。**断开前有车:继电器保持 RELAY_HOLD_MS=1000ms 后仍断才释放**(防瞬时断开误释放,宏可调)。**重连后无车判稳门控**:值稳定(600ms 无漂移)且回带内才放行检测,判稳期黄灯保持快闪,Origin 自动对齐新空场 | -| 线圈电感量不合理(V4.26/V4.36.13) | 呼吸 | 灭(无车) | **一长一短** (900ms亮/300ms灭/100ms亮/700ms灭 循环) | 空场频率出 18~125kHz(默认低频档):L偏大(f<18k)/L偏小(f>125k),检查线圈匝数/尺寸 | +| 线圈断开(当前)或 **L<20µH**(V4.36.20:f>171kHz 最低工作电感以下,按断开指示) | 呼吸 | 灭 | **快闪** (200ms) | 检查线圈连接。**断开前有车:继电器保持 RELAY_HOLD_MS=1000ms 后仍断才释放**(防瞬时断开误释放,宏可调)。**重连后无车判稳门控**:值稳定(600ms 无漂移)且回带内才放行检测,判稳期黄灯保持快闪,Origin 自动对齐新空场 | +| 线圈电感量不合理(V4.26/V4.36.13/20) | 呼吸 | 灭(无车) | **一长一短** (900ms亮/300ms灭/100ms亮/700ms灭 循环) | 空场频率 <18kHz → L 偏大(>合理上限),检查线圈匝数/尺寸;**L<20µH(f>171k) 不在此模式,见上行断开快闪** | | 线圈重连,断开 1 次 | 呼吸 | 正常 | **1 短闪** + 1.2s 灭 | 发生过 1 次断开,已恢复 | | 线圈重连,断开 2 次 | 呼吸 | 正常 | **2 短闪** + 1.2s 灭 | 发生过 2 次断开,已恢复 | | 线圈重连,断开 3+ 次 | 呼吸 | 正常 | **3 短闪** + 1.2s 灭 | 多次断开,建议检查接头 | @@ -243,7 +243,7 @@ SW_5 = ON 时:车辆(金属)持续压线超过 **4 分钟**(LC_HOLD_TIME | 现象 | 可能原因 | 处理方法 | |------|---------|----------| -| 黄灯快闪,绿灯灭 | 线圈断开或未连接 | 检查线圈接头、引线通断 | +| 黄灯快闪,绿灯灭 | 线圈断开/未连接,或电感量 <20µH(f>171kHz) | 检查线圈接头、引线通断;小线圈核对匝数(43nF 档最低 20µH) | | 绿灯常亮不灭 | 灵敏度太高 / 线圈频率漂移 | 降低灵敏度 / 检查线圈 | | 绿灯从不亮 | 灵敏度太低 / 线圈 Q 值过低 | 提高灵敏度 / 更换线圈 | | 红灯不亮 | 电源故障 | 检查供电电压 | diff --git a/docs/technical-spec.md b/docs/technical-spec.md index 4afe6c2..5a1a54d 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -1,6 +1,6 @@ # DLD154V4B 技术规格书 -> 单路线圈车辆检测器 | 固件版本: V4.36.19 | 文档版本: V2.35 +> 单路线圈车辆检测器 | 固件版本: V4.36.20 | 文档版本: V2.37 > 本文档面向工程开发、系统集成及故障深度分析 --- @@ -824,3 +824,5 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的 | V2.33 | 2026-09-04 | **V4.36.17 修复上电无线圈黄灯不闪**:断开分支置位条件含 power_up(上电 phase 故意不置 disconnect_active),V4.36.16 去 !power_up 后裸奔 → 黄灯模式1 改 `!LOOP_OK || g_reconn_stab`(5ms 实时载波缺失判定,同时让运行中断开黄灯反应从 150ms 加快到 5ms) | | V2.34 | 2026-09-04 | **V4.36.18 频率窗下界 20→18kHz**:放行更大电感线圈(18~125kHz @43nF ≈ L 47µH~1.15mH);test 边界 17 偏大/18 正常;参数表同步修正历史滞后(MAX 125 / C_NF 43) | | V2.35 | 2026-09-04 | **V4.36.19 低Q 释放抗抖**:低Q(21~50µH)高灵敏边界试探释放点外移/锁死(释放带回 23≈σ,快值判释放被抖断);τ50ms 平滑(REL_ALFA=46, 打印降采样平均效应工程版)+带回×1.5(REL_BAND_LO_MULT) 仅低Q 生效,高/中Q 零影响 | +| V2.36 | 2026-09-04 | 故障补偿触发幅度量化说明(4.4.2 补分档表):触发 dev>+4×dlt 连续 2s 黄灯常亮 / 7s 学习替换;SENS=3 ≈ Xn+0.15% ≈ 电感+0.31%(L∝Xn²,dL/L≈2×dXn/Xn) | +| V2.37 | 2026-09-04 | **V4.36.20 最低工作电感量 COIL_L_MIN_UH=20µH**(43nF 口径):L<20µH(f>171kHz)→ 按线圈断开快闪指示(模式1,coil_fault==2 归入断开级);原上限 125kHz(38µH) 放宽至 20µH 可工作;L 偏大(f<18kHz)一长一短保留(coil_fault==1);test 边界 171 正常/172 偏小 | diff --git a/tests/test_coil_range.c b/tests/test_coil_range.c index c34dde8..14f86ff 100644 --- a/tests/test_coil_range.c +++ b/tests/test_coil_range.c @@ -14,7 +14,7 @@ #include #define COIL_F_OK_MIN_KHZ 18 -#define COIL_F_OK_MAX_KHZ 125 +#define COIL_F_OK_MAX_KHZ 171 #define COIL_DEF_C_NF 66 static uint8_t g_coil_fault = 0; @@ -67,9 +67,9 @@ static void test_too_large(void) static void test_too_small(void) { g_coil_fault = 0; g_coil_bad_cnt = 0; - run_ticks(150, 100); + run_ticks(200, 100); assert(g_coil_fault == 2); - printf("2. L偏小 (f=150kHz, 1s 防抖置位) OK\n"); + printf("2. L偏小 (f=200kHz, 1s 防抖置位) OK\n"); } static void test_recover(void) @@ -88,9 +88,10 @@ static void test_boundaries(void) run_ticks(17, 100); assert(g_coil_fault == 1); /* 19 → 偏大 */ run_ticks(62, 100); assert(g_coil_fault == 0); /* 20~125 正常 */ run_ticks(18, 100); assert(g_coil_fault == 0); /* 边界 20 正常 */ - run_ticks(125, 100); assert(g_coil_fault == 0); /* 边界 125 正常 */ - run_ticks(126, 100); assert(g_coil_fault == 2); /* 126 → 偏小 */ - printf("4. 边界 19/20/125/126 OK\n"); + run_ticks(125, 100); assert(g_coil_fault == 0); /* 中间 125 正常 (V4.36.20 窗内) */ + run_ticks(171, 100); assert(g_coil_fault == 0); /* 边界 171 (=L 20.15µH) 正常 */ + run_ticks(172, 100); assert(g_coil_fault == 2); /* 172 → L<20µH 偏小(断开级) */ + printf("4. 边界 19/20/171/172 OK\n"); } static void test_jitter_no_alarm(void) @@ -111,6 +112,6 @@ int main(void) test_recover(); test_boundaries(); test_jitter_no_alarm(); - printf("\nALL PASS (窗口 18~125kHz, 防抖 1s)\n"); + printf("\nALL PASS (窗口 18~171kHz=L 20µH, 防抖 1s)\n"); return 0; } diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index f0b2580..24e3a58 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -63,7 +63,8 @@ #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_F_OK_MAX_KHZ 125 // 线圈频率合理窗 (V4.36/9): >125kHz → L偏小 (43nF板口径, ≈38µH) +#define COIL_L_MIN_UH 20 // V4.36.20: 最低工作电感量 µH (43nF 低频档口径): L<此值 → 按线圈断开快闪指示 +#define COIL_F_OK_MAX_KHZ 171 // 线圈频率合理窗 (V4.36.20): >171kHz → L<20µH(COIL_L_MIN_UH) 断开级偏小 (43nF: L=2.533e7/(f²×43); 原125=38µH 放宽至 20µH) #define COIL_CAL_C_NF 43 // 标定等效谐振电容 nF (V4.34): 三极管库存板 低频档(66nF名义, R19在/R27空)实测 C_eff≈43 (41.3~45.5; 0Ω板68仅实验口径, 产品不用) // 旧43 = 5.1K电阻旧板带病特性(三极管开关未饱和导通, 第二颗33nF未全量并入), 作废 #define COIL_CAL_C_NF_33 34 // 高频档(33nF名义)标定值: 实测 C_eff≈34.4 (33.8~35.0, 3组) — 用33nF档时改 COIL_CAL_C_NF 为34 diff --git a/utilities/at32f421_freertos_demo/inc/cmcng.h b/utilities/at32f421_freertos_demo/inc/cmcng.h index 6a10fb4..15b7523 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.19" // ..޶ (2026-09-03 : СĶֻ REV; MAIN/SUB ɲƷ) +#define FIRMWARE_VER "4.36.20" // ..޶ (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 19 +#define FIRMWARE_VER_REV 20 #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 248010c..252c1a9 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -172,7 +172,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: 线圈电感量异常 0=正常 1=L偏大(f<20kHz) 2=L偏小(f>120kHz) +uint8_t g_coil_fault = 0; // V4.26: 线圈电感量异常 0=正常 1=L偏大(f<18kHz→一长一短) 2=L171kHz→断开级快闪, V4.36.20) uint16_t g_coil_bad_cnt = 0; // V4.26: 电感异常防抖计数 (100tick=1s 置位/清除) /*=========================================================================== @@ -395,12 +395,13 @@ void poll_yellow_led(void) g_fault_tick++; - /*--- 模式1: 快闪 — 载波缺失/重连判稳接管 (V4.36.16/17): + /*--- 模式1: 快闪 — 载波缺失/重连判稳接管/L过低断开级 (V4.36.16/17/20): * !loop1_LOOP_OK: 上电无线圈 + 运行中断开 (5ms 实时, 不等 loop_task 150ms 慢拍 * 置 disconnect_active; 上电 phase power_up=0 时不置位, 由本条件兜底) * g_reconn_stab: 运行中无车重连判稳门控 + * g_coil_fault==2: 电感量 < COIL_L_MIN_UH(20µH, f>171kHz) → 按线圈断开状态指示 * 上电有线圈/判稳中: LOOP_OK=1 → 黄灯不闪, 自检指示归绿灯慢闪 ---*/ - if (!loop1_LOOP_OK || g_reconn_stab) { + if (!loop1_LOOP_OK || g_reconn_stab || g_coil_fault == 2) { if (g_fault_tick >= FLT_FAST_HALF) { g_fault_tick = 0; LED_YELLOW_GPIO->odt ^= LED_YELLOW_PIN; // toggle @@ -420,11 +421,11 @@ void poll_yellow_led(void) return; } - /*--- V4.26 模式5: 线圈电感量不合理 → 一长一短 + /*--- V4.26 模式5: 线圈电感量不合理(L 偏大) → 一长一短 * 长亮900ms(180tick) → 灭300ms(60) → 短亮100ms(20) → 灭700ms(140), 循环 - * g_coil_fault: 1=L偏大(f<20kHz) 2=L偏小(f>120kHz) + * g_coil_fault: 1=L偏大(f<18kHz, 一长一短); 2=L<20µH 已在模式1 断开级快闪(V4.36.20) * 优先级: 断开(1) > 环境(4) > 电感量(5) > N短闪(3) > 灭 ---*/ - if (g_coil_fault) { + if (g_coil_fault == 1) { static const uint16_t dur[4] = { 180, 60, 20, 140 }; // 900/300/100/700ms (V4.36.13: 灭 100→300ms) if (g_fault_phase > 3) g_fault_phase = 0; if (g_fault_phase & 1)