From a83674f77bb153bbbd20832944a17687cd2a2540 Mon Sep 17 00:00:00 2001 From: wangfq Date: Tue, 23 Jun 2026 18:10:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=98=B2=E6=AD=A2=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=B8=8A=E5=8D=87=E6=B1=A1=E6=9F=93=E5=9F=BA=E7=BA=BF=20?= =?UTF-8?q?=E2=80=94=20Origin=E8=B7=9F=E8=B8=AA=E5=86=BB=E7=BB=93=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CAPVD异常上升时暂停基线跟踪 (dev > dlt_ORG×4) - 防止Xn先增大再减小导致Origin被顶到虚高 - 虚高Origin + 有车冻结 → 离开时永远无法释放 - 冻结阈值跟随灵敏度自动缩放 --- .../at32f421_freertos_demo/src/TaskLoop.c | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index ced6631..ea7c4c7 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -654,12 +654,24 @@ void vd1_task(void) * 无车状态 *================================================================*/ - /*--- 基线跟踪(仿 TLD-110:有车时冻结) ---*/ - update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT, - &loop1_Origin, loop1_CAPVD, 100); + /*--- 基线跟踪(仿 TLD-110:有车时冻结) + * 额外保护: CAPVD 异常上升时暂停跟踪,防止基线被污染 + * 否则车辆驶入时若 Xn 先增大,Origin 被顶上去后无法释放 ---*/ + loop1_dlt_ORG = ((uint32_t)loop1_Origin * SensTable[loop1_SensLevel]) >> 16; + { + int32_t dev = (int32_t)loop1_CAPVD - (int32_t)loop1_Origin; + if (dev < (int32_t)(loop1_dlt_ORG * 4)) { + /* CAPVD 未显著高于基线 → 安全跟踪 */ + update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT, + &loop1_Origin, loop1_CAPVD, 100); + } else { + /* CAPVD 异常偏高 → 冻结跟踪,重置累计 */ + loop1_ORG_CNT = 0; + loop1_ORG_SUM = 0; + } + } /*--- 进入检测 ---*/ - loop1_dlt_ORG = ((uint32_t)loop1_Origin * SensTable[loop1_SensLevel]) >> 16; if (loop1_CAPVD < (loop1_Origin - loop1_dlt_ORG)) { PRINT("Car_In, Value:%d, CAPVD:%d, Origin:%d, dlt:%d\n",