feat(V4B): V4.36.8 — 进入/释放确认按 Q 档分档 (A+B)

Q 分档心智沿用至判定: 低Q(高频小L)抖动大 → 确认样本加长防误判
进入确认: 高3/中4/低5 样本 (原固定3)
释放确认: 高3/中4/低5 样本 (原固定3)
update_q_confirm_need() 每样本按空场 f 更新; dlt 已比例化无需分档
语法0 error, 4测试全绿; spec V2.24 / devlog V2.42
This commit is contained in:
wangfq
2026-09-04 10:45:24 +08:00
parent 1b038474d6
commit 6a0a39f8ee
5 changed files with 82 additions and 6 deletions
+43
View File
@@ -4,6 +4,48 @@
---
## 2026-09-03 — 进入/释放确认按 Q 档分档(固件 V4.36.8)
> **固件版本:V4.36.8**cmcng.hFIRMWARE_VER="4.36.8"REV=8)。devlog 修订 V2.42。
### 用户拍板(Q 分档心智沿用到有/无车判定)
V4.36.5~7 重连抑制分档效果好 → 用户提出沿用到日常判定减少误判。
分析结论:dlt 已比例化(Origin×SensTable>>16)无需分档;真正与 Q(噪声抖动)相关的是
**进入确认样本数****释放确认样本数**
### 改动(A+B 两处)
| Q 档 | 频率 | 进入确认(样本) | 释放确认(样本) |
|------|------|--------------|--------------|
| 高Q | f≤80k | 3 | 3(维持原响应) |
| 中Q | 80~100k | 4 | 4 |
| 低Q | f>100k | **5** | **5**(防假进入/输出抖落) |
- 新增 `update_q_confirm_need()`:每样本按空场频率 `calc_freq_khz(Origin, LPCNT)` 更新
`g_entry_need/g_release_need`Origin=0 归高Q 3,不干扰上电判稳)
- 进入确认:`loop1_entry_cnt >= ENTRY_CONFIRM``>= g_entry_need`
- 释放确认:`loop1_cnt_release >= 3``>= g_release_need`
- 宏:ENTRY_CONFIRM_HI/MID/LO、REL_CONFIRM_HI/MID/LOTaskLoop.h
### 权衡
- 低Q(高频小L):进入/释放各 +20ms(5 vs 3 样本)——判车延迟 50ms@10ms,几乎无感
- 高Q(低频大L):行为零变化(仍 3 样本快响应)
- 真车误判面:进入抖动需持续 ≥5 样本(50ms) 压低超 dlt 才误判——低Q 空场抖动若远小于 dlt 则无感
### 验证
- 语法 0 error;4 组单测全 PASS(判定确认在主路径,无单测耦合;待板级验证)
- 前置声明修正 1 处(static 定义在使用后)
### 待板级验证
1. 低Q 小线圈(46µH) 反复慢速压车/移走:进出响应正常(无漏检/无抖动),时间略长 20ms 无感
2. 高Q 线圈(136µH) 行为与 V4.36.7 完全一致
3. 行人/铁板边缘扫过:误判应比 3 样本版更少
4. DBG 观察 Car_In/Car_OFF 打印节奏
## 2026-09-03 — 断开保持/抑制窗参数调整(固件 V4.36.7)
> **固件版本:V4.36.7**cmcng.hFIRMWARE_VER="4.36.7"REV=7)。devlog 修订 V2.41。
@@ -1661,6 +1703,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.42 | 2026-09-03 | V4.36.8 进入/释放确认按Q档(高3/中4/低5样本), dlt已比例化无需分档 |
| V2.41 | 2026-09-03 | V4.36.7 参数: RELAY_HOLD 1s; Q抑制 高200/中300/低400ms |
| V2.40 | 2026-09-03 | V4.36.6 高Q 抑制窗 0→100ms(短兜底), 分档终值 100/200/400ms |
| V2.39 | 2026-09-03 | V4.36.5 重连起振抑制按Q分档(f>100k低Q 400ms/80~100k中Q 200ms/≤80k高Q 0ms), 进入确认挂起 |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.7 | 文档版本: V2.23
> 单路线圈车辆检测器 | 固件版本: V4.36.8 | 文档版本: V2.24
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -789,3 +789,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.21 | 2026-09-03 | **V4.36.5 重连起振抑制按 Q 分档**:低Q(高频小L 46~50µH)起振慢前几窗偏差大→假有车跳输出;按空场频率 f 分档抑制——f>100k 低Q 400ms / 80~100k 中Q 200ms / ≤80k 高Q 0ms136/210µH 实测无需);抑制期仅挂起进入确认累计 |
| V2.22 | 2026-09-03 | **V4.36.6 高Q 档抑制窗 0→100ms**:高Q(≤80kHz 大L) 增加 100ms 短兜底窗(覆盖起振/插头瞬态),分档完整为 高Q 100ms/中Q 200ms/低Q 400ms |
| V2.23 | 2026-09-03 | **V4.36.7 参数调整**RELAY_HOLD_MS 500→**1000**(有车断开继电器保持);抑制窗 高Q 100→**200** / 中Q 200→**300** / 低Q 400 不变 → 分档 200/300/400ms |
| V2.24 | 2026-09-03 | **V4.36.8 Q 档判定参数**:进入确认 ENTRY_CONFIRM 按 Q 档(高3/中4/低5 样本)+ 释放确认同表分档——低Q 抖动大防假进入/输出抖落;dlt 已比例化无需分档;update_q_confirm_need 每样本按空场 f 更新 |
@@ -43,7 +43,14 @@
// 历史: V4.05 曾用 ReleaseTable_B 加深释放表(实验失败, 方向反)
// V4.06 改为 SENS=3 进入21→25+释放14→12, 等比推全档
#define MAX_SLOPE_RATE 5 // 斜率限幅: 单次最大变化 5% (物理限制, 拒绝 EMI 尖峰)
#define ENTRY_CONFIRM 3 // 进入确认: 连续 N 次低于阈值才判定有车
/* V4.36.8: 进入/释放确认样本数 — 按线圈 Q 档 (Q∝1/f 代理, 低Q抖动大需更多样本防误判) */
#define ENTRY_CONFIRM 3 // 进入确认基准(高Q): 连续 N 次低于阈值才判定有车
#define ENTRY_CONFIRM_HI 3 // 高Q(f<=80k) 进入确认样本
#define ENTRY_CONFIRM_MID 4 // 中Q(80~100k)
#define ENTRY_CONFIRM_LO 5 // 低Q(f>100k): 抖动大, 多样本防假进入
#define REL_CONFIRM_HI 3 // 高Q 释放确认样本
#define REL_CONFIRM_MID 4 // 中Q
#define REL_CONFIRM_LO 5 // 低Q: 释放边界抖动, 多样本防输出抖落
#define FREEZE_TIMEOUT 1000 // 基线冻结超时: ~10s @ 10ms/tick, 持续偏高且稳定后强制更新基线
#define FREEZE_STABILITY_RATE 2 // 冻结稳定性窗口: 参考值的 ±2% (CAPVD 需在此范围内才累计超时)
#define ENV_WARN_WAIT 200 // 环境预判 (V4.31): dev>+4dlt 高位连续 ~2s → 黄灯预判锁存(回摆保持)
+2 -2
View File
@@ -14,11 +14,11 @@
#define __CMCNG_H__
#define PRODUCT_MODEL "DLD154"
#define FIRMWARE_VER "4.36.7" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
#define FIRMWARE_VER "4.36.8" // 主.子.修订 (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 7
#define FIRMWARE_VER_REV 8
#define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0
@@ -160,6 +160,8 @@ uint16_t g_reconn_cnt = 0; // V4.36.2: 载波连续恢复计数 (确
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_entry_need = 3; // V4.36.8: 进入确认样本数 (按Q档, 高3/中4/低5)
uint8_t g_release_need = 3; // V4.36.8: 释放确认样本数 (按Q档, 高3/中4/低5)
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)
@@ -912,6 +914,8 @@ static void coil_monitor(void)
* 2. 线 +
* 3.
*===========================================================================*/
static void update_q_confirm_need(void); // V4.36.8 前置声明 (定义在 loop_task 上方)
void vd1_task(void)
{
#define STABLE_SAMPLES 128 // 稳定期最少样本数 (128×10ms≈1.3s)
@@ -975,6 +979,9 @@ void vd1_task(void)
else g_reconn_blank_ms = 0;
}
/* V4.36.8: 进入/释放确认样本数按 Q 档更新 (每样本; Origin=0 时归高Q 3) */
update_q_confirm_need();
/*--- 2. 稳定期:绕过 IIR 和斜率限幅,小窗口快速收敛;
* ( Origin ) ---*/
if (!g_loop_stable) {
@@ -1167,7 +1174,7 @@ void vd1_task(void)
calc_freq_khz(loop1_CAPVD, loop1_LPCNT), loop1_LPCNT, loop1_Xn);
}
loop1_entry_cnt++;
if (loop1_entry_cnt >= ENTRY_CONFIRM) {
if (loop1_entry_cnt >= g_entry_need) { // V4.36.8: 按Q档 (高3/中4/低5)
PRINT("Car_In, Value:%d, CAPVD:%d, Origin:%d, dlt:%d\\n",
loop1_Value, loop1_CAPVD, loop1_Origin, loop1_dlt_ORG);
@@ -1294,7 +1301,7 @@ void vd1_task(void)
calc_freq_khz(loop1_CAPVD, loop1_LPCNT), loop1_LPCNT, loop1_Xn);
}
loop1_cnt_release++;
if (loop1_cnt_release >= 3) {
if (loop1_cnt_release >= g_release_need) { // V4.36.8: 按Q档 (高3/中4/低5)
PRINT("Car_OFF, Value:%d CAPVD:%d Origin:%d dlt:%d\n",
loop1_Value, loop1_CAPVD, loop1_Origin, loop1_dlt_ORG);
loop1_VD_FLAG = 0;
@@ -1316,6 +1323,24 @@ void vd1_task(void)
/*===========================================================================
* loop_task_function FreeRTOS M1H main
*===========================================================================*/
/* V4.36.8: 按 Q 档(空场频率代理)更新进入/释放确认样本数 — 每样本调用一次
* Q(L): /
* Q(L): (3 ) */
static void update_q_confirm_need(void)
{
uint32_t _f = calc_freq_khz(loop1_Origin, loop1_LPCNT);
if (_f > RECONNECT_Q_MID_F_KHZ) { /* 低Q f>100k */
g_entry_need = ENTRY_CONFIRM_LO;
g_release_need = REL_CONFIRM_LO;
} else if (_f > RECONNECT_Q_HI_F_KHZ) { /* 中Q 80~100k */
g_entry_need = ENTRY_CONFIRM_MID;
g_release_need = REL_CONFIRM_MID;
} else { /* 高Q f<=80k (含 Origin=0 f=0) */
g_entry_need = ENTRY_CONFIRM_HI;
g_release_need = REL_CONFIRM_HI;
}
}
#define RECONNECT_CONFIRM_TICKS 10 /* V4.36.2: 重连确认窗 10×10ms=100ms
* ;
* 线 */