From 3b2c4dea8751deaafe2b5b4a0baac27d690a94c4 Mon Sep 17 00:00:00 2001 From: wangfq Date: Tue, 23 Jun 2026 15:45:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BA=BF=E5=9C=88=E9=87=8D=E8=BF=9E?= =?UTF-8?q?=E5=90=8E=E4=BF=9D=E6=8C=81=E6=A3=80=E6=B5=8B=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 断开时不丢 VD_FLAG,保留断开前的检测状态 - 重连时 CAPVD=0 强制 IIR 从首个有效值重新收敛 - vd1_task 首个样本直接锁定 Value,后续 IIR 正常跟踪 - 重连后: 有车→绿灯亮, 无车→绿灯灭, 自动接续 --- utilities/at32f421_freertos_demo/src/TaskLoop.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index f829815..b5d3ecb 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -596,7 +596,12 @@ void vd1_task(void) if (loop1_Origin == 0) return; /*--- 1. IIR 一阶低通滤波 ---*/ - loop1_CAPVD = get_flt_value(loop1_Value, loop1_CAPVD); + /* 重连后 CAPVD=0:跳过 IIR,直接锁定首个有效值 */ + if (loop1_CAPVD == 0) { + loop1_CAPVD = loop1_Value; + } else { + loop1_CAPVD = get_flt_value(loop1_Value, loop1_CAPVD); + } /*--- 2. 稳定期:只跟踪基线,不检测车辆 ---*/ if (!g_loop_stable) { @@ -692,6 +697,7 @@ void loop_task_function(void *pvParameters) if (!loop1_LOOP_OK0) { loop1_LOOP_OK0 = 1; g_disconnect_active = 0; // 重连,清除断开标记 + loop1_CAPVD = 0; // 强制 IIR 从首个有效值重新收敛 } if (loop1_CAP_OK) { @@ -710,7 +716,7 @@ void loop_task_function(void *pvParameters) } } else { /*--- 线圈断开 ---*/ - loop1_VD_FLAG = 0; + /* 注意: 不清除 loop1_VD_FLAG,保留断开前的检测状态 */ RLY1_OFF; RLY2_OFF;