feat(V4B): V4.36.25 — 电感量三分语义: 合理窗 18~125k + 出窗一长一短 + 低于下限快闪
用户设计拍板: 纠正 V4.36.22/23 把合理窗上限随下限推到 153/156 的偏差 - COIL_F_OK_MAX_KHZ 156→125 (恢复合理窗 18~125kHz=V4.36.9 口径, >125k=38µH 偏小) - 新增 COIL_L_MIN_F_KHZ=156 (=COIL_L_MIN_UH 24µH, 43nF f@24µH=156.7k) - coil_monitor want 三分: f<18k→1; f>156k→2(快闪断开级); 125k<f≤156k→1(一长一短) 打印 too_large/too_small/below_l_min - coil_monitor_recover 判据 18~156 (解除强制; 125~156 转原路径一长一短) - test: 126→1 / 156→1 / 157→2; 全绿 语法0 error; spec V2.42 / manual / devlog V2.61
This commit is contained in:
@@ -63,11 +63,12 @@
|
||||
#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: 最低工作电感量 µH (43nF 低频档口径): L<此值 → 按线圈断开快闪指示 (25→24µH)
|
||||
#define COIL_L_MIN_UH 24 // V4.36.23/25: 最低工作电感量 µH (43nF 口径, 对应 COIL_L_MIN_F_KHZ=156): L<此值 → 黄灯快闪(断开级), 可 COIL_UNDER_MIN_AS_OPEN 切完全断开
|
||||
#define COIL_UNDER_MIN_AS_OPEN 0 // V4.36.24: L<下限 是否视为线圈断开完全状态: 1=黄灯快闪+继电器保持释放+绿灯不亮(同真正断开, 判定停);
|
||||
// 0=仅黄灯快闪(断开级指示), 绿灯/继电器/判定照常工作
|
||||
#define COIL_FAULT_HOLD_TICKS 500 // V4.36.21: 电感量越界/恢复防抖 500tick=5s (原100=1s; 下限判定重要, 加长防误检瞬态冲高)
|
||||
#define COIL_F_OK_MAX_KHZ 156 // 线圈频率合理窗 (V4.36.23): >156kHz → L<24µH(COIL_L_MIN_UH) 断开级偏小 (43nF: L=2.533e7/(f²×43); 153=25µH→156=24µH)
|
||||
#define COIL_F_OK_MAX_KHZ 125 // 线圈频率合理窗上限 (V4.36.25 恢复): >125kHz(43nF≈38µH) → L偏小不合理 → 黄灯一长一短 (V4.36.9 口径不变)
|
||||
#define COIL_L_MIN_F_KHZ 156 // V4.36.25: 低于下限频率 (43nF: L=2.533e7/(f²×43), f@24µH=156.7k): f>此值 → L<COIL_L_MIN_UH → 黄灯快闪(断开级)
|
||||
#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
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.24" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.25" // 主.子.修订 (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 24
|
||||
#define FIRMWARE_VER_REV 25
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -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<18kHz→一长一短) 2=L<COIL_L_MIN_UH(f>156kHz→断开级快闪, V4.36.23)
|
||||
uint8_t g_coil_fault = 0; // V4.26/25: 电感量异常 0=正常 1=出合理窗18~125kHz→一长一短(f<18k L偏大 / 125k<f≤156k L偏小) 2=L<24µH(f>156kHz, COIL_L_MIN_F_KHZ)→断开级快闪
|
||||
uint16_t g_coil_bad_cnt = 0; // V4.26: 电感异常防抖计数 (V4.36.21: 500tick=5s 置位/清除, 宏 COIL_FAULT_HOLD_TICKS)
|
||||
|
||||
/*===========================================================================
|
||||
@@ -421,9 +421,10 @@ void poll_yellow_led(void)
|
||||
return;
|
||||
}
|
||||
|
||||
/*--- V4.26 模式5: 线圈电感量不合理(L 偏大) → 一长一短
|
||||
/*--- V4.26/25 模式5: 线圈电感量出合理窗(18~125kHz) → 一长一短
|
||||
* 长亮900ms(180tick) → 灭300ms(60) → 短亮100ms(20) → 灭700ms(140), 循环
|
||||
* g_coil_fault: 1=L偏大(f<18kHz, 一长一短); 2=L<24µH 已在模式1 断开级快闪(V4.36.20/23)
|
||||
* g_coil_fault: 1=f<18k L偏大 或 125k<f≤156k L偏小(均一长一短);
|
||||
* 2=L<24µH(f>156k) 已在模式1 断开级快闪(V4.36.20/25)
|
||||
* 优先级: 断开(1) > 环境(4) > 电感量(5) > N短闪(3) > 灭 ---*/
|
||||
if (g_coil_fault == 1) {
|
||||
static const uint16_t dur[4] = { 180, 60, 20, 140 }; // 900/300/100/700ms (V4.36.13: 灭 100→300ms)
|
||||
@@ -948,10 +949,16 @@ static void coil_monitor(void)
|
||||
if (loop1_Origin == 0 || f_khz == 0)
|
||||
return; /* 无有效基准 → 维持原状 */
|
||||
|
||||
/* V4.36.25 三分语义 (43nF):
|
||||
* f<18k → want=1 L偏大(>合理窗) → 一长一短
|
||||
* f>156k → want=2 L<24µH 下限以下 → 快闪(断开级)
|
||||
* 125k<f≤156k → want=1 L偏小(出合理窗但不低于下限) → 一长一短 */
|
||||
if (f_khz < COIL_F_OK_MIN_KHZ)
|
||||
want = 1; /* L 偏大 (>合理上限) */
|
||||
want = 1; /* L 偏大 */
|
||||
else if (f_khz > COIL_L_MIN_F_KHZ)
|
||||
want = 2; /* L<下限 → 断开级快闪 */
|
||||
else if (f_khz > COIL_F_OK_MAX_KHZ)
|
||||
want = 2; /* L 偏小 (<合理下限) */
|
||||
want = 1; /* L 偏小(出合理窗, 不低于下限) → 一长一短 */
|
||||
|
||||
if (want == g_coil_fault) {
|
||||
g_coil_bad_cnt = 0; /* 状态一致 → 计时复位 */
|
||||
@@ -961,7 +968,8 @@ static void coil_monitor(void)
|
||||
if (g_coil_fault == 0)
|
||||
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");
|
||||
(want == 2) ? "below_l_min" :
|
||||
(f_khz < COIL_F_OK_MIN_KHZ) ? "too_large" : "too_small");
|
||||
else
|
||||
PRINT("EVT|coil_ok f:%d kHz\n", f_khz);
|
||||
g_coil_fault = want;
|
||||
@@ -982,8 +990,8 @@ static void coil_monitor_recover(void)
|
||||
return; /* 非强制断开期 → 原 coil_monitor 负责 */
|
||||
|
||||
f_khz = calc_freq_khz(loop1_Origin, loop1_LPCNT);
|
||||
if (f_khz == 0 || f_khz < COIL_F_OK_MIN_KHZ || f_khz > COIL_F_OK_MAX_KHZ) {
|
||||
g_coil_bad_cnt = 0; /* 仍越界/载波无效 → 继续等 */
|
||||
if (f_khz == 0 || f_khz < COIL_F_OK_MIN_KHZ || f_khz > COIL_L_MIN_F_KHZ) {
|
||||
g_coil_bad_cnt = 0; /* 仍低于下限/载波无效 → 继续等 */
|
||||
return;
|
||||
}
|
||||
g_coil_bad_cnt++;
|
||||
|
||||
Reference in New Issue
Block a user