wangfq 5fd58e035a fix(V4B): V4.36.41 — 环境重校准后触发高度变低根治 (基准/派生参考同步 + EMA 余数累加)
用户反馈: 黄灯常亮故障补偿后, 金属板进入触发的高度比断电上电后低很多, 补偿结束也恢复不了正常灵敏度。

根因(两处, 均可复核): V4B 进入判定用 vac_ref()=min(Origin, 真空EMA) 而非 Origin (TaskLoop.c:1432)
 ① env_resync_apply() 只原子换 loop1_Origin, 没同步 g_vacuum_ema。补偿前提是 dev>+4×dlt 连续 7s,
    学到的 B≈当前 CAPVD ⇒ Δ≥4×dlt 必然 ⇒ Origin−EMA=Δ>1×dlt ⇒ vac_ref 必然切旧 EMA ⇒ 进入线整整低 Δ
 ② g_vacuum_ema += _ema_d/128 为整数除法, |d|<128 时步进恒 0 ⇒ EMA 粘在真空下方 ≤127 counts
    (2.59×dlt > 1×dlt 门槛) ⇒ 进入线常驻偏低 ≈0.100% Δf/f 且不自愈; 断电上电 EMA=Origin(偏差 0) 故持久正常

修复:
 - 新增 origin_set_atomic() (TaskLoop.c:308): "一步换 Origin"时 |ΔOrigin| > ORIGIN_JUMP_REANCH_DLT(=1)×dlt
   则同步重锚 g_vacuum_ema; 与 VAC_REF_DELTA_DLT 同口径 ⇒ 维持 |Origin−EMA| ≤ 1×dlt 不变式; 小步不动 EMA
 - 3 处 Origin 写入点改经它: env_resync_apply(:968) / 重连判稳完成(:1207) / 冻结超时更新(:1372)
 - EMA 更新改余数累加器 g_vac_frac(:1344) 消 ±127 counts 死区; g_vac_frac 在 INIT(:583)/判稳(:1266) 清零

单测(新增 tests/test_vac_ref_reanchor.c, 5 场景; gcc -O0 -Wall -Wextra 0 warning; 全套 8/8 全绿):
 补偿后进入线 130457(低 130 counts = 2.65×dlt = 0.100% Δf/f) → 130587(低 0); EMA 追赶偏差 127→0 counts

文档: devlog V2.78(+条目) / spec 文档头 V2.60 / manual 版本表 V2.17 / cmcng.h 4.36.40→4.36.41 (REV 41)
归档: docs/env-resync-trigger-line-analysis.md + docs/patches/v4.36.41-{A-B,D}*.diff

待现场(编译烧录后回填 devlog 条目): 4 项 [ ] + 2 处日志待填 (EVT|env_resync / DBG Origin·VEM·RLN)
2026-09-11 14:08:25 +08:00
2026-06-22 18:20:37 +08:00

DLD154V4B — 单路车检器

硬件规格

项目 说明
产品型号 DLD154V4B
主控 MCU AT32F421F8P7
内核 ARM Cortex-M4
主频 120 MHz
Flash 64 KB
SRAM 16 KB
线圈通道 1 路
调试接口 TTL 电平 Tx

IO 资源分配

拨码开关

引脚 标识 功能 说明
PA0 SA_1 灵敏度 bit0 与 SA_2 组合,4 级灵敏度
PA1 SA_2 灵敏度 bit1
PA2 SW_3 存在/脉冲 0=存在输出,1=脉冲输出
PA3 SW_4 离开延时 0=无, 1=500ms
PA4 SW_5 安全复位 0=正常,1=安全复位

继电器输出

引脚 标识 功能 说明
PA5 RLY2 继电器 2 方向/第二路输出
PA6 RLY1 继电器 1 存在/脉冲/主输出

线圈输入捕获

引脚 标识 外设 功能
PA7 LP TIM3_CH2 线圈频率输入捕获

指示灯

引脚 标识 颜色 功能
PB1 LEDA 红色 呼吸灯(系统运行指示)
PA9 LEDB 绿色 有车亮 / 无车灭
PA10 LEDC 黄色 故障指示

IO 汇总表

引脚 功能 方向 外设
PA0 SA_1 (灵敏度) IN GPIO
PA1 SA_2 (灵敏度) IN GPIO
PA2 SW_3 (存在/脉冲) IN GPIO
PA3 SW_4 (离开延时) IN GPIO
PA4 SW_5 (安全复位) IN GPIO
PA5 RLY2 (继电器2) OUT GPIO
PA6 RLY1 (继电器1) OUT GPIO
PA7 LP (线圈捕获) IN TIM3_CH2
PA9 LEDB (绿灯) OUT GPIO
PA10 LEDC (黄灯) OUT GPIO
PB1 LEDA (红灯) OUT TIM / GPIO

功能逻辑

拨码开关

SA_2 SA_1 灵敏度
0 0
0 1
1 0
1 1 最高
  • SW_3:0 = 存在输出(继电器保持),1 = 脉冲输出(继电器吸合后释放)
  • SW_4:0 = 无离开延时(直接输出脉冲),1 = 离开延时 500ms
  • SW_5:拨到 ON 触发安全复位(所有输出关闭,频率重新学习)

指示灯

状态 LEDA (红) LEDB (绿) LEDC (黄)
正常运行、无车 呼吸
有车 呼吸
线圈故障(断开/短路) 呼吸
安全复位中 快闪

继电器输出模式

存在输出(SW_3=0): 有车时 RLY1 吸合,无车释放。 脉冲输出(SW_3=1): 车辆进入时 RLY1 吸合 500ms 后释放。

目录结构

DLD154V4B/
├── src/          # 源代码
├── inc/          # 头文件
│   └── bsp_pins.h    # 引脚定义
├── lib/          # 库文件
│   ├── HAL/      # AT32F421 标准外设库
│   └── CMSIS/    # ARM CMSIS-Core
├── docs/         # 文档
└── tools/        # 辅助工具

开发环境

  • IDE: Keil MDK / AT32 IDE
  • 调试器: SWD (PA13/PA14)

文档

文档 说明
产品发布说明 V1.6 发布:特性、技术规格、版本历程
产品手册 面向用户:功能说明、安装指南、故障排查
技术规格书 面向工程:算法详解、IO 分配、电气参数、通信协议
开发日志 版本历史和设计决策记录
参考分析 M1H (STC12C5202) + TLD-110 (P87LPC762) 算法分析
S
Description
单路车检器 DLD154V4B — AT32F421F8P7, 1路线圈
Readme
2.1 MiB
Languages
C 99.6%
Assembly 0.4%