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:
wangfq
2026-09-04 18:42:22 +08:00
parent e1b5542296
commit ef5959d6fe
5 changed files with 82 additions and 4 deletions
+21
View File
@@ -4,6 +4,26 @@
---
## 2026-09-03 — 低Q 释放抗抖(固件 V4.36.19
> **固件版本:V4.36.19**。devlog 修订 V2.54。spec V2.35 / manual 已同步。
**问题**:43nF 低频、高灵敏、低Q(50µH 以下) 线圈——金属板感应边界反复试探
(快释放停住→缓慢离开),触发高度稳定但释放高度越拉越远,最终绿灯长亮释放不了;
高Q 无此问题。关键旁证:**开 DEBUG 打印复现不了、禁打印可复现**——PRINT 阻塞
把 vd1_task 样本间隔从 10ms 拉到 50ms+,等效低通,抖动被平均。
**根因**:释放带回仅 dlt_rel=23 counts0.018%@128k)≈ 低Q 抖动 σ(±15~25)
快值直接判释放(`CAPVD>Origin-23` 连续 5 样本)在边界试探时被抖动反复打断
→ 释放点外移/卡死。
**修复(Q 分档,高/中Q 零影响)**
1. `rel_release_hit()`:低Q(g_q_lo, f>100kHz) 用 g_rel_smooth(τ≈50ms,
REL_ALFA=46,复刻打印平均效应)判释放
2. 低Q 释放带回 ×1.5REL_BAND_LO_MULT=15023→~35)提前释放留 σ 余量
3. g_rel_smoothIIR 后每样本跟随;CAPVD=0/重连/INIT 归零;Car_In snap=CAPVD
语法 0 error、4 测试全绿。
## 2026-09-03 — 频率窗下界 20→18kHz(固件 V4.36.18
> **固件版本:V4.36.18**cmcng.hFIRMWARE_VER="4.36.18"REV=18)。devlog 修订 V2.53。
@@ -1902,6 +1922,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.54 | 2026-09-03 | V4.36.19 低Q 释放抗抖: τ50ms 平滑判释放+带回×1.5 (REL_ALFA/REL_BAND_LO_MULT), 高/中Q 零影响 |
| V2.53 | 2026-09-03 | V4.36.18 频率窗下界 20→18kHz (18~125kHz) |
| V2.52 | 2026-09-03 | 安全复位观感勘误(无代码): 绿灯镜像继电器后复位指示变化; manual 4.5/spec 对齐实际行为 |
| V2.51 | 2026-09-03 | V4.36.17 修复上电无线圈黄灯不闪: 黄灯模式1 改 !LOOP_OK(5ms 实时) |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.18 | 文档版本: V2.34
> 单路线圈车辆检测器 | 固件版本: V4.36.19 | 文档版本: V2.35
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -805,3 +805,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.32 | 2026-09-03 | **V4.36.16 上电自检与重连灯语义分离**:黄灯模式1 去 !power_up(上电有线圈黄灯不闪,自检归绿灯慢闪);无线圈由 disconnect_active 覆盖仍双闪;判稳门控触发加 g_loop_stable(上电/安全复位不判稳);运行中重连仍黄灯接管 |
| V2.33 | 2026-09-03 | **V4.36.17 修复上电无线圈黄灯不闪**:断开分支置位条件含 power_up(上电 phase 故意不置 disconnect_active),V4.36.16 去 !power_up 后裸奔 → 黄灯模式1 改 `!LOOP_OK || g_reconn_stab`(5ms 实时载波缺失判定,同时让运行中断开黄灯反应从 150ms 加快到 5ms) |
| V2.34 | 2026-09-03 | **V4.36.18 频率窗下界 20→18kHz**:放行更大电感线圈(18~125kHz @43nF ≈ L 47µH~1.15mH);test 边界 17 偏大/18 正常;参数表同步修正历史滞后(MAX 125 / C_NF 43 |
| V2.35 | 2026-09-03 | **V4.36.19 低Q 释放抗抖**:低Q(21~50µH)高灵敏边界试探释放点外移/锁死(释放带回 23≈σ,快值判释放被抖断);τ50ms 平滑(REL_ALFA=46, 打印降采样平均效应工程版)+带回×1.5(REL_BAND_LO_MULT) 仅低Q 生效,高/中Q 零影响 |
@@ -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)
+2 -2
View File
@@ -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;