feat(V4B): V4.36.8 — 进入/释放确认按 Q 档分档 (A+B)

Q 分档心智沿用至判定: 低Q(高频小L)抖动大 → 确认样本加长防误判
进入确认: 高3/中4/低5 样本 (原固定3)
释放确认: 高3/中4/低5 样本 (原固定3)
update_q_confirm_need() 每样本按空场 f 更新; dlt 已比例化无需分档
语法0 error, 4测试全绿; spec V2.24 / devlog V2.42
This commit is contained in:
wangfq
2026-09-04 10:45:24 +08:00
parent 1b038474d6
commit 6a0a39f8ee
5 changed files with 82 additions and 6 deletions
@@ -160,6 +160,8 @@ uint16_t g_reconn_cnt = 0; // V4.36.2: 载波连续恢复计数 (确
uint16_t g_relay_hold_cnt = 0; // V4.36.3: 有车断开继电器保持计时(ms, ISR 5ms 累加)
uint8_t g_relay_hold_done = 0; // V4.36.3: 本次有车断开已兜底释放(防重复OFF)
uint16_t g_reconn_blank_ms = 0; // V4.36.5: 重连起振抑制倒计时(ms, 按Q分档, vd1_task 每样本-10)
uint8_t g_entry_need = 3; // V4.36.8: 进入确认样本数 (按Q档, 高3/中4/低5)
uint8_t g_release_need = 3; // V4.36.8: 释放确认样本数 (按Q档, 高3/中4/低5)
uint8_t g_fault_phase = 0;
uint16_t g_fault_tick = 0;
uint8_t g_coil_fault = 0; // V4.26: 线圈电感量异常 0=正常 1=L偏大(f<20kHz) 2=L偏小(f>120kHz)
@@ -912,6 +914,8 @@ static void coil_monitor(void)
* 2. 无车时:基线跟踪 + 进入检测
* 3. 有车时:离开检测(带滞回)
*===========================================================================*/
static void update_q_confirm_need(void); // V4.36.8 前置声明 (定义在 loop_task 上方)
void vd1_task(void)
{
#define STABLE_SAMPLES 128 // 稳定期最少样本数 (128×10ms≈1.3s)
@@ -975,6 +979,9 @@ void vd1_task(void)
else g_reconn_blank_ms = 0;
}
/* V4.36.8: 进入/释放确认样本数按 Q 档更新 (每样本; Origin=0 时归高Q 3) */
update_q_confirm_need();
/*--- 2. 稳定期:绕过 IIR 和斜率限幅,小窗口快速收敛;
* 基准值稳定(连续窗口 Origin 漂移达标)后才结束自检 ---*/
if (!g_loop_stable) {
@@ -1167,7 +1174,7 @@ void vd1_task(void)
calc_freq_khz(loop1_CAPVD, loop1_LPCNT), loop1_LPCNT, loop1_Xn);
}
loop1_entry_cnt++;
if (loop1_entry_cnt >= ENTRY_CONFIRM) {
if (loop1_entry_cnt >= g_entry_need) { // V4.36.8: 按Q档 (高3/中4/低5)
PRINT("Car_In, Value:%d, CAPVD:%d, Origin:%d, dlt:%d\\n",
loop1_Value, loop1_CAPVD, loop1_Origin, loop1_dlt_ORG);
@@ -1294,7 +1301,7 @@ void vd1_task(void)
calc_freq_khz(loop1_CAPVD, loop1_LPCNT), loop1_LPCNT, loop1_Xn);
}
loop1_cnt_release++;
if (loop1_cnt_release >= 3) {
if (loop1_cnt_release >= g_release_need) { // V4.36.8: 按Q档 (高3/中4/低5)
PRINT("Car_OFF, Value:%d CAPVD:%d Origin:%d dlt:%d\n",
loop1_Value, loop1_CAPVD, loop1_Origin, loop1_dlt_ORG);
loop1_VD_FLAG = 0;
@@ -1316,6 +1323,24 @@ void vd1_task(void)
/*===========================================================================
* loop_task_function — FreeRTOS 主任务(对齐 M1H main 循环)
*===========================================================================*/
/* V4.36.8: 按 Q 档(空场频率代理)更新进入/释放确认样本数 — 每样本调用一次
* 低Q(高频小L): 测量抖动大 → 多样本防假进入/输出抖落
* 高Q(低频大L): 信号稳 → 维持快响应 (3 样本) */
static void update_q_confirm_need(void)
{
uint32_t _f = calc_freq_khz(loop1_Origin, loop1_LPCNT);
if (_f > RECONNECT_Q_MID_F_KHZ) { /* 低Q f>100k */
g_entry_need = ENTRY_CONFIRM_LO;
g_release_need = REL_CONFIRM_LO;
} else if (_f > RECONNECT_Q_HI_F_KHZ) { /* 中Q 80~100k */
g_entry_need = ENTRY_CONFIRM_MID;
g_release_need = REL_CONFIRM_MID;
} else { /* 高Q f<=80k (含 Origin=0 f=0) */
g_entry_need = ENTRY_CONFIRM_HI;
g_release_need = REL_CONFIRM_HI;
}
}
#define RECONNECT_CONFIRM_TICKS 10 /* V4.36.2: 重连确认窗 10×10ms=100ms
* 载波连续恢复满窗才确认重连重置;
* 抖动断开↔恢复每掉线取消重新计 */