From af95660c68bf1b8b10859e50d55b5e7459696cea Mon Sep 17 00:00:00 2001 From: wangfq Date: Tue, 25 Aug 2026 14:23:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960Loop):=20init=5Fvd=5Fsingle=20?= =?UTF-8?q?=E7=81=B5=E6=95=8F=E5=BA=A6=E4=BB=8E=E9=85=8D=E7=BD=AE=E8=AF=BB?= =?UTF-8?q?,=20=E4=B8=8D=E5=86=8D=E7=A1=AC=E7=BC=96=E7=A0=81=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现场日志: 配置 SENS=3/2/1/0, 检测全用 sens_in:36 (SENS=2 表值) 根因: main→para_store_init() 同步 loop_SensLevel=配置, 但任务启动后 INIT_VDs()→init_vd_single() 硬编码 loop_SensLevel=2 覆盖配置 → 全通道 SENS=2 修复: init_vd_single 改为 sens_level_from_config( g_loop_cng_info.loop_cng[unit->loop_num].sensitvity) 另: flash 灵敏度表 sens[0]={512,400} 为坏数据(出厂应为{216,108}), 修复后 loop_3(SENS=0) 会撞上异常值, 需恢复出厂清配置区 --- vd960Loop/docs/devlog.md | 14 ++++++++++++++ .../at32f421_freertos_demo/src/TaskLoop.c | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/vd960Loop/docs/devlog.md b/vd960Loop/docs/devlog.md index 825478f..864783f 100644 --- a/vd960Loop/docs/devlog.md +++ b/vd960Loop/docs/devlog.md @@ -39,6 +39,20 @@ gcc 单测 PASS:0→0, 1→1, 2→2, 3→3 无折叠;`7&0x0F → 3` 兼容旧默认。实机待金属块复测(建议小金属块测临界感应高度)。 +### 补充根因(同日):INIT_VDs 硬编码覆盖配置 + flash 坏数据 + +现场串口日志(`Read_Cng_Store`)显示:配置 4 通道 SENS=3/2/1/0,但检测时 `Car_In` 全部打印 `sens_in:36`(SENS=2 表值)——4 通道检测全用 SENS=2。定位两个根因: + +**① `init_vd_single()` 硬编码 `loop_SensLevel = 2`(TaskLoop.c:111)** + +时序:`main → para_store_init()`(同步 loop_SensLevel=配置)→ 任务启动 → `INIT_VDs()` → `init_vd_single()` **把 loop_SensLevel 重置为 2**,覆盖配置值 → 全通道 SENS=2。 + +修复:`init_vd_single` 改为从配置读——`sens_level_from_config(g_loop_cng_info.loop_cng[unit->loop_num].sensitvity)`(unit->loop_num 由 INIT_VDs 先设置)。 + +**② flash 灵敏度表 sens[0]={512,400} 坏数据** + +解析 `Read_Cng_Store` flash 数据(0x40 起小端 2B):`{512,400},{108,72},{36,18},{10,9}`——出厂默认应为 `{216,108},...`,sens[0] 被写成 512/400(非正常值)。修复 ① 后 loop_3(SENS=0)会撞上 512 → dlt≈281 异常灵敏。**需恢复出厂(test_factory/清配置区)重新写入出厂表。** + --- ## 2026-08-25 — variation ↔ ΔL/ΔL-L 物理对应分析与工具 diff --git a/vd960Loop/utilities/at32f421_freertos_demo/src/TaskLoop.c b/vd960Loop/utilities/at32f421_freertos_demo/src/TaskLoop.c index 77f5a2a..09f28c7 100644 --- a/vd960Loop/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/vd960Loop/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -108,7 +108,8 @@ void init_vd_single(Loop154_Unit *unit) unit->loop_CAP_OK = 0; unit->loop_CAPVD = 0; - unit->loop_SensLevel = 2; // 默认中灵敏度 + unit->loop_SensLevel = sens_level_from_config( + g_loop_cng_info.loop_cng[unit->loop_num].sensitvity); // 从配置读, 不再硬编码 2 (修复: INIT_VDs 覆盖配置值) unit->Flt_Reg = ALFA_CAP1; unit->loop_entry_cnt = 0;