feat(V4B): V4.36.2 — 线圈重连确认窗 100ms (防抖动重复计数/首样本毛刺)

RF 上升沿仅进候选; 载波连续恢复 RECONNECT_CONFIRM_TICKS=10 (100ms)
才确认重连重置; 确认窗内 disconnect_active 保持 → 黄灯快闪/计数不重复,
不跑 vd1_task; 任何掉线取消候选 → 抖动免疫
断开判定不加防抖(释放速度安全刚需)
语法0 error, 4测试全绿; spec V2.18 / devlog V2.36
This commit is contained in:
wangfq
2026-09-04 08:50:25 +08:00
parent 798801d881
commit 18db4bf762
4 changed files with 87 additions and 21 deletions
+43
View File
@@ -4,6 +4,48 @@
---
## 2026-09-03 — 线圈重连确认窗 100ms(固件 V4.36.2
> **固件版本:V4.36.2**cmcng.hFIRMWARE_VER="4.36.2"REV=2)。devlog 修订 V2.36。
### 背景(抗干扰性分析结论)
断开/重连链路原设计:RF 恢复**第 1 拍**即触发重连重置(清断开标记 + CAPVD=0 重收敛),
存在三个裸奔点:
1. **接触不良抖动**(断开↔恢复几十 ms 交替)→ 每个边沿重复计数 + 反复重收敛
2. **首样本直锁绕过斜率限幅**CAPVD==0 直锁 Value)→ 恢复首拍毛刺直接进基线
3. 断开判定 5ms 无防抖——但释放速度是安全刚需,**保持现状不加**防抖
### 改动(确认窗方案)
- **RF 上升沿仅进入候选**g_reconn_candidate),不再立即重置
- 载波**连续恢复 10×10ms=100ms**RECONNECT_CONFIRM_TICKS=10)才确认重连:
- 清断开标记(黄灯从快闪切 N 短闪/灭)
- CAPVD=0 / CAPVD_slow=0 强制重收敛(首样本此时载波已稳定 100ms → 干净)
- env 复位 + env_resync_abort()
- **确认窗内**disconnect_active 保持 1 → 黄灯维持快闪、断开计数不重复;
不跑 vd1_task(等载波稳定)
- **任何掉线**(else 分支)→ 取消候选、计数清零 → 抖动免疫(每次恢复重新计满窗才确认)
### 行为变化
| 场景 | V4.36.1 | V4.36.2 |
|------|---------|---------|
| 正常断开→重连 | 恢复即重置 | 恢复后 ~100ms 确认重置(EVT|loop_reconnect confirmed 100ms |
| 接触不良抖动 | 每 cycle 计数+1、反复重收敛 | 候选被反复取消,**不计数不重置**,恢复稳定后才确认一次 |
| 恢复首样本 | 可能含毛刺直锁 | 载波稳定 100ms 后重建,干净 |
| 上电首次接线圈 | 恢复即进入 | 多 100ms 候选(判稳 1.3s+ 流程内可忽略) |
### 验证
- 语法 0 error;4 组单测全 PASS(重连逻辑在主循环 loop_task,无单测耦合;待板级验证)
### 待板级验证
1. 拔插线圈:快闪持续到重连确认后切短闪/灭(比旧版多 ~100ms)
2. 手动快速抖动插头:断开计数不应乱跳(≤真实断开次数)
3. 重连后检测正常(Origin 沿用旧值;若断开期间环境大改走 2s/7s 环境学习)
## 2026-09-03 — 版本体系增加修订号:4.36.1(固件 V4.36.1
> **固件版本:V4.36.1**cmcng.hFIRMWARE_VER="4.36.1"MAIN=4/SUB=36/**REV=1**)。devlog 修订 V2.35。
@@ -1472,6 +1514,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.36 | 2026-09-03 | V4.36.2 线圈重连确认窗 100ms(防抖动重复计数/首样本毛刺); 断开判定不加防抖 |
| V2.35 | 2026-09-03 | 版本体系增加修订号: 4.36.1 (MAIN/SUB 产品定, 小改只增 REV); 启动打印 fw 行 |
| V2.34 | 2026-09-03 | V4.36 频率窗上限: 108→115kHz(43nF板≈44µH, 放行~48µH小线圈) |
| V2.33 | 2026-09-03 | V4.35 频率窗上限复核: 92→108kHz(43nF板口径≈50µH, 92@43nF≈70µH过严) |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.1 | 文档版本: V2.17
> 单路线圈车辆检测器 | 固件版本: V4.36.2 | 文档版本: V2.18
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -783,3 +783,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.15 | 2026-09-03 | 更新至 V4.36:频率窗上限 108→115kHz43nF 板口径 ≈44µH,放行 ~48µH 小线圈) |
| V2.16 | 2026-09-03 | 文档同步(V4.30~36 参数全面对齐):黄灯行为表模式 5 一长一短 300/100/100/700ms、模式 4 常亮 2s/7s/2s、COIL_F_OK_MAX_KHZ 115、故障表 f>115k |
| V2.17 | 2026-09-03 | 固件版本体系增加修订号:**V4.36.1**(MAIN/SUB 由产品定,小改动只增 REV);启动日志打印 fw 行 |
| V2.18 | 2026-09-03 | **V4.36.2 重连确认窗**:载波连续恢复 ~100ms 才确认重连重置(防接触抖动重复计数/首样本毛刺);断开判定不加防抖(释放速度安全刚需) |
+2 -2
View File
@@ -14,11 +14,11 @@
#define __CMCNG_H__
#define PRODUCT_MODEL "DLD154"
#define FIRMWARE_VER "4.36.1" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
#define FIRMWARE_VER "4.36.2" // 主.子.修订 (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 1
#define FIRMWARE_VER_REV 2
#define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0
+40 -18
View File
@@ -137,6 +137,8 @@ uint16_t g_safe_max_cnt = LC_HOLD_TIME;
uint8_t g_loop_power_up_state = 0;
uint8_t g_disconnect_count = 0;
uint8_t g_disconnect_active = 0;
uint8_t g_reconn_candidate = 0; // V4.36.2: 重连确认窗候选(载波上升沿进入)
uint16_t g_reconn_cnt = 0; // V4.36.2: 载波连续恢复计数 (确认窗 ~100ms)
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)
@@ -1251,6 +1253,9 @@ void vd1_task(void)
/*===========================================================================
* loop_task_function FreeRTOS M1H main
*===========================================================================*/
#define RECONNECT_CONFIRM_TICKS 10 /* V4.36.2: 重连确认窗 10×10ms=100ms
* ;
* 线 */
void loop_task_function(void *pvParameters)
{
g_sys_freq = g_crm_clocks_freq_struct.sclk_freq;
@@ -1259,33 +1264,50 @@ void loop_task_function(void *pvParameters)
while (1) {
if (loop1_LOOP_OK) {
/*--- 线圈重连 ---*/
/*--- 线圈重连: V4.36.2 确认窗 (载波连续恢复 ~100ms 才确认重置) ---
* RF 沿; g_disconnect_active=1 ,
* ; ()线 .
* : / CAPVD (, ) */
if (!loop1_LOOP_OK0) {
loop1_LOOP_OK0 = 1;
g_disconnect_active = 0; // 重连,清除断开标记
loop1_CAPVD = 0; // 强制 IIR 从首个有效值重新收敛
loop1_CAPVD_slow = 0; // 方案A: 释放慢滤波同步收敛
g_env_wait_cnt = 0; // V4.24: 断开重连后环境学习状态复位
env_resync_abort();
PRINT("EVT|loop_reconnect\n");
g_reconn_candidate = 1;
g_reconn_cnt = 0;
}
if (loop1_CAP_OK) {
loop1_CAP_OK = 0;
/* 首次成功测量 → 标记线圈已连接 */
if (!g_loop_power_up_state) {
g_loop_power_up_state = 1;
if (g_reconn_candidate) {
g_reconn_cnt++;
if (g_reconn_cnt >= RECONNECT_CONFIRM_TICKS) {
g_reconn_candidate = 0;
g_reconn_cnt = 0;
g_disconnect_active = 0; // 确认重连: 清除断开标记
loop1_CAPVD = 0; // 强制 IIR 从首个有效值重新收敛
loop1_CAPVD_slow = 0; // 方案A: 释放慢滤波同步收敛
g_env_wait_cnt = 0; // V4.24: 断开重连后环境学习状态复位
env_resync_abort();
PRINT("EVT|loop_reconnect confirmed %dms\n",
RECONNECT_CONFIRM_TICKS * 10);
}
/* 确认窗内: 等载波稳定, 不跑检测 (黄灯由 disconnect_active=1 维持快闪) */
} else {
if (loop1_CAP_OK) {
loop1_CAP_OK = 0;
/* 核心检测算法 */
vd1_task();
/* 首次成功测量 → 标记线圈已连接 */
if (!g_loop_power_up_state) {
g_loop_power_up_state = 1;
}
/* 拨码开关轮询 */
poll_sw_state();
/* 核心检测算法 (确认窗结束后 CAPVD=0 → 首样本干净重建) */
vd1_task();
/* 拨码开关轮询 */
poll_sw_state();
}
}
} else {
/*--- 线圈断开 ---*/
/* V4.36.2: 掉线即取消重连候选 (抖动免疫: 每次掉线重新计确认窗) */
g_reconn_candidate = 0;
g_reconn_cnt = 0;
/* 注意: 不清除 loop1_VD_FLAG,保留断开前的检测状态 */
RLY1_OFF;
RLY2_OFF;