feat(V4B): V4.26 — 线圈电感量告警(一长一短) + 故障补偿 60s→10s (4点拍板)

1. 默认低频档频率合理窗 20~120kHz, 出界即告警(不做档位判定/灰带):
   TaskLoop.c 新增 coil_monitor() — 稳定+无车空闲由无车主路径调用,
   Origin 反推空场 f, f<20kHz→L偏大/f>120kHz→L偏小, 1s 防抖置位/清除
2. 告警形式: 黄灯"一长一短" 200ms亮/100ms灭/100ms亮/800ms灭 循环 (模式5)
3. 黄灯优先级: 断开快闪 > 故障补偿(学习)常亮 > 电感量一长一短 > N短闪 > 灭
4. 故障补偿等待 ENV_RESYNC_WAIT 6000→1000 (60s→10s): 总补偿 ~66s→~21s

验证: tests/test_coil_range.c 5场景(边界19/20/120/121+防抖) ALL PASS;
      test_env_resync.c 适配10s(applied_at=1600tick) 5场景 ALL PASS; 语法 0 error
文档: devlog V2.24/spec V2.5/manual V2.9/design doc v0.3(标记已实现)
修复: 源文件行尾多CR污染(\\r\\r\\r\\r\\n)统一规范化回标准CRLF
This commit is contained in:
wangfq
2026-09-03 10:50:26 +08:00
parent 433b7f472d
commit 92f675e2d3
9 changed files with 465 additions and 228 deletions
+5 -3
View File
@@ -1,7 +1,7 @@
# 线圈电感量估算与不合理范围告警 — 设计讨论稿
> **状态:设计讨论稿(未实现)** — 本文仅存档讨论结论,代码未落地
> 固件版本基线:V4.25cmcng.h);涉及产品:DLD154V4BDLD154V4)。
> **状态:已实现(V4.262026-09-03)** — 本文为设计讨论与实现归档;落地代码见 TaskLoop.c coil_monitor()vd1_task 无车主路径调用)与 poll_yellow_led() 模式 5
> 固件版本基线:V4.26cmcng.h);涉及产品:DLD154V4BDLD154V4)。
**修订记录:**
@@ -9,6 +9,7 @@
|------|------|------|
| v0.1 | 2026-09-02 | 初稿(合理范围按 50~300 µH,三区制) |
| v0.2 | 2026-09-03 | 合理范围改 **50 ~ 1000 µH(规格书口径,两档任意一档合法即不告警)**,三区窗口重算 |
| v0.3 | 2026-09-03 | **用户 4 点拍板收口(取代 v0.2 三区/灰带)**:默认低频档频率窗 **20~120 kHz** 出界即告警;黄灯**一长一短**;优先级 1 断开快闪 > 4 故障补偿常亮 > 5 电感一长一短 > 3 N短亮 > 2 灭;故障补偿 ENV_RESYNC_WAIT **60s→10s**。已实现于 V4.26672f143 后) |
## 1. 背景
@@ -17,7 +18,8 @@ DLD154V4 线圈振荡电路:固定电容 **33 nF** + 拨码开关可并联另
需求(用户最终口径):
1. 由实测振荡频率推算线圈电感量 L(粗略值即可)
2. 对不合理电感量范围的线圈告警**两档任意 L ∈ [50, 1000] µH 合法**(规格书范围),超出才告警
2. 对不合理电感量范围的线圈告警**v0.3 拍板,取代 §4 三区制**):按默认低频档计算,频率合理范围
**20 ~ 120 kHz,不在合理范围内一律判定电感量不合理 → 告警**(不做档位判定、不做灰带提示)
3. 预留 C_eff 校准公式/系数,测试时微调
4. 持续监视
+40
View File
@@ -4,6 +4,45 @@
---
## 2026-09-03 — 线圈电感量告警 + 故障补偿提速(固件 V4.26)
> **固件版本:V4.26**cmcng.hFIRMWARE_VER="4.26" + MAIN=4/SUB=26)。devlog 修订 V2.24。
### 背景
DLD154V4 线圈振荡两级频率(33/66nF 拨码,拨码不引 IO)。现场抓到 f=16.3kHz(Xn=3681) 超范围
线圈(L≈1.44mH@66nF),检测异常难排查 → 要求对不合理电感量自动告警。
另:环境重校准(V4.24/25)补偿总时长 ~66s 偏长 → 拍板提速。
### 拍板规格(2026-09-03
1. 按默认低频档计算,频率合理范围 **20 ~ 120 kHz**,出界即判定电感量不合理 → 告警(不做档位判定/灰带)
2. 告警形式:黄灯**一长一短**(长亮200ms/灭100ms/短亮100ms/灭800ms 循环)
3. 黄灯优先级:线圈断开快闪 > 故障补偿(学习补偿)常亮 > 电感量不合理一长一短 > 线圈断开 N 短亮 > 灭
4. 故障补偿黄灯常亮(等待学习)时间 **60s → 10s**ENV_RESYNC_WAIT 6000→1000
### 改动
- TaskLoop.c:新增 coil_monitor()(稳定+无车空闲由无车主路径调用;Origin 反推空场 f;
f<20kHz→L偏大 / f>120kHz→L偏小,1s 防抖置位/清除;EVT|coil_fault/coil_ok
- poll_yellow_led():新增模式5(一长一短 40/20/20/160 tick);优先级 1>4>5>3>2
- ENV_RESYNC_WAIT 6000→10005s 预判 → 10s 学习 → ~16s 替换 → 空闲 5s 确认灭,总 ~21s)
- TaskLoop.hCOIL_F_OK_MIN_KHZ=20 / COIL_F_OK_MAX_KHZ=120 / COIL_DEF_C_NF=66
- 行尾修复:V4.24~25 编辑期间源文件行尾被写成多 CR(\r\r\r\r\n),本次统一规范化回标准 CRLF
### 验证
- tests/test_coil_range.c 5 场景:L偏大/偏小 1s 防抖置位、恢复 1s 防抖清除、边界 19/20/120/121、抖动不误报 ALL PASS
- tests/test_env_resync.cENV_RESYNC_WAIT=1000):永久变化 applied_at=1600tick、瞬态<10s 不学、
锁存保持、打断重算、放弃不污染 ALL PASS
- gcc -fsyntax-only 0 error
### 待现场验证
- 超范围线圈(如 f=16.3kHz)应黄灯一长一短;正常 100~300µH 线圈(f 20~120k 内)不误报
- 故障补偿总时长 ~21s;环境高位 10s 即学(铁块静止 >10s 会被学入,黄灯常亮提示请勿移动目标)
- 电感告警阈值边界用标定线圈(100µH/300µH)实测微调
## 2026-09-02 — 环境异常黄灯预判:5s 常亮提示将进入重学(固件 V4.25)
> **固件版本:V4.25**cmcng.hFIRMWARE_VER="4.25" + MAIN=4/SUB=25)。devlog 修订 V2.23。
@@ -1065,6 +1104,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.24 | 2026-09-03 | V4.26 线圈电感量告警(频率窗 20~120kHz 一长一短)+ 故障补偿 60s→10s;行尾规范化 CRLF |
| V2.23 | 2026-09-02 | V4.25 环境异常黄灯预判(锁存):dev>+4dlt 高位连续 5s 触发 g_env_warn 锁存常亮;回摆/目标靠近保持,环境空闲稳定 5s(ENV_RECOVER_WAIT)才解除;60s 才真正学习 |
| V2.20 | 2026-09-02 | V4.22 DEBUG 改编译器 -DDEBUG 控制(cmcng.h DEBUG_ENABLE 删除) |
| V2.19 | 2026-09-02 | V4.20 负variation铁块锁死修复:基线跟踪双向对称保护(±4×dlt 对称窗口) |
+6 -4
View File
@@ -1,6 +1,6 @@
# DLD154V4B 产品手册
> 单路线圈车辆检测器 | 型号: DLD154V4B | 版本: V2.8
> 单路线圈车辆检测器 | 型号: DLD154V4B | 版本: V2.9
> 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测
---
@@ -177,6 +177,7 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈
| 故障类型 | 红灯 | 绿灯 | 黄灯 | 说明 |
|---------|------|------|------|------|
| 线圈断开(当前) | 呼吸 | 灭 | **快闪** (200ms) | 检查线圈连接 |
| 线圈电感量不合理(V4.26) | 呼吸 | 灭(无车) | **一长一短** (200ms亮/100ms灭/100ms亮/800ms灭 循环) | 空场频率出 20~120kHz(默认低频档):L偏大(f<20k)/L偏小(f>120k),检查线圈匝数/尺寸 |
| 线圈重连,断开 1 次 | 呼吸 | 正常 | **1 短闪** + 1.2s 灭 | 发生过 1 次断开,已恢复 |
| 线圈重连,断开 2 次 | 呼吸 | 正常 | **2 短闪** + 1.2s 灭 | 发生过 2 次断开,已恢复 |
| 线圈重连,断开 3+ 次 | 呼吸 | 正常 | **3 短闪** + 1.2s 灭 | 多次断开,建议检查接头 |
@@ -185,14 +186,15 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈
| 状态 | 红灯 | 绿灯 | 黄灯 | 说明 |
|------|------|------|------|------|
| 环境校准学习中 | 呼吸 | 灭(无车) | **常亮** | 检测到**永久环境变化**(如旁置金属板被移走使基准被学低):高位持续 **5 s** 黄灯预判**锁存**常亮,累计 **60 s** 后自动学习新基线并替换,恢复灵敏度 |
| 环境校准学习中 | 呼吸 | 灭(无车) | **常亮** | 检测到**永久环境变化**(如旁置金属板被移走使基准被学低):高位持续 **5 s** 黄灯预判**锁存**常亮,累计 **10 s**V4.26 起,原 60s后自动学习新基线并替换,恢复灵敏度 |
- 线圈旁金属等目标在**上电时**在场会把空车基准学低;目标移走后检测高度会明显变低(V4.22 及以前需断电重上电或等基线慢跟恢复)。V4.24 起自动恢复;V4.25 起环境变化 **~5 s** 黄灯即常亮预判(提示"检测器已感知环境变化")
- 线圈旁金属等目标在**上电时**在场会把空车基准学低;目标移走后检测高度会明显变低(V4.22 及以前需断电重上电或等基线慢跟恢复)。V4.24 起自动恢复;V4.25 起环境变化 **~5 s** 黄灯即常亮预判V4.26 起故障补偿提速:约 **5s 预判 → 10s 学习 → ~16s 替换 → 空闲 5s 恢复确认后灭(总 ~21s)**
- **黄灯常亮(锁存)= 环境异常预判/学习中**:一旦点亮,目标移走/回摆**不会立即灭灯**——需环境恢复正常(空闲)且稳定 **~5 s** 才解除。请勿在黄灯常亮期间移动线圈附近的金属目标(铁块静止 60 s+ 也会被学入)
- 黄灯优先级:断开快闪 > 环境预判/学习常亮 > N 短闪(断开史)> 灭
- 黄灯优先级V4.26:断开快闪 > 故障补偿(环境预判/学习常亮 > **线圈电感量不合理一长一短** > N 短闪(断开史)> 灭
- **快闪**200ms 亮 / 200ms 灭
- **N 短闪**N × (80ms 亮 + 200ms 灭),循环间隔 1.2s
- **一长一短**V4.26):200ms 亮 + 100ms 灭 + 100ms 亮 + 800ms 灭,循环(线圈电感量不合理)
- **呼吸**:PWM 渐变,系统运行指示(周期≈2.6sV4.23 起对齐 vd960Loop 观感)
- **绿灯慢闪(上电自检)**:200ms 亮/灭,持续至基准值稳定(连续窗口 Origin 漂移 ≤0.1%)才停止 (V4.23)
+27 -17
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.25 | 文档版本: V2.4
> 单路线圈车辆检测器 | 固件版本: V4.26 | 文档版本: V2.5
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -364,7 +364,7 @@ if (!VD_FLAG) {
| 4× 冻结阈值 | 防止异常 CAPVD 上升污染基线(V1.5) |
| 5% 斜率限幅 | 过滤 EMI/闪电尖峰,保护 IIRV2.0 |
| 冻结超时 + 稳定性检查 | 防止永久冻结死锁(V2.3~2.5) |
| 环境重校准(V4.24 | dev>+4×dlt 高位连续 60sENV_RESYNC_WAIT)→ 判定永久环境变化 → 学习基线 B(空闲窗均值+判稳,黄灯常亮)→ 原子替换 Origin;铁块类瞬态 60s 内仍只冻结不污染 |
| 环境重校准(V4.24/26 | dev>+4×dlt 高位连续 10sENV_RESYNC_WAITV4.26 由 60s 提速)→ 判定永久环境变化 → 学习基线 B(空闲窗均值+判稳,黄灯常亮)→ 原子替换 Origin;铁块类瞬态 10s 内仍只冻结不污染 |
#### 4.4.3 基线更新速率(两阶段)
@@ -451,9 +451,12 @@ if (dev < dlt_ORG * 4) {
| FREEZE_TIMEOUT | 1000 | **~10 s** | 基线冻结超时(连续稳定后更新 Origin) |
| ENV_WARN_WAIT | 500 tick | **~5 s** | 环境预判锁存(V4.25):dev>+4×dlt 高位连续 5s → 黄灯常亮预判(锁存) |
| ENV_RECOVER_WAIT | 500 tick | ~5 s | 恢复确认(V4.25):环境回正常空闲连续 5s 才解除预判锁存、黄灯灭(回摆/目标靠近保持常亮) |
| ENV_RESYNC_WAIT | 6000 tick | **~60 s** | 环境重校准等待:dev>+4×dlt 高位连续 60s 判定永久环境变化(V4.24 |
| ENV_RESYNC_WAIT | 1000 tick | **~10 s** | 环境重校准等待:dev>+4×dlt 高位连续 10s 判定永久环境变化(V4.26 拍板:60s→10s |
| ENV_LEARN_WINDOW | 200 tick | ~2 s | 环境学习窗口(基线 B 均值窗,学习期黄灯常亮) |
| ENV_LEARN_MAX_TICKS | 3000 tick | **~30 s** | 学习预算:窗口不稳超时放弃,保留旧 Origin(防死锁) |
| COIL_F_OK_MIN_KHZ | 20 kHz | — | 线圈频率合理窗下界(V4.26):默认低频档口径,f<20kHz → L偏大告警 |
| COIL_F_OK_MAX_KHZ | 120 kHz | — | 线圈频率合理窗上界(V4.26):f>120kHz → L偏小告警 |
| COIL_DEF_C_NF | 66 nF | — | 默认档电容(拨码不可读,粗估 L 打印用;33nF 档结果 ×2) |
> **M4 优化**V2.0 将 tick 从 50ms (TMR15 5ms×10) 提升到 10ms (vTaskDelay 10ms)。IIR 系数同步调整(α 从 79/256→18/256),保持等效时间常数。进入确认 3×10ms + 500ms IN_DELAY = ~530ms,比旧设计 (50ms + 500ms = 550ms) 略快。基线更新从 5s 加速到 1s。
@@ -498,23 +501,28 @@ void poll_green_led(void) {
### 6.3 黄灯行为表
| 条件 | 行为 | 参数 | 诊断含义 |
|------|------|------|---------|
| `g_disconnect_active == 1` | **快闪** | 200ms 亮 / 200ms 灭 | 线圈当前断开中 |
| `!g_loop_power_up_state` | **快闪** | 200ms 亮 / 200ms 灭 | 上电后从未连接线圈 |
| `g_disconnect_count == 1` | **1 短闪** | 80ms 亮 / 200ms 灭 → 1.2s 灭(循环 | 断开 1 次,已恢复 |
| `g_disconnect_count == 2` | **2 短闪** | 同上 | 断开 2 次 |
| `g_disconnect_count >= 3` | **3 短闪** | 同上 | 断开 3+ 次 |
| 正常 | **** | | 一切正常 |
| 优先级 | 条件 | 行为 | 参数 | 诊断含义 |
|--------|------|------|------|---------|
| 1 | `g_disconnect_active == 1``!g_loop_power_up_state` | **快闪** | 200ms 亮 / 200ms 灭 | 线圈当前断开中 / 从无线圈上电 |
| 4 | `g_env_warn``g_env_resync` | **常亮** | — | 环境异常预判/重校准学习(V4.24/25;故障补偿 ~10 s 内完成) |
| 5 | `g_coil_fault`V4.26 | **一长一短** | 长亮 200ms / 灭 100ms / 短亮 100ms / 灭 800ms 循环 | 电感量不合理:1=L偏大(f<20kHz) 2=L偏小(f>120kHz) |
| 3 | `g_disconnect_count == 1` | **1 短闪** | 80ms 亮 / 200ms 灭 → 1.2s 灭(循环) | 断开 1,已恢复 |
| 3 | `g_disconnect_count == 2` | **2 短闪** | 同上 | 断开 2 次 |
| 3 | `g_disconnect_count >= 3` | **3 短闪** | 同上 | 断开 3+ 次 |
| 2 | 正常 | **灭** | — | 一切正常 |
```c
void poll_yellow_led(void) {
void poll_yellow_led(void) { // 优先级 1 > 4 > 5 > 3 > 2 (V4.26)
if (g_disconnect_active || !g_loop_power_up_state)
fast_blink_200ms(); // 断开中快闪
fast_blink_200ms(); // 断开中快闪
else if (g_env_warn || g_env_resync)
led_on(); // ④ 环境预判/学习中常亮 (V4.24/25)
else if (g_coil_fault)
long_short_blink(); // ⑤ 电感量不合理: 一长一短 (V4.26)
else if (g_disconnect_count > 0)
n_short_flash(g_disconnect_count); // N 短闪编码
n_short_flash(g_disconnect_count); // N 短闪编码
else
led_off(); // 正常
led_off(); // 正常
}
```
@@ -617,14 +625,15 @@ if (!g_loop_stable) {
|--------|---------|---------|
| 线圈断开 | `loop1_RF_FLAG == 0` 持续 | 黄灯快闪 / 继电器释放 |
| 线圈短路 | Xn 持续为 0 或极小 | 黄灯快闪 / 继电器释放 |
| 频率过低 | Value 持续 < MIN_FREQ | 黄灯编码闪烁 |
| 频率过高 | Value 持续 > MAX_FREQ | 黄灯编码闪烁 |
| 电感量不合理(L偏大) | 空场 f 持续 < 20 kHz(默认低频档,V4.26 | 黄灯**一长一短**g_coil_fault=1/ 持续监视 1s 防抖 |
| 电感量不合理(L偏小) | 空场 f 持续 > 120 kHz | 黄灯**一长一短**g_coil_fault=2/ 持续监视 1s 防抖 |
### 10.2 黄灯编码设计
断开次数编码提供了比 TLD-110 的均匀闪烁更丰富的诊断信息:
- **快闪=当前故障** → 现场立即处理
- **N短闪=历史故障** → 判断是偶发还是持续问题
- **一长一短=线圈电感量不合理**V4.26):空场频率出 20~120kHz 窗(默认低频档);用标定线圈实测后微调阈值
---
@@ -760,3 +769,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.2 | 2026-09-02 | 更新至 V4.23:上电稳定期判稳语义(基准漂移≤0.1%×2窗 + 5s兜底)、红灯呼吸周期≈2.6s、绿灯自检描述 |
| V2.3 | 2026-09-02 | 更新至 V4.24:环境重校准(dev>+4dlt 高位连续 60s → 学习基线 B → 空闲原子替换 Origin,黄灯常亮指示;瞬态 60s 内不污染、30s 学习预算兜底) |
| V2.4 | 2026-09-02 | 更新至 V4.25:环境异常黄灯预判锁存(ENV_WARN_WAIT=5s 触发;回摆保持,ENV_RECOVER_WAIT 空闲 5s 才解除);预判≠学习 |
| V2.5 | 2026-09-03 | 更新至 V4.26:线圈电感量告警(频率窗 20~120kHz 单窗,黄灯一长一短);故障补偿 ENV_RESYNC_WAIT 60s→10s;黄灯优先级 1>4>5>3>2 |