diff --git a/docs/coil-range-alarm-design.md b/docs/coil-range-alarm-design.md index 28d2bc7..db1d8a0 100644 --- a/docs/coil-range-alarm-design.md +++ b/docs/coil-range-alarm-design.md @@ -11,6 +11,7 @@ | v0.2 | 2026-09-03 | 合理范围改 **50 ~ 1000 µH(规格书口径,两档任意一档合法即不告警)**,三区窗口重算 | | v0.3 | 2026-09-03 | **用户 4 点拍板收口(取代 v0.2 三区/灰带)**:默认低频档频率窗 **20~120 kHz** 出界即告警;黄灯**一长一短**;优先级 1 断开快闪 > 4 故障补偿常亮 > 5 电感一长一短 > 3 N短亮 > 2 灭;故障补偿 ENV_RESYNC_WAIT **60s→10s**。已实现于 V4.26(672f143 后) | | v0.4 | 2026-09-03 | **测频 4 倍偏差修正(V4.27)**:calc_freq_khz 60000→240000(TMR3 实际 120MHz 计数 + 通道捕获 DIV_2)。本文 §3 中"Xn=3681→f=16.3kHz→L≈1.4mH 超限案例"为**测频 bug 假象**——修正后实为 f≈65.2kHz、L≈90µH 的正常线圈;该"红区案例"作废,需按真实频率重新采集现场数据 | +| v0.5 | 2026-09-03 | **L 估算标定(V4.28)**:五组 LCR 实测反推振荡回路等效谐振电容 C_eff=41.3~45.5nF(均值 43),与名义 66nF 明显不符 → 固件改标定值 COIL_CAL_C_NF=43(L_uH=2.533e7/(f²×C_eff));COIL_DEF_C_NF 保留为名义口径。残差 ±6% 内,待多线圈/标定电感进一步收口 | ## 1. 背景 diff --git a/docs/devlog.md b/docs/devlog.md index 254b1cd..a78d109 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -4,6 +4,50 @@ --- +## 2026-09-03 — 电感量估算引入 C_eff 标定(固件 V4.28) + +> **固件版本:V4.28**(cmcng.h:FIRMWARE_VER="4.28" + MAIN=4/SUB=28)。devlog 修订 V2.26。 + +### 问题(现场实测,V4.27 频率已对齐后) + +打印 L 与实际 LCR 实测仍有 ~1.5 倍系统性偏差(实际/打印 1.46~1.64): + +| 打印 f | 打印 L | LCR 实测 L | C_eff 反推 | +|--------|--------|-----------|-----------| +| 64 kHz | 93 µH | 136 µH | 45.5 nF | +| 113 kHz | 30 µH | 48 µH | 41.3 nF | +| 114 kHz | 29 µH | 46 µH | 42.4 nF | +| 107 kHz | 33 µH | 50 µH | 44.3 nF | +| 163 kHz | 14 µH | 23 µH | 41.5 nF | + +### 根因 + +L_uH = 2.533e7/(f_kHz²×C_nF) 里 C 用了**名义档位电容 66nF**,但振荡回路 +**等效谐振电容 C_eff ≈ 43nF**(41.3~45.5,均值 42.97)——与标称明显不符 +(可能振荡拓扑/布局/电容实际值造成)。频率真实 + LCR 真实时,偏差收敛到 C 一个参数。 + +### 改动 + +- TaskLoop.h:新增 `COIL_CAL_C_NF 43`(标定等效谐振电容,出厂默认=5 组实测均值); + `COIL_DEF_C_NF 66` 保留为名义口径(不再参与计算) +- coil_l_uH():公式改用 COIL_CAL_C_NF;EVT 文案去掉 (C66/×2C33) +- 版本 V4.28;spec 参数表 + devlog + design doc v0.5 + +### 验证(用 43nF 回代 5 组) + +64k→144µH(+5.7%) 113k→46µH(-3.9%) 114k→45µH(-1.5%) 107k→51µH(+2.9%) 163k→22µH(-3.6%) +残差 ±6% 内(含 LCR 测量/频率取整噪声),"粗略值"够用;可标定收口。 + +### 标定指引(想更准) + +拿 1~3 颗 **LCR 实测已知**的线圈(建议覆盖 60~160kHz),串口读 f,代入 +`C_eff = 2.533e7/(f_kHz² × L_LCR)` 多颗取均值 → 改 COIL_CAL_C_NF 重新编译即可。 + +### 待现场验证 + +- V4.28 打印 L 应与 LCR 接近(±6% 内);如需更准按指引标定 +- 若用 33nF 档(高频)测试数据多,可再单独标一组高频档 C_eff(当前 5 组混档均值) + ## 2026-09-03 — 频率测量 4 倍偏差修正(固件 V4.27) > **固件版本:V4.27**(cmcng.h:FIRMWARE_VER="4.27" + MAIN=4/SUB=27)。devlog 修订 V2.25。 @@ -1144,6 +1188,7 @@ if (dev >= dlt_ORG × 4) { | 版本 | 时间 | 说明 | |------|------|------| +| V2.26 | 2026-09-03 | V4.28 电感量估算引入标定 COIL_CAL_C_NF=43(名义 66nF vs 实测 C_eff≈43,5 组反推 41.3~45.5nF);残差 ±6% | | V2.25 | 2026-09-03 | V4.27 频率测量 4 倍偏差修正(calc 60000→240000:120MHz×DIV_2);coil_l_uH 随 f 修正;旧 f/L 日志需 ×4 | | V2.24 | 2026-09-03 | V4.26 线圈电感量告警(频率窗 20~120kHz 一长一短)+ 故障补偿 60s→10s;行尾规范化 CRLF | | V2.23 | 2026-09-02 | V4.25 环境异常黄灯预判(锁存):dev>+4dlt 高位连续 5s 触发 g_env_warn 锁存常亮;回摆/目标靠近保持,环境空闲稳定 5s(ENV_RECOVER_WAIT)才解除;60s 才真正学习 | diff --git a/docs/technical-spec.md b/docs/technical-spec.md index b00e190..1a025c7 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -1,6 +1,6 @@ # DLD154V4B 技术规格书 -> 单路线圈车辆检测器 | 固件版本: V4.27 | 文档版本: V2.6 +> 单路线圈车辆检测器 | 固件版本: V4.28 | 文档版本: V2.7 > 本文档面向工程开发、系统集成及故障深度分析 --- @@ -457,7 +457,7 @@ if (dev < dlt_ORG * 4) { | ENV_LEARN_MAX_TICKS | 3000 tick | **~30 s** | 学习预算:窗口不稳超时放弃,保留旧 Origin(防死锁) | | COIL_F_OK_MIN_KHZ | 20 kHz | — | 线圈频率合理窗下界(V4.26):默认低频档口径,f<20kHz → L偏大告警 | | COIL_F_OK_MAX_KHZ | 120 kHz | — | 线圈频率合理窗上界(V4.26):f>120kHz → L偏小告警 | -| COIL_DEF_C_NF | 66 nF | — | 默认档电容(拨码不可读,粗估 L 打印用;33nF 档结果 ×2) | +| COIL_CAL_C_NF | 43 nF | — | **标定等效谐振电容**(V4.28):名义 66nF,但 2026-09-03 五组 LCR 实测反推 C_eff=41.3~45.5nF(均值 43)→ L 估算用此值;标定法:LCR 实测 L → C=2.533e7/(f²×L),多颗平均 | > **M4 优化**:V2.0 将 tick 从 50ms (TMR15 5ms×10) 提升到 10ms (vTaskDelay 10ms)。IIR 系数同步调整(α 从 79/256→18/256),保持等效时间常数。进入确认 3×10ms + 500ms IN_DELAY = ~530ms,比旧设计 (50ms + 500ms = 550ms) 略快。基线更新从 5s 加速到 1s。 @@ -772,3 +772,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的 | V2.4 | 2026-09-02 | 更新至 V4.25:环境异常黄灯预判锁存(ENV_WARN_WAIT=5s 触发;回摆保持,ENV_RECOVER_WAIT 空闲 5s 才解除);预判≠学习 | | V2.5 | 2026-09-03 | 更新至 V4.26:线圈电感量告警(频率窗 20~120kHz 单窗,黄灯一长一短);故障补偿 ENV_RESYNC_WAIT 60s→10s;黄灯优先级 1>4>5>3>2 | | V2.6 | 2026-09-03 | 更新至 V4.27:频率测量 4 倍偏差修正(calc_freq_khz 60000→240000:TMR3 实际 120MHz 计数 + 通道 DIV_2 边沿分频,原按 60MHz 假设漏乘 2×2);§4.1.2 流程文字更正 | +| V2.7 | 2026-09-03 | 更新至 V4.28:L 估算引入标定等效谐振电容 COIL_CAL_C_NF=43(名义 66nF 与实测 C_eff≈43 不符;5 组实测 41.3~45.5nF) | diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index 01bddce..ab320c5 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -50,7 +50,8 @@ #define ENV_RECOVER_WAIT 500 // 恢复确认 (V4.25): 环境回正常(空闲)连续 ~5s 才解除预判, 黄灯灭 #define COIL_F_OK_MIN_KHZ 20 // 线圈频率合理窗 (V4.26): 默认低频档口径, <20kHz → L偏大 #define COIL_F_OK_MAX_KHZ 120 // 线圈频率合理窗 (V4.26): >120kHz → L偏小 -#define COIL_DEF_C_NF 66 // 默认档电容 (V4.26): 拨码不可读, 粗估 L 打印用; 33nF 档 ×2 +#define COIL_CAL_C_NF 43 // 标定等效谐振电容 nF (V4.28): 名义 66nF, 实测 C_eff≈43 +#define COIL_DEF_C_NF 66 // 名义默认档电容 (保留: 注释/文档口径; 计算用 COIL_CAL_C_NF) /*=========================================================================== * 离开检测模式 diff --git a/utilities/at32f421_freertos_demo/inc/cmcng.h b/utilities/at32f421_freertos_demo/inc/cmcng.h index 636ee56..f46b508 100644 --- a/utilities/at32f421_freertos_demo/inc/cmcng.h +++ b/utilities/at32f421_freertos_demo/inc/cmcng.h @@ -14,10 +14,10 @@ #define __CMCNG_H__ #define PRODUCT_MODEL "DLD154" -#define FIRMWARE_VER "4.27" +#define FIRMWARE_VER "4.28" #define HARDWARE_VER "3.00" #define FIRMWARE_VER_MAIN 4 -#define FIRMWARE_VER_SUB 27 +#define FIRMWARE_VER_SUB 28 #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 e7aea59..ddf64ea 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -806,14 +806,17 @@ static void env_resync_apply(uint32_t new_origin) env_resync_abort(); } /*=========================================================================== - * V4.26/27: 线圈电感量粗估 (默认低频档 C=66nF; 拨码 33nF 档结果 ×2) + * V4.26~28: 线圈电感量粗估 * L_uH = 2.533e7 / (f_kHz² × C_nF) [f=1/(2π√(LC)), f_kHz 为修正后真实频率] - * 例: f=30.2kHz → L≈420µH; f=65.2kHz → L≈90µH; f=120kHz → L≈27µH + * C 用 COIL_CAL_C_NF (标定等效谐振电容, V4.28): + * 名义 66nF 档, 但 2026-09-03 五组 LCR 实测反推 C_eff=41.3~45.5nF (均值43) + * → 振荡回路等效 C 并非名义值, 必须标定 (LCR 测 L → C=2.533e7/(f²×L), 多颗平均) + * 例: f=64kHz→L≈144µH(实136); f=113kHz→L≈46µH(实48); f=163kHz→L≈22µH(实23) *===========================================================================*/ static uint32_t coil_l_uH(uint32_t f_khz) { if (f_khz == 0) return 0; - return 25330000UL / (f_khz * f_khz * COIL_DEF_C_NF); + return 25330000UL / (f_khz * f_khz * COIL_CAL_C_NF); } /*=========================================================================== @@ -843,7 +846,7 @@ static void coil_monitor(void) g_coil_bad_cnt++; if (g_coil_bad_cnt >= 100) { if (g_coil_fault == 0) - PRINT("EVT|coil_fault f:%d kHz L~%lu uH(C66/×2C33) Xn:%d %s\n", + PRINT("EVT|coil_fault f:%d kHz L~%lu uH Xn:%d %s\n", f_khz, coil_l_uH(f_khz), loop1_Xn, want == 1 ? "too_large" : "too_small"); else