diff --git a/docs/devlog.md b/docs/devlog.md index ba0dfe4..eaf2601 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -4,6 +4,35 @@ --- +## 2026-09-03 — 修复上电无线圈黄灯不闪(固件 V4.36.17) + +> **固件版本:V4.36.17**(cmcng.h:FIRMWARE_VER="4.36.17",REV=17)。devlog 修订 V2.51。 + +### 用户板测反馈(V4.36.16) + +- 上电未接线圈:期望黄绿双闪 → 接线圈自检黄绿双闪 → 自检完同灭;**实际黄灯全程没闪** +- 上电已接线圈:绿灯闪黄灯不闪 ✓ 通过 + +### 根因 + +断开分支置位条件 `if (g_loop_power_up_state && !g_disconnect_active)`—— +**上电 phase(power_up=0,判稳未完成)故意不置 disconnect_active**(断开计数不记上电前)。 +V4.36.16 把黄灯模式1 的 `!power_up` 兜底去掉后,上电无线圈黄灯失去触发源。 + +### 改动 + +黄灯模式1 条件 → **`!loop1_LOOP_OK || g_reconn_stab`**(ISR 5ms 实时读载波状态): +- 上电无线圈 LOOP_OK=0 → 快闪 ✓(需求1 黄绿双闪恢复) +- 上电有线圈/判稳中 LOOP_OK=1 → 不闪 ✓(需求2 保持) +- 接线圈 LOOP_OK=1 → 黄灯灭 ≤ 绿灯判稳时长 ✓ +- 运行中断开:载波缺失 5ms 即闪(原依赖 loop_task 150ms 置位 → 黄灯反应加快) +- 运行中重连判稳 g_reconn_stab → 闪(需求3 不变) + +### 验证 + +- 语法 0 error;4 组单测全 PASS +- 待板级复测:上电无线圈应黄绿双闪;插线圈黄灯即停绿灯慢闪;有线圈上电黄灯全程不闪 + ## 2026-09-03 — 上电自检与线圈重连灯语义分离(固件 V4.36.16) > **固件版本:V4.36.16**(cmcng.h:FIRMWARE_VER="4.36.16",REV=16)。devlog 修订 V2.50。 @@ -1854,6 +1883,7 @@ if (dev >= dlt_ORG × 4) { | 版本 | 时间 | 说明 | |------|------|------| +| V2.51 | 2026-09-03 | V4.36.17 修复上电无线圈黄灯不闪: 黄灯模式1 改 !LOOP_OK(5ms 实时) | | V2.50 | 2026-09-03 | V4.36.16 上电自检与重连灯语义分离: 黄灯去!power_up, 判稳门控限运行中(stable=1) | | V2.49 | 2026-09-03 | V4.36.15 重连判稳门控: 值稳定(600ms无漂移)+回带才放行, Origin 自动对齐, 强车8×dlt例外, 5s兜底 | | V2.48 | 2026-09-03 | V4.36.14 重连确认窗漏网路径修复: 主循环拍级上升沿检测替代 ISR LOOP_OK0 | diff --git a/docs/technical-spec.md b/docs/technical-spec.md index ba2d242..39ca8a0 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -1,6 +1,6 @@ # DLD154V4B 技术规格书 -> 单路线圈车辆检测器 | 固件版本: V4.36.16 | 文档版本: V2.32 +> 单路线圈车辆检测器 | 固件版本: V4.36.17 | 文档版本: V2.33 > 本文档面向工程开发、系统集成及故障深度分析 --- @@ -798,3 +798,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的 | V2.30 | 2026-09-03 | **V4.36.14 重连确认窗漏网路径修复**:主循环拍级自身上升沿检测(g_prev_ok)替代 ISR LOOP_OK0——插头抖动致 LOOP_OK0 卡 1 时恢复不再漏触发确认窗(现场 21µH 无窗直接 Car_In 复现);LO 抑制窗仍 1500ms(用户临时 3000 未入库) | | V2.31 | 2026-09-03 | **V4.36.15 重连判稳门控**:无车断开重连后值稳定才放行动作——200ms 步进漂移≤dlt/2 连续 600ms + dev 回带(≤dlt) → Origin 对齐当前空场(消新旧基线差);不稳黄灯续闪;强车 8×dlt 例外即时放行;5s 兜底。低Q 窗末假车(21µH 蠕变 ~2.2s > 固定窗)根治 | | V2.32 | 2026-09-03 | **V4.36.16 上电自检与重连灯语义分离**:黄灯模式1 去 !power_up(上电有线圈黄灯不闪,自检归绿灯慢闪);无线圈由 disconnect_active 覆盖仍双闪;判稳门控触发加 g_loop_stable(上电/安全复位不判稳);运行中重连仍黄灯接管 | +| V2.33 | 2026-09-03 | **V4.36.17 修复上电无线圈黄灯不闪**:断开分支置位条件含 power_up(上电 phase 故意不置 disconnect_active),V4.36.16 去 !power_up 后裸奔 → 黄灯模式1 改 `!LOOP_OK || g_reconn_stab`(5ms 实时载波缺失判定,同时让运行中断开黄灯反应从 150ms 加快到 5ms) | diff --git a/utilities/at32f421_freertos_demo/inc/cmcng.h b/utilities/at32f421_freertos_demo/inc/cmcng.h index 6c28fc9..d0dbfc7 100644 --- a/utilities/at32f421_freertos_demo/inc/cmcng.h +++ b/utilities/at32f421_freertos_demo/inc/cmcng.h @@ -14,11 +14,11 @@ #define __CMCNG_H__ #define PRODUCT_MODEL "DLD154" -#define FIRMWARE_VER "4.36.16" // ..޶ (2026-09-03 : СĶֻ REV; MAIN/SUB ɲƷ) +#define FIRMWARE_VER "4.36.17" // ..޶ (2026-09-03 : СĶֻ REV; MAIN/SUB ɲƷ) #define HARDWARE_VER "3.00" #define FIRMWARE_VER_MAIN 4 #define FIRMWARE_VER_SUB 36 -#define FIRMWARE_VER_REV 16 +#define FIRMWARE_VER_REV 17 #define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_SUB 0 diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index 3d282aa..9f3f771 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -357,11 +357,12 @@ void poll_yellow_led(void) g_fault_tick++; - /*--- 模式1: 快闪 — V4.36.16 起仅"载波问题"接管 (上电自检不闪, 归绿灯): - * 运行中断开(disconnect_active) / 运行中重连判稳门控(reconn_stab) / 上电无线圈 - * (LOOP_OK=0 → loop_task 断开分支置 disconnect_active) - * 上电有线圈/判稳中: 黄灯不闪, 自检指示归绿灯慢闪 ---*/ - if (g_disconnect_active || g_reconn_stab) { + /*--- 模式1: 快闪 — 载波缺失/重连判稳接管 (V4.36.16/17): + * !loop1_LOOP_OK: 上电无线圈 + 运行中断开 (5ms 实时, 不等 loop_task 150ms 慢拍 + * 置 disconnect_active; 上电 phase power_up=0 时不置位, 由本条件兜底) + * g_reconn_stab: 运行中无车重连判稳门控 + * 上电有线圈/判稳中: LOOP_OK=1 → 黄灯不闪, 自检指示归绿灯慢闪 ---*/ + if (!loop1_LOOP_OK || g_reconn_stab) { if (g_fault_tick >= FLT_FAST_HALF) { g_fault_tick = 0; LED_YELLOW_GPIO->odt ^= LED_YELLOW_PIN; // toggle