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
@@ -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)
/*===========================================================================
* 离开检测模式
+2 -2
View File
@@ -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
@@ -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