fix: 上电后稳定期 — 128样本(~128ms)仅跟踪基线不检测
- 新增 g_loop_stable 标志,Origin确立后持续慢闪 - vd1_task 稳定期内只做 IIR + 基线跟踪,跳过进入检测 - 稳定期 128 样本 (~128ms) 后自动启用检测 - 绿灯慢闪延续到稳定期结束 - 安全复位时重置 g_loop_stable
This commit is contained in:
@@ -51,6 +51,7 @@ uint8_t loop1_FLAG_OUT;
|
||||
uint8_t loop1_FLAG_PLUSE;
|
||||
uint8_t loop1_SensLevel;
|
||||
uint8_t loop1_cnt_release;
|
||||
uint8_t g_loop_stable;
|
||||
|
||||
/*===========================================================================
|
||||
* 全局状态变量 — 计数器
|
||||
@@ -189,7 +190,7 @@ void LEDA_ON_OFF(void)
|
||||
* 由 TMR15 ISR 每 5ms 驱动一次,是绿灯的唯一控制入口。
|
||||
*
|
||||
* 模式:
|
||||
* 自检中 (loop1_INI_LOOP==1 或 线圈未稳定):
|
||||
* 自检/稳定中 (loop1_INI_LOOP || 线圈未连 || !g_loop_stable):
|
||||
* → 慢闪 (200ms 亮 / 200ms 灭)
|
||||
* 正常工作:
|
||||
* → 有车亮 (VD_FLAG==1), 无车灭
|
||||
@@ -201,7 +202,7 @@ void poll_green_led(void)
|
||||
static uint16_t _slow_tick = 0;
|
||||
|
||||
/*--- 自检阶段:慢闪 ---*/
|
||||
if (loop1_INI_LOOP || !g_loop_power_up_state) {
|
||||
if (loop1_INI_LOOP || !g_loop_power_up_state || !g_loop_stable) {
|
||||
_slow_tick++;
|
||||
if (_slow_tick >= GREEN_SLOW_HALF) {
|
||||
_slow_tick = 0;
|
||||
@@ -314,6 +315,7 @@ void INIT_VD(void)
|
||||
loop1_FLAG_OUT = 0;
|
||||
loop1_FLAG_PLUSE = 0;
|
||||
loop1_cnt_release = 0;
|
||||
g_loop_stable = 0;
|
||||
|
||||
loop1_LC_HOLD = 0;
|
||||
loop1_LC_Reset = 0;
|
||||
@@ -524,6 +526,7 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
loop1_LC_Reset = 1;
|
||||
loop1_INI_LOOP = 1;
|
||||
loop1_LOOP_OK0 = 0;
|
||||
g_loop_stable = 0;
|
||||
LC_Hold_CNT = 0;
|
||||
loop1_ORG_CNT = 0;
|
||||
loop1_ORG_SUM = 0;
|
||||
@@ -586,12 +589,27 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
*===========================================================================*/
|
||||
void vd1_task(void)
|
||||
{
|
||||
#define STABLE_SAMPLES 128 // 稳定期样本数 (~128ms)
|
||||
|
||||
static uint16_t _stable_cnt = 0;
|
||||
|
||||
if (loop1_Origin == 0) return;
|
||||
|
||||
/*--- 1. IIR 一阶低通滤波(对齐 M1H 公式) ---*/
|
||||
/* Value 已经是 MEASUREMENT_BASE 级别的原始值,不再右移 */
|
||||
/*--- 1. IIR 一阶低通滤波 ---*/
|
||||
loop1_CAPVD = get_flt_value(loop1_Value, loop1_CAPVD);
|
||||
|
||||
/*--- 2. 稳定期:只跟踪基线,不检测车辆 ---*/
|
||||
if (!g_loop_stable) {
|
||||
update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT,
|
||||
&loop1_Origin, loop1_CAPVD, 100);
|
||||
_stable_cnt++;
|
||||
if (_stable_cnt >= STABLE_SAMPLES) {
|
||||
g_loop_stable = 1;
|
||||
PRINT("Loop stable, Origin:%d\n", loop1_Origin);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!loop1_VD_FLAG) {
|
||||
/*================================================================
|
||||
* 无车状态
|
||||
|
||||
Reference in New Issue
Block a user