Files
DLD154V4B/docs/coil-range-alarm-design.md
T

121 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 线圈电感量估算与不合理范围告警 — 设计讨论稿
> **状态:设计讨论稿(未实现,2026-09-02)** — 本文仅存档讨论结论,代码未落地。
> 固件版本基线:V4.25cmcng.h);涉及产品:DLD154V4BDLD154V4)。
## 1. 背景
DLD154V4 线圈振荡电路:固定电容 **33 nF** + 拨码开关可并联另一 **33 nF**C = 33 nF 或 66 nF 两级频率)。
拨码**不引到 MCU IO**,固件无法感知当前档位。
需求:
1. 由实测振荡频率推算线圈电感量 L(粗略值即可)
2. 对不合理电感量范围的线圈进行告警(判断合理范围 **50 ~ 300 µH**,用户给定)
3. 预留 C_eff 校准公式/系数,测试时微调
4. 持续监视
## 2. 物理模型与测量精度
LC 谐振:**f = 1 / (2π·√(L·C))**,反推 **L = 1 / (4π²·f²·C)**
- f 固件现成:`calc_freq_khz()`Xn@60MHz 捕获,f_kHz = 60000 / Xn),Xn≈3681 时测量精度 ~0.03%,足够
- 误差预算:C 容差 ±5% → L 误差 ~10%;线圈分布电容 C0(几十 pF vs 33000 pF)≈0.3% 可忽略;
谐振拓扑非理想偏移 → 待标定收口
- **档位歧义(核心)**:C = 33/66 nF → 同一线圈频率差 √2=1.414 倍,反推 L 差 **2 倍**
拨码不可读 → 单次测频无法唯一判定档位(见 §4 三区制)
## 3. 频率 ↔ 电感对照表
| L(µH) | C=33nF f(kHz) | C=66nF f(kHz) |
|-------|--------------|--------------|
| 20 | 195.9 | 138.5 |
| 50 | 123.9 | 87.6 |
| 100 | 87.6 | 62.0 |
| 150 | 71.5 | 50.6 |
| 300 | 50.6 | 35.8 |
| 500 | 39.2 | 27.7 |
| 1000 | 27.7 | 19.6 |
| 1440* | 23.1 | 16.3 |
\* 现场实测 Xn=3681 → f=16.3kHz → L≈1445µH(66nF)/2889µH(33nF),无论哪档都超 300µH →
该线圈应被"L 偏大"告警拦下(V4.24/V4.25 抓波形期间发现的现象)
**换算公式(默认档粗估)**L_µH = 2.533e7 / (f_kHz² × C_nF)33nF 档结果 = 66nF 档结果 × 2
**C_eff 校准预留**L_µH = (2.533e9 / (f_kHz² × C_nF)) × COIL_CAL_COEF_Q10 / 1024
标定线圈(100µH / 300µH 精密电感)实测 f 后调单一系数收口。
## 4. 判定窗口 — 三区制(2026-09-02 讨论修订)
初稿使用"两档并集 [35.8, 123.9] kHz 为绿",用户指出应关注**交集 [50.6, 87.6] kHz**。
讨论结论:L 是线圈固有属性(f 随档位变),档位不可读时并集(可能漏报超范围线圈)
与交集(会误报合法线圈,如 66nF+200µH=43.8kHz、33nF+80µH=98kHz 均为手册推荐组合)
都是二值判据,无法消除两档交叠歧义 → **采用三区制**
| 区 | 频率 (kHz) | 语义 | 动作 |
|----|-----------|------|------|
| 🟢 确认正常 | 50.6 ~ 87.6(两档频带交集) | 两档下 L 均 ∈ [50,300] µH | 绿灯 |
| 🟡 歧义带 | 35.8~50.6 或 87.6~123.9(单档合法区) | 某一档合法/另一档超,无档位信息无法确认 | 不上故障灯,仅 EVT/状态字段提示 |
| 🔴 确认超范围 | < 35.8 或 > 123.9(并集外) | 两档下 L 必超(<35.8 → >300µH>123.9 → <50µH | 黄灯慢闪告警 |
- 🔴 区无歧义:<35.8 必然是 66nF 档 + L>300µH>123.9 必然是 33nF 档 + L<50µH
- 🟡 区若上灯会误伤合法现场(如 66nF 档 + 200µH → f=43.8kHz),建议静默到诊断层,产品手册注明"该频段请核对拨码档位"
### 建议宏(TaskLoop.h,待标定)
```c
#define COIL_F_LOW_LIMIT 358 // f < 35.8kHz → L 必 >300µH → L偏大 (0.1kHz 单位)
#define COIL_F_HIGH_LIMIT 1239 // f > 123.9kHz → L 必 <50µH → L偏小 (0.1kHz 单位)
#define COIL_F_GREEN_LOW 506 // 绿窗下界 50.6kHz (交集)
#define COIL_F_GREEN_HIGH 876 // 绿窗上界 87.6kHz (交集)
#define COIL_DEF_C_NF 66 // 默认档电容 nF (拨码不可读, 粗估 L 用; 33nF 档 ×2)
#define COIL_CAL_COEF_Q10 1024 // C_eff 校准系数 Q10 (=1.000), 标定后微调
```
## 5. 判定状态机(持续监视 + 防抖)
```
条件: !g_disconnect_active && g_loop_stable && !loop1_VD_FLAG (空闲/稳定, 车来不判)
f = calc_freq_khz(loop1_Origin, loop1_LPCNT) (空场滤波后频率)
f < COIL_F_LOW_LIMIT → 故障 1 = L 偏大
f > COIL_F_HIGH_LIMIT → 故障 2 = L 偏小
COIL_F_GREEN_LOW..HIGH → 正常
其余 (歧义带) → 状态位提示 (不上灯)
防抖: 越界持续 100tick(1s) 置位; 恢复持续 100tick 清除
监视点: vd1_task 无车段末尾 (Origin 更新后)
```
## 6. 黄灯模式 5(方案草案)
| 模式 | 状态 | 指示 |
|------|------|------|
| 1 | 断开/无线圈 | 快闪 200ms |
| 5(新增) | 线圈电感异常(L 偏大/偏小) | 慢闪 500ms/500ms1Hz |
| 4 | 环境预判/学习中 | 常亮 |
| 3 | 断开史 N 短闪 | — |
| 2 | 正常 | 灭 |
优先级:断开(1) > 电感异常(5) > 环境(4) > N短闪(3) > 灭
自检段(STBL=0)不判,防上电抖动。红绿指示不受影响。
## 7. 诊断输出(草案)
```
EVT|coil_fault f:16.3kHz L~1445uH(C66/×2C33) too_large // 进入告警
EVT|coil_ok f:62.1kHz L~100uH // 恢复
```
## 8. 单测计划
`tests/test_coil_range.c`:窗口边界换算(表驱动)/ 越界告警与恢复防抖 /
车压不误判(VD=1 不判)/ 两档歧义粗估(L66 与 ×2)。
## 9. 待确认项(未定)
1. 黄灯模式 5 慢闪 1Hz 节奏是否采纳(或"常亮+1 短灭"
2. 默认档 `COIL_DEF_C_NF`:66nF(出厂并联 ON)?现场是否有普遍拨 33nF 的情况
3. 灰带(歧义带)处理:推荐不上灯仅诊断日志,若产品要求提示再议(EVT/状态位 1 级)
4. 绿/红四阈值需标定线圈实测后微调