feat(V4B): V4.36.19 — 低Q 释放抗抖 (平滑判释放+带回加宽)
问题: 43nF/高灵敏/低Q(≤50µH) 金属板边界试探 → 触发稳定但释放点外移 发散至锁死(绿灯长亮); 开 DEBUG 打印复现不了(阻塞降采样平均抖动) = 关键旁证 根因: 释放带回 dlt_rel=23 ≈ 低Q σ(±15~25), 快值判释放(5样本)被抖断 修复(Q 分档, 高/中Q 零影响): - rel_release_hit(): 低Q 用 g_rel_smooth(τ50ms REL_ALFA=46) 判释放 - 低Q 释放带回 ×1.5 (REL_BAND_LO_MULT=150: 23→~35) - g_rel_smooth: IIR 后跟随/CAPVD=0 与重连归零/Car_In snap 语法0 error, 4测试全绿; spec V2.35 / devlog V2.54
This commit is contained in:
@@ -36,6 +36,8 @@
|
||||
*===========================================================================*/
|
||||
#define ALFA_CAP1 79 // IIR α = 79/256 ≈ 0.31 (@10ms → τ≈32ms)
|
||||
#define RELEASE_ALFA 21 // 释放慢滤波 α = 21/256 ≈ 0.082 (@10ms → 精确τ≈117ms, V4.04: 对齐 PD132T α79@43.7ms 精确τ≈118ms; 原18→精确τ137ms偏慢)
|
||||
#define REL_ALFA 46 // V4.36.19: 低Q 释放平滑 α=46/256≈0.18 (@10ms → τ≈50ms): 复刻打印降采样平均效应, 只用于低Q 释放判定抗抖
|
||||
#define REL_BAND_LO_MULT 150 // V4.36.19: 低Q 释放带回加宽 % (dlt_rel×1.5: 23→35@SENS3): 释放提前+σ余量, 防边界试探锁死
|
||||
#define USE_SLOW_RELEASE 0 // 方案A总开关: 1=释放走慢滤波(对齐PD132T) 0=原快滤波释放
|
||||
#define USE_PLANB_TABLE 1 // 方案B (V4.06): 快滤波释放 + 灵敏度表现场调校
|
||||
// 1=进入加深/释放调浅双表(见 TaskLoop.c, SENS=3: 25/12 现场实测接近PD132T)
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.18" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.19" // 主.子.修订 (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 18
|
||||
#define FIRMWARE_VER_REV 19
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -42,6 +42,8 @@ uint32_t loop1_CapSum;
|
||||
uint32_t loop1_Value;
|
||||
uint32_t loop1_CAPVD;
|
||||
uint32_t loop1_CAPVD_slow = 0; // 释放判定慢滤波值 (方案A)
|
||||
uint32_t g_rel_smooth = 0; // V4.36.19: 低Q 释放平滑值 (τ≈50ms, 复刻打印降采样平均效应)
|
||||
uint8_t g_q_lo = 0; // V4.36.19: 低Q 档标志 (空场 f>100kHz, update_q_confirm_need 同步)
|
||||
uint32_t loop1_Origin;
|
||||
uint32_t loop1_ORG_SUM;
|
||||
uint16_t loop1_ORG_CNT;
|
||||
@@ -253,6 +255,42 @@ uint32_t get_flt_value_slow(uint32_t new_value, uint32_t last_value)
|
||||
return value_Flt;
|
||||
}
|
||||
|
||||
/* V4.36.19: 低Q 释放平滑 (α=REL_ALFA/256≈0.18, τ≈50ms @10ms)
|
||||
* 复刻 DEBUG 打印阻塞降采样的平均效应 — 低Q(高频)释放边界抖动大, 快值直接判
|
||||
* 会被抖动打断计数(回滞仅 23 counts ≈ σ), 平滑后判定稳定 */
|
||||
uint32_t get_flt_value_rel(uint32_t new_value, uint32_t last_value)
|
||||
{
|
||||
uint32_t value_Flt;
|
||||
uint32_t delta = (new_value > last_value)
|
||||
? (new_value - last_value)
|
||||
: (last_value - new_value);
|
||||
uint32_t scaled_delta = (delta * (uint32_t)REL_ALFA) >> 8;
|
||||
|
||||
if (new_value > last_value) {
|
||||
value_Flt = last_value + scaled_delta;
|
||||
} else {
|
||||
value_Flt = last_value - scaled_delta;
|
||||
}
|
||||
|
||||
return value_Flt;
|
||||
}
|
||||
|
||||
/* V4.36.19: 释放命中判定 — 低Q(21~50µH)高灵敏释放带回仅 ~23 counts ≈ 抖动 σ,
|
||||
* 快值直接判在边界试探时计数被抖断 → 释放点外移/卡死;
|
||||
* 低Q 用 τ50ms 平滑值(复刻打印阻塞降采样平均效应) + 带回 ×1.5(留 σ 余量).
|
||||
* 高Q/中Q 走原快值逻辑, 零影响 */
|
||||
static uint8_t rel_release_hit(void)
|
||||
{
|
||||
uint32_t _cmp = loop1_CAPVD;
|
||||
uint32_t _line = loop1_Origin - loop1_dlt_ORG;
|
||||
|
||||
if (g_q_lo) {
|
||||
_cmp = g_rel_smooth;
|
||||
_line = loop1_Origin - ((loop1_dlt_ORG * REL_BAND_LO_MULT) / 100);
|
||||
}
|
||||
return (_line < _cmp) ? 1 : 0;
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
* 滑动平均基线更新
|
||||
* 累加 new_value,当计数达到 window 时计算平均值并重置
|
||||
@@ -480,6 +518,8 @@ void INIT_VD(void)
|
||||
g_stab_step_tick = 0;
|
||||
g_stab_ok_cnt = 0;
|
||||
g_stab_base = 0;
|
||||
g_rel_smooth = 0; /* V4.36.19: 低Q 释放平滑清零 */
|
||||
g_q_lo = 0; /* V4.36.19: 低Q 档标志清零 */
|
||||
loop1_CAP_OK = 0;
|
||||
loop1_CAPVD = 0;
|
||||
loop1_CAPVD_slow = 0; // 方案A: 释放慢滤波复位
|
||||
@@ -955,6 +995,7 @@ void vd1_task(void)
|
||||
*================================================================*/
|
||||
if (loop1_CAPVD == 0) {
|
||||
loop1_CAPVD = loop1_Value;
|
||||
g_rel_smooth = 0; /* V4.36.19: 直锁时释放平滑同步归零 */
|
||||
|
||||
/* V4.36.5: 首样本直锁(重连重置后) → 按线圈 Q(空场频率)分档设定抑制窗
|
||||
* Origin 为断开前空场基线(同线圈同环境) → f 即 Q 档;
|
||||
@@ -991,6 +1032,14 @@ void vd1_task(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* V4.36.19: 低Q 释放平滑 (τ≈50ms; 无条件跟随, 只用于低Q 释放判定) */
|
||||
if (loop1_CAPVD != 0) {
|
||||
if (g_rel_smooth == 0)
|
||||
g_rel_smooth = loop1_CAPVD;
|
||||
else
|
||||
g_rel_smooth = get_flt_value_rel(loop1_CAPVD, g_rel_smooth);
|
||||
}
|
||||
|
||||
/* V4.36.5: 重连起振抑制倒计时 (每样本 ~10ms) */
|
||||
if (g_reconn_blank_ms) {
|
||||
if (g_reconn_blank_ms > 10) g_reconn_blank_ms -= 10;
|
||||
@@ -1265,6 +1314,7 @@ void vd1_task(void)
|
||||
* 消除"定在HR0/2保持即释放"窗口(2026-09-01 仿真+现场复核) */
|
||||
loop1_CAPVD_slow = loop1_CAPVD;
|
||||
#endif
|
||||
g_rel_smooth = loop1_CAPVD; /* V4.36.19: 低Q 释放平滑 snap 到进入点 */
|
||||
|
||||
if (!SET_SAFE) {
|
||||
loop1_LC_HOLD = 1;
|
||||
@@ -1362,7 +1412,7 @@ void vd1_task(void)
|
||||
#if USE_SLOW_RELEASE
|
||||
if ((loop1_Origin - loop1_dlt_ORG) < loop1_CAPVD_slow) { // 方案A: 用慢滤波值对齐 PD132T 释放手感
|
||||
#else
|
||||
if ((loop1_Origin - loop1_dlt_ORG) < loop1_CAPVD) { // 方案B/原逻辑: 快滤波直接判释放
|
||||
if (rel_release_hit()) { // V4.36.19: 低Q 平滑值+带回加宽; 高/中Q 退回原快值逻辑
|
||||
#endif
|
||||
if (loop1_cnt_release == 0) {
|
||||
/* 过渡事件: 第一次命中离开线 (定位"为什么开始释放") */
|
||||
@@ -1408,12 +1458,15 @@ static void update_q_confirm_need(void)
|
||||
if (_f > RECONNECT_Q_MID_F_KHZ) { /* 低Q f>100k */
|
||||
g_entry_need = ENTRY_CONFIRM_LO;
|
||||
g_release_need = REL_CONFIRM_LO;
|
||||
g_q_lo = 1; /* V4.36.19: 低Q 释放抗抖档 */
|
||||
} else if (_f > RECONNECT_Q_HI_F_KHZ) { /* 中Q 80~100k */
|
||||
g_entry_need = ENTRY_CONFIRM_MID;
|
||||
g_release_need = REL_CONFIRM_MID;
|
||||
g_q_lo = 0;
|
||||
} else { /* 高Q f<=80k (含 Origin=0 f=0) */
|
||||
g_entry_need = ENTRY_CONFIRM_HI;
|
||||
g_release_need = REL_CONFIRM_HI;
|
||||
g_q_lo = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1453,6 +1506,7 @@ void loop_task_function(void *pvParameters)
|
||||
g_disconnect_active = 0; // 确认重连: 清除断开标记
|
||||
loop1_CAPVD = 0; // 强制 IIR 从首个有效值重新收敛
|
||||
loop1_CAPVD_slow = 0; // 方案A: 释放慢滤波同步收敛
|
||||
g_rel_smooth = 0; // V4.36.19: 释放平滑同步收敛
|
||||
g_env_wait_cnt = 0; // V4.24: 断开重连后环境学习状态复位
|
||||
g_relay_hold_cnt = 0; // V4.36.3: 保持计时复位
|
||||
g_relay_hold_done = 0;
|
||||
|
||||
Reference in New Issue
Block a user