feat(V4B): V4.36.24 — L<下限双模式宏 COIL_UNDER_MIN_AS_OPEN
用户需求: L<24µH 后 0=仅黄灯快闪(现状, 判定/继电器/绿灯照常); 1=视为线圈断开完全状态: 黄灯快闪+继电器保持释放+绿灯不亮 - ISR RF 分支置 LOOP_OK=1 后强制压 0 → 主循环断开路径(vd1_task 停/黄灯快闪/disconnect) - RLY 刷新(RF段)与保持(hold段)短路 → 继电器保持释放, 绿灯镜像灭; 短路放条件而非事后压 OFF(防 5ms ON/OFF 继电器抖动打火) - coil_monitor 随 vd1_task 停摆 → 新增 coil_monitor_recover() 无条件每 10ms 恢复监测 (f 回窗 18~156kHz 连续 5s 清 fault → LOOP_OK 恢复 → 重连确认+判稳门控) - 默认 0 (与 V4.36.23 一致无回归); 切 1 现场验证完全断开语义 语法0 error, 4测试全绿; spec V2.41 / manual 故障表 / devlog V2.60
This commit is contained in:
@@ -64,6 +64,8 @@
|
||||
#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_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_CAL_C_NF 43 // 标定等效谐振电容 nF (V4.34): 三极管库存板 低频档(66nF名义, R19在/R27空)实测 C_eff≈43 (41.3~45.5; 0Ω板68仅实验口径, 产品不用)
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.23" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.24" // 主.子.修订 (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 23
|
||||
#define FIRMWARE_VER_REV 24
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -799,7 +799,12 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
loop1_LOOP_OK = 1;
|
||||
loop1_RF_FLAG = 0;
|
||||
|
||||
if (loop1_LC_Reset == 0) {
|
||||
/* V4.36.24: L<下限视为断开完全态(宏=1) — 载波强制为断:
|
||||
* 主循环走断开路径(vd1_task 停/黄灯快闪), RLY 刷新短路保持释放, 绿灯镜像灭 */
|
||||
if (COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2)
|
||||
loop1_LOOP_OK = 0;
|
||||
|
||||
if (loop1_LC_Reset == 0 && !(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2)) {
|
||||
/* 继电器 2(辅助/方向) */
|
||||
if (loop1_VD_FLAG)
|
||||
RLY2_ON;
|
||||
@@ -832,7 +837,8 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
* - 500ms 内重连 + 判无车 → vd1_task 正常离开释放
|
||||
* - 超时仍断开 → 强制释放(防真故障无限保持)
|
||||
* 无车断开(VD_FLAG=0)不受影响, 仍立即释放 */
|
||||
if (!loop1_LOOP_OK && loop1_VD_FLAG && g_loop_power_up_state && !g_relay_hold_done) {
|
||||
if (!loop1_LOOP_OK && loop1_VD_FLAG && g_loop_power_up_state && !g_relay_hold_done
|
||||
&& !(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2)) { /* V4.36.24: 强制期不保持(保持释放) */
|
||||
RLY1_ON; /* 保持: 防止瞬时断开继电器抖落 */
|
||||
RLY2_ON;
|
||||
g_relay_hold_cnt += 5;
|
||||
@@ -964,6 +970,30 @@ static void coil_monitor(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* V4.36.24: 强制断开期(L<下限视为断开, 宏=1)的恢复监测 — 无条件每 10ms 主循环调用
|
||||
* coil_fault==2 时 ISR 压 LOOP_OK=0 → vd1_task 停摆, 原 coil_monitor(稳定无车空闲点)
|
||||
* 不再执行 → 换好线圈后频率恢复无法清除故障 → 死锁.
|
||||
* 此点只做恢复方向(f 回窗连续 5s 清 fault), 载波无效(LPCNT/Origin=0)不算恢复 */
|
||||
static void coil_monitor_recover(void)
|
||||
{
|
||||
uint32_t f_khz;
|
||||
|
||||
if (!(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2))
|
||||
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; /* 仍越界/载波无效 → 继续等 */
|
||||
return;
|
||||
}
|
||||
g_coil_bad_cnt++;
|
||||
if (g_coil_bad_cnt >= COIL_FAULT_HOLD_TICKS) {
|
||||
PRINT("EVT|coil_ok f:%d kHz (recover from L<min as-open)\n", f_khz);
|
||||
g_coil_fault = 0;
|
||||
g_coil_bad_cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
* vd1_task — 核心检测算法(对齐 M1H VD1_TASK)
|
||||
*
|
||||
@@ -1481,6 +1511,9 @@ void loop_task_function(void *pvParameters)
|
||||
INIT_VD();
|
||||
|
||||
while (1) {
|
||||
/* V4.36.24: 强制断开期(L<下限)恢复监测 — 无条件, 必须在 LOOP_OK 分支前 */
|
||||
coil_monitor_recover();
|
||||
|
||||
/*--- V4.36.14: 主循环拍级 RF 上升沿检测 (不依赖 ISR LOOP_OK0) ---
|
||||
* 原 !LOOP_OK0 依赖 ISR 5ms 拍与主循环 150ms 慢 tick 的竞态:
|
||||
* 插头抖动(断开↔恢复几拍)可使 LOOP_OK0 卡 1 → 恢复时漏触发确认窗
|
||||
|
||||
Reference in New Issue
Block a user