feat(V4B): 方案B实验 V4.05 — USE_SLOW_RELEASE=0 + 调深释放阈值表 ReleaseTable_B
对比路线(与V4.04方案A A/B): 释放走快滤波(无慢滤波状态, 消除悬停风险),
手感对齐改由调深释放表 {80,42,27,18}(原始{60,32,21,14}加深30%)承担。
⚠关键认知(仿真+单测双确认): 释放方向是CAPVD向Origin恢复,
dlt增大(调深)→释放线降低→释放更早(与'调深=更严格'直觉相反)。
仿真预测: 深信号(≥0.2%)原始表更接近PD132T; 浅信号(0.1%)加深表更接近。
单测: tests/test_planb_release.c 新增(滞回为正✓/加深表释放≤原始表✓/释放时刻合理✓)
test_release_slow_filter.c(方案A)仍通过, 两方案可回归
文档: devlog V2.14 + technical-spec §4.3.3 方案B段
This commit is contained in:
@@ -36,7 +36,14 @@
|
||||
*===========================================================================*/
|
||||
#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 USE_SLOW_RELEASE 1 // 方案A总开关: 1=释放走慢滤波(对齐PD132T) 0=原快滤波释放
|
||||
#define USE_SLOW_RELEASE 0 // 方案A总开关: 1=释放走慢滤波(对齐PD132T) 0=原快滤波释放
|
||||
#define USE_PLANB_TABLE 1 // 方案B: 快滤波释放 + 调深释放阈值表 (2026-09-01 实验, V4.05)
|
||||
// 1=释放判定用 ReleaseTable_B(加深30%, 各档滞回仍为正)
|
||||
// 0=释放判定用 SensTable_1(原始PD132T对齐表)
|
||||
// ⚠仿真预测: 加深→释放线低→CAPVD恢复更早碰到→释放更早(与直觉相反)
|
||||
// 深信号(≥0.2%)下原始表更接近PD132T; 浅信号(0.1%)下加深表更接近
|
||||
// 现场实测对比后定稿, 后续二选一保留
|
||||
#define RELEASE_TABLE_B { 80, 42, 27, 18} // 方案B 释放表 (V2.11 原始表 {60,32,21,14} 加深~30%)
|
||||
#define MAX_SLOPE_RATE 5 // 斜率限幅: 单次最大变化 5% (物理限制, 拒绝 EMI 尖峰)
|
||||
#define ENTRY_CONFIRM 3 // 进入确认: 连续 N 次低于阈值才判定有车
|
||||
#define FREEZE_TIMEOUT 1000 // 基线冻结超时: ~10s @ 10ms/tick, 持续偏高且稳定后强制更新基线
|
||||
@@ -74,6 +81,9 @@
|
||||
*===========================================================================*/
|
||||
extern const uint16_t SensTable[4];
|
||||
extern const uint16_t SensTable_1[4];
|
||||
#if USE_PLANB_TABLE
|
||||
extern const uint16_t ReleaseTable_B[4]; // 方案B: 调深释放表 (V4.05 实验)
|
||||
#endif
|
||||
|
||||
/*===========================================================================
|
||||
* 全局状态变量 — 捕获 & 测量
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.04"
|
||||
#define FIRMWARE_VER "4.05"
|
||||
#define HARDWARE_VER "3.00"
|
||||
#define FIRMWARE_VER_MAIN 4
|
||||
#define FIRMWARE_VER_SUB 4
|
||||
#define FIRMWARE_VER_SUB 5
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
*===========================================================================*/
|
||||
const uint16_t SensTable[4] = {300, 60, 32, 21}; // V2.11: 全档与 PD132T SensTable 完全一致 (0.458%/0.092%/0.049%/0.032% df/f)
|
||||
const uint16_t SensTable_1[4] = { 60, 32, 21, 14}; // V2.11: 离开分档与 PD132T 完全一致 (SENUP 标贴OFF=SET_ASB=1=出厂默认)
|
||||
#if USE_PLANB_TABLE
|
||||
const uint16_t ReleaseTable_B[4] = RELEASE_TABLE_B; // 方案B: 调深释放表 (V4.05 实验, 见 TaskLoop.h 注释)
|
||||
#endif
|
||||
|
||||
/*===========================================================================
|
||||
* 全局状态变量 — 捕获 & 测量
|
||||
@@ -881,12 +884,16 @@ void vd1_task(void)
|
||||
/*================================================================
|
||||
* 有车状态 — 简单 cnt_release 防抖离开
|
||||
*================================================================*/
|
||||
#if USE_PLANB_TABLE
|
||||
loop1_dlt_ORG = ((uint32_t)loop1_Origin * ReleaseTable_B[loop1_SensLevel]) >> 16; // 方案B: 调深释放表(V4.05)
|
||||
#else
|
||||
loop1_dlt_ORG = ((uint32_t)loop1_Origin * SensTable_1[loop1_SensLevel]) >> 16;
|
||||
#endif
|
||||
|
||||
#if USE_SLOW_RELEASE
|
||||
if ((loop1_Origin - loop1_dlt_ORG) < loop1_CAPVD_slow) { // 方案A: 用慢滤波值对齐 PD132T 释放手感
|
||||
#else
|
||||
if ((loop1_Origin - loop1_dlt_ORG) < loop1_CAPVD) { // 原逻辑: 快滤波直接判释放
|
||||
if ((loop1_Origin - loop1_dlt_ORG) < loop1_CAPVD) { // 方案B/原逻辑: 快滤波直接判释放
|
||||
#endif
|
||||
loop1_cnt_release++;
|
||||
if (loop1_cnt_release >= 3) {
|
||||
|
||||
Reference in New Issue
Block a user