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