feat(V4B): V4.36.5 — 重连起振抑制按 Q 分档
现象: 30/46/47/50µH 无车拔插重连继电器跳一下 (136/210µH 无) 根因: 低L→高f→低Q→起振慢幅度弱→前几窗 Xn 偏差→假有车 (100ms 确认窗只保载波存在, 不保幅度稳定) 改动: 首样本直锁时按空场频率 f 分档设抑制窗 f>100k 低Q 400ms / 80~100k 中Q 200ms / ≤80k 高Q 0ms 抑制期仅挂起进入确认累计(entry_cnt), 真车不丢, 其余逻辑照常 语法0 error, 4测试全绿; spec V2.21 / devlog V2.39
This commit is contained in:
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.4" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.5" // 主.子.修订 (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 4
|
||||
#define FIRMWARE_VER_REV 5
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -62,6 +62,16 @@ uint32_t loop1_freeze_ref;
|
||||
* 超时仍断开才释放(防瞬时断开误释放/防砸);
|
||||
* 保持期内重连且有车 → 输出无缝续持 */
|
||||
|
||||
/* V4.36.5: 重连起振抑制窗 — 按线圈 Q 分档 (Q∝1/f, 用空场频率代理)
|
||||
* 低Q(高频小L): 起振慢/幅度弱 → 前几窗测量偏差大 → 假"有车"跳输出
|
||||
* 高Q(低频大L): 起振快样本干净 → 无需抑制 (136/210µH 实测无问题)
|
||||
* 分界(实测): 46~50µH→109~113k 必跳 → >100k 归低Q; 80~100k 中Q; <=80k 高Q */
|
||||
#define RECONNECT_Q_HI_F_KHZ 80 /* f <= 80kHz (L≳92µH@43nF) → 高Q */
|
||||
#define RECONNECT_Q_MID_F_KHZ 100 /* 80< f <=100kHz → 中Q */
|
||||
#define RECONNECT_BLANK_Q_HI_MS 0 /* 高Q: 起振快, 不抑制 */
|
||||
#define RECONNECT_BLANK_Q_MID_MS 200 /* 中Q: 短抑制 */
|
||||
#define RECONNECT_BLANK_Q_LO_MS 400 /* 低Q(f>100k, L<~59µH): 长抑制 */
|
||||
|
||||
/*===========================================================================
|
||||
* 全局状态变量 — 标志位
|
||||
*===========================================================================*/
|
||||
@@ -149,6 +159,7 @@ uint8_t g_reconn_candidate = 0; // V4.36.2: 重连确认窗候选(载波
|
||||
uint16_t g_reconn_cnt = 0; // V4.36.2: 载波连续恢复计数 (确认窗 ~100ms)
|
||||
uint16_t g_relay_hold_cnt = 0; // V4.36.3: 有车断开继电器保持计时(ms, ISR 5ms 累加)
|
||||
uint8_t g_relay_hold_done = 0; // V4.36.3: 本次有车断开已兜底释放(防重复OFF)
|
||||
uint16_t g_reconn_blank_ms = 0; // V4.36.5: 重连起振抑制倒计时(ms, 按Q分档, vd1_task 每样本-10)
|
||||
uint8_t g_fault_phase = 0;
|
||||
uint16_t g_fault_tick = 0;
|
||||
uint8_t g_coil_fault = 0; // V4.26: 线圈电感量异常 0=正常 1=L偏大(f<20kHz) 2=L偏小(f>120kHz)
|
||||
@@ -922,6 +933,22 @@ void vd1_task(void)
|
||||
*================================================================*/
|
||||
if (loop1_CAPVD == 0) {
|
||||
loop1_CAPVD = loop1_Value;
|
||||
|
||||
/* V4.36.5: 首样本直锁(重连重置后) → 按线圈 Q(空场频率)分档设定抑制窗
|
||||
* Origin 为断开前空场基线(同线圈同环境) → f 即 Q 档;
|
||||
* 上电(Origin=0)时 f=0 → 归高Q档 0ms, 不影响正常判稳流程 */
|
||||
g_reconn_blank_ms = 0;
|
||||
{
|
||||
uint32_t _f = calc_freq_khz(loop1_Origin, loop1_LPCNT);
|
||||
if (_f > RECONNECT_Q_MID_F_KHZ)
|
||||
g_reconn_blank_ms = RECONNECT_BLANK_Q_LO_MS; /* 低Q(高频) 长抑制 */
|
||||
else if (_f > RECONNECT_Q_HI_F_KHZ)
|
||||
g_reconn_blank_ms = RECONNECT_BLANK_Q_MID_MS; /* 中Q 短抑制 */
|
||||
/* 高Q(低频) → 0ms 不抑制 */
|
||||
if (g_reconn_blank_ms)
|
||||
PRINT("EVT|reconn_blank %dms f:%d kHz\n",
|
||||
g_reconn_blank_ms, _f);
|
||||
}
|
||||
} else {
|
||||
int32_t raw_delta = (int32_t)loop1_Value - (int32_t)loop1_CAPVD;
|
||||
int32_t max_step = (int32_t)(loop1_CAPVD * MAX_SLOPE_RATE / 100);
|
||||
@@ -941,6 +968,12 @@ void vd1_task(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* V4.36.5: 重连起振抑制倒计时 (每样本 ~10ms) */
|
||||
if (g_reconn_blank_ms) {
|
||||
if (g_reconn_blank_ms > 10) g_reconn_blank_ms -= 10;
|
||||
else g_reconn_blank_ms = 0;
|
||||
}
|
||||
|
||||
/*--- 2. 稳定期:绕过 IIR 和斜率限幅,小窗口快速收敛;
|
||||
* 基准值稳定(连续窗口 Origin 漂移达标)后才结束自检 ---*/
|
||||
if (!g_loop_stable) {
|
||||
@@ -1125,7 +1158,7 @@ void vd1_task(void)
|
||||
coil_monitor();
|
||||
|
||||
/*--- 进入确认 — 连续 ENTRY_CONFIRM 次低于阈值才判有车 ---*/
|
||||
if (loop1_CAPVD < (loop1_Origin - loop1_dlt_ORG)) {
|
||||
if (loop1_CAPVD < (loop1_Origin - loop1_dlt_ORG) && g_reconn_blank_ms == 0) {
|
||||
if (loop1_entry_cnt == 0) {
|
||||
/* 过渡事件: 第一次命中进入线 (定位"为什么开始进入") */
|
||||
PRINT("EVT|enter_try Value:%d CAPVD:%d Origin:%d dlt:%d f:%dkHz LPCNT:%d Xn:%d\n",
|
||||
@@ -1313,6 +1346,7 @@ void loop_task_function(void *pvParameters)
|
||||
g_env_wait_cnt = 0; // V4.24: 断开重连后环境学习状态复位
|
||||
g_relay_hold_cnt = 0; // V4.36.3: 保持计时复位
|
||||
g_relay_hold_done = 0;
|
||||
g_reconn_blank_ms = 0; // V4.36.5: 抑制倒计时(首样本直锁时按 Q 定档)
|
||||
env_resync_abort();
|
||||
PRINT("EVT|loop_reconnect confirmed %dms\n",
|
||||
RECONNECT_CONFIRM_TICKS * 10);
|
||||
|
||||
Reference in New Issue
Block a user