feat(V4B): V4.28 — L估算引入标定等效谐振电容 COIL_CAL_C_NF=43

问题: V4.27 频率对齐后 L 仍有系统性 ~1.5 倍偏差(实际/打印 1.46~1.64)
根因: 公式用名义档位电容 66nF, 但 5 组 LCR 实测反推振荡回路等效
      C_eff=41.3~45.5nF (均值 42.97) — 频率真实+LCR真实下偏差收敛到 C 一参
改动: coil_l_uH 改用 COIL_CAL_C_NF 43 (宏可标定); COIL_DEF_C_NF 保留名义口径
验证: 43nF 回代 5 组残差 ±6% 内 (64k→144vs136 +5.7%, 113k→46vs48 -3.9% ...)
标定指引: LCR 测 L → C=2.533e7/(f²×L) 多颗平均改宏
文档: devlog V2.26 / spec V2.7 / design doc v0.5
This commit is contained in:
wangfq
2026-09-03 12:11:02 +08:00
parent 6b7d624ff0
commit c3a5a6f6ff
6 changed files with 60 additions and 9 deletions
+1
View File
@@ -11,6 +11,7 @@
| v0.2 | 2026-09-03 | 合理范围改 **50 ~ 1000 µH(规格书口径,两档任意一档合法即不告警)**,三区窗口重算 | | 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.26672f143 后) | | v0.3 | 2026-09-03 | **用户 4 点拍板收口(取代 v0.2 三区/灰带)**:默认低频档频率窗 **20~120 kHz** 出界即告警;黄灯**一长一短**;优先级 1 断开快闪 > 4 故障补偿常亮 > 5 电感一长一短 > 3 N短亮 > 2 灭;故障补偿 ENV_RESYNC_WAIT **60s→10s**。已实现于 V4.26672f143 后) |
| v0.4 | 2026-09-03 | **测频 4 倍偏差修正(V4.27**calc_freq_khz 60000→240000TMR3 实际 120MHz 计数 + 通道捕获 DIV_2)。本文 §3 中"Xn=3681→f=16.3kHz→L≈1.4mH 超限案例"为**测频 bug 假象**——修正后实为 f≈65.2kHz、L≈90µH 的正常线圈;该"红区案例"作废,需按真实频率重新采集现场数据 | | v0.4 | 2026-09-03 | **测频 4 倍偏差修正(V4.27**calc_freq_khz 60000→240000TMR3 实际 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=43L_uH=2.533e7/(f²×C_eff));COIL_DEF_C_NF 保留为名义口径。残差 ±6% 内,待多线圈/标定电感进一步收口 |
## 1. 背景 ## 1. 背景
+45
View File
@@ -4,6 +4,50 @@
--- ---
## 2026-09-03 — 电感量估算引入 C_eff 标定(固件 V4.28
> **固件版本:V4.28**cmcng.hFIRMWARE_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_NFEVT 文案去掉 (C66/×2C33)
- 版本 V4.28spec 参数表 + 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) ## 2026-09-03 — 频率测量 4 倍偏差修正(固件 V4.27)
> **固件版本:V4.27**cmcng.hFIRMWARE_VER="4.27" + MAIN=4/SUB=27)。devlog 修订 V2.25。 > **固件版本:V4.27**cmcng.hFIRMWARE_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≈435 组反推 41.3~45.5nF);残差 ±6% |
| V2.25 | 2026-09-03 | V4.27 频率测量 4 倍偏差修正(calc 60000→240000120MHz×DIV_2);coil_l_uH 随 f 修正;旧 f/L 日志需 ×4 | | V2.25 | 2026-09-03 | V4.27 频率测量 4 倍偏差修正(calc 60000→240000120MHz×DIV_2);coil_l_uH 随 f 修正;旧 f/L 日志需 ×4 |
| V2.24 | 2026-09-03 | V4.26 线圈电感量告警(频率窗 20~120kHz 一长一短)+ 故障补偿 60s→10s;行尾规范化 CRLF | | 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 才真正学习 | | V2.23 | 2026-09-02 | V4.25 环境异常黄灯预判(锁存):dev>+4dlt 高位连续 5s 触发 g_env_warn 锁存常亮;回摆/目标靠近保持,环境空闲稳定 5s(ENV_RECOVER_WAIT)才解除;60s 才真正学习 |
+3 -2
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书 # 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(防死锁) | | ENV_LEARN_MAX_TICKS | 3000 tick | **~30 s** | 学习预算:窗口不稳超时放弃,保留旧 Origin(防死锁) |
| COIL_F_OK_MIN_KHZ | 20 kHz | — | 线圈频率合理窗下界(V4.26):默认低频档口径,f<20kHz → L偏大告警 | | 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_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。 > **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.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.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→240000TMR3 实际 120MHz 计数 + 通道 DIV_2 边沿分频,原按 60MHz 假设漏乘 2×2);§4.1.2 流程文字更正 | | V2.6 | 2026-09-03 | 更新至 V4.27:频率测量 4 倍偏差修正(calc_freq_khz 60000→240000TMR3 实际 120MHz 计数 + 通道 DIV_2 边沿分频,原按 60MHz 假设漏乘 2×2);§4.1.2 流程文字更正 |
| V2.7 | 2026-09-03 | 更新至 V4.28L 估算引入标定等效谐振电容 COIL_CAL_C_NF=43(名义 66nF 与实测 C_eff≈43 不符;5 组实测 41.3~45.5nF |
@@ -50,7 +50,8 @@
#define ENV_RECOVER_WAIT 500 // 恢复确认 (V4.25): 环境回正常(空闲)连续 ~5s 才解除预判, 黄灯灭 #define ENV_RECOVER_WAIT 500 // 恢复确认 (V4.25): 环境回正常(空闲)连续 ~5s 才解除预判, 黄灯灭
#define COIL_F_OK_MIN_KHZ 20 // 线圈频率合理窗 (V4.26): 默认低频档口径, <20kHz → L偏大 #define COIL_F_OK_MIN_KHZ 20 // 线圈频率合理窗 (V4.26): 默认低频档口径, <20kHz → L偏大
#define COIL_F_OK_MAX_KHZ 120 // 线圈频率合理窗 (V4.26): >120kHz → 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)
/*=========================================================================== /*===========================================================================
* 离开检测模式 * 离开检测模式
+2 -2
View File
@@ -14,10 +14,10 @@
#define __CMCNG_H__ #define __CMCNG_H__
#define PRODUCT_MODEL "DLD154" #define PRODUCT_MODEL "DLD154"
#define FIRMWARE_VER "4.27" #define FIRMWARE_VER "4.28"
#define HARDWARE_VER "3.00" #define HARDWARE_VER "3.00"
#define FIRMWARE_VER_MAIN 4 #define FIRMWARE_VER_MAIN 4
#define FIRMWARE_VER_SUB 27 #define FIRMWARE_VER_SUB 28
#define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0 #define HARDWARE_VER_SUB 0
@@ -806,14 +806,17 @@ static void env_resync_apply(uint32_t new_origin)
env_resync_abort(); 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 为修正后真实频率] * 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) static uint32_t coil_l_uH(uint32_t f_khz)
{ {
if (f_khz == 0) return 0; 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++; g_coil_bad_cnt++;
if (g_coil_bad_cnt >= 100) { if (g_coil_bad_cnt >= 100) {
if (g_coil_fault == 0) 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, f_khz, coil_l_uH(f_khz), loop1_Xn,
want == 1 ? "too_large" : "too_small"); want == 1 ? "too_large" : "too_small");
else else