Files
vd-analysis/models/DLD154V4B/analysis.md
T
wangfq b40911d6a4 docs(models/DLD154V4B): §9 待验证 — 23µH 悬停临界跳变极限环(2026-09-09)
- 定位: 23µH@43nF → f≈160kHz → want=2 可用级 + 低Q档; 高灵敏度 dlt≈50 counts
- 机理(推断): vac_ref() 在 Origin/真空EMA 间切换(门槛1×dlt) → 阈值阶跃
  + 悬停时 EMA 落在 ±4dlt 更新窗内被跟随 → 进入/释放极限环(周期≈1~1.5s)
- 解释: 难复现(窗口50~200counts) / 远离10s恢复 / 断电消失 = 运行时自适应状态
- 验证清单 4 项 + 修复候选 4 项(倾向 ①EMA真空守卫 + ④最小保持300ms)
- 代码未改, 待现场验证
2026-09-09 18:42:47 +08:00

358 lines
25 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.
# DLD154V4B 车检器分析
> 型号: DLD154V4B | 固件: **V4.36.40**2026-09-09 刷新;此前快照 V4.29 / V2.8| 平台: **AT32F421F8P7**Cortex-M4, 120MHz, FreeRTOS
> 源码: `vd_detector/DLD154V4B/utilities/at32f421_freertos_demo/`TaskLoop.c **1797 行** + main.c 304 行)
> ⚠ **§9 = 待验证专题**(23µH 悬停临界跳变,2026-09-09,代码未改,机理待现场验证)
> 原理图: `models/DLD154V4B/DLD154V4_Ver4.01-20251021_Logic.pdf`(本仓附件,2026-09-03 由 Ver3.00 更新)
> 硬件变更: 见文末(2026-09-03R19 拆 + R27 补焊 0Ω 的实验板;**产品仍用三极管库存板 R19 在 / R27 空,C_eff=43nF**
> 硬件前端对比: `docs/hardware-loop-frontend-pd132t-vs-v4b.md`(直连 vs PD132T CD4060 分频)
> **血缘:M1H 的现代实现**——灵敏度表/映射/IIR 系数继承,M4 优化(快 tick/确认/斜率限幅)是 8051 时代做不到的增量。
## 1. 平台与工程
| 项 | 值 |
|----|-----|
| MCU | AT32F421F8P7Cortex-M4 @120MHz, 64KB Flash |
| RTOS | FreeRTOSloop_task_function 主任务) |
| 工具链 | Keil MDK / AT32 标准库 |
| 版本体系 | **4.36.x REV 修订号制**V2.35 引入):MAIN/SUB 产品定,小功能/参数/文档只 bump REV;启动打印 `fw:4.36.x main=4 sub=36 rev=x hw:3.00` |
| 看门狗 | **IWDT ≈1.64s**V2.10 新增,TMR15 ISR 5ms 递增 + 主循环 poll_wdg 500ms 双保险喂狗) |
| 通信 | 无 RS485TTL 调试口 9600 8N1DBG 周期 2s + EVT 事件) |
固件演进:V4.23 判稳/呼吸 → V4.24 环境重校准 → V4.25 黄灯预判锁存 →
V4.26 电感量监视+补偿提速 → V4.27 频率测量 4 倍修正 → V4.28/29 C_eff 标定 →
**V4.30~V4.36 低Q 释放/卡死治理链 + 电感分级产品化语义**(详见 §8)。
详细见 DLD154V4B 仓 `docs/devlog.md`V2.77)。
## 2. 硬件资源
| 引脚 | 功能 |
|------|------|
| PA7 | LP 线圈捕获(TIM3_CH2,输入 DIV_2 = 每 2 信号沿捕获一次;计数器 tick=120MHz |
| PA0 / PA1 | SA1 / SA2 灵敏度拨码 |
| PA2 | SW3 存在/脉冲模式 |
| PA3 | SW4 离开延时开关 |
| PA4 | SW5 安全复位 |
| PA5 / PA6 | **RLY2 默认输出(绿灯镜像此路)** / RLY1 拨码可选脉冲继电器 |
| PA9 / PA10 / PB1 | LEDA 绿 / LEDC 黄 / 红灯(TMR14 PWM 呼吸) |
振荡回路(原理图 Ver4.01):固定 33nF + 拨码经 **R27 0Ω**(实验板)/ **三极管电路 R19**(产品库存板)
接通第二颗 33nF → 两级频率(名义 66nF 低频 / 33nF 高频)。⚠ **固件无法读档位**(拨码不引 IO)。
**产品电容口径(重要)**:产品 = 三极管库存板(R19 在 / R27 空),低频档实测 **C_eff≈43nF**41.3~45.5V4.34 基准);
0Ω 实验板 C_eff≈68(仅机理验证,不用于产品计算)。高频档(33nF)实测 C_eff≈34.4。
## 3. 检测算法
### 3.1 频率测量
- TIM3_CH2 输入捕获(PA7):计数器 tick = **120MHz**sclkAPB1÷1),通道输入 **DIV_2**(每 2 信号沿捕获 1 次)
- ⚠ V4.27 修正(2026-09-03):旧实现 calc_freq 按 60MHz 假设且未补偿 DIV_2 → f 打印/估算低 4 倍(示波器 30.23kHz vs 打印 7kHz);修正后 **f_kHz = 240000×LPCNT/CAPVD(等效 240000/Xn**
- 归一化:`LPCNT = MEASUREMENT_BASE(131072) / Xn`**BASE=2^17**),累加 LPCNT 个周期得 Value ≈ 131072
- 测量窗 ≈ 131072/(120MHz tick) = **1.09 ms**Value=Σ Xn 计数,1 计数=1/120M s
-**强制断开期(fault3Xn/Value 仍由 TMR3 捕获 ISR 实时更新**,而 Origin 只在 vd1_task 更新(停摆即冻结)——V4.36.40 热切换修复的关键依据
### 3.2 滤波(M4 优化,区别于参考型号)
- IIR`ALFA_CAP1=79` @10ms**τ≈32ms**
- **斜率限幅**:单次变化 >5% 截断(拒绝 EMI/闪电尖峰)
- **进入/释放确认按 Q 档**V4.36.8Q∝1/f 代理):进入 ENTRY_CONFIRM 高Q(f≤80k)=3 / 中Q(80~100k)=4 / 低Q(f>100k)=5
释放 REL_CONFIRM 高3 / 中4 / 低5(低Q 抖动大,多样本防假进入/输出抖落)
- **低Q 释放平滑**V4.36.19/26):`REL_ALFA=30` @10ms → τ≈85ms,独立 IIR 仅用于低Q 释放判定(复刻打印降采样平均效应抗抖)
- 释放慢滤波 `RELEASE_ALFA=21` @10ms → τ≈117ms(对齐 PD132T α79@43.7ms
### 3.3 基线
- 正常:`WINDOW_ORIGIN=500` 滑动平均(500×10ms = **5s**),有车冻结
- 上电判稳(V4.23 重写):窗口 100 样本≈1s,窗口均值漂移 ≤ **0.1%**STABLE_ORIGIN_PPT=1)连续 2 窗 → `settle_cnt++`
判稳 =(≥128 样本 && ≥2 窗)|| ≥500 样本兜底(STABLE_MAX_SAMPLES=500, 5s);退出/重新初始化清零 → **杜绝二次稳定期 1 样本瞬判**
- **就绪巩固期 Q 分级**V4.36.36):判稳完成(Loop stable)后绿灯按 Q 档继续慢闪——
高Q **5s**READY_HOLD_HI=1000/ 中Q **7s**1400/ 低Q **10s**2000),5ms tick 递减。
目的:低Q 线圈上电自检完(绿灯灭)立刻压板易绿灯常亮,巩固期内 Origin/EMA/滤波真实多收敛 5~10s
- **冻结超时**`FREEZE_TIMEOUT=1000`(10s)+ ±2% 稳定性窗口,持续偏高且稳定才强制更新基线
- **环境重校准(V4.24/31,受控替换)**:`dev > +4×dlt` 高位判定为疑似环境变化后:
1. 黄灯预判锁存 `ENV_WARN_WAIT=200`(**2s**)→ 常亮;回摆/目标靠近**不灭**
2. 冻结等待 `ENV_RESYNC_WAIT=700`**7s**V4.31 拍板 预判2s+补偿7s+恢复2s;回摆清零)
3. 学习窗 200tick2s)空闲均值 ×3 + settle 语义(漂移 ≤0.1%),预算 `ENV_LEARN_MAX_TICKS=3000`30s)放弃
4. 空闲原子替换 Origin`env_resync_apply`+ 清冻结三件套;`ENV_RECOVER_WAIT=200`2s)空闲确认后解除预判
- **释放后 Origin 分级补偿**V4.36.26/32,仿 PD132T 慢采样等效):
释放后**全冻结 1s**`REL_ORIGIN_FREEZE_TICKS=100`)→ 残余缓离窗口不入均值窗;
之后 **降权 2s ×1/5**`ORIGIN_LOWLEARN_TICKS=200`,均值窗 500→2500 样本 / 25s 窗,`ORIGIN_LOWLEARN_MULT=5`
——切断"残余低值样本拉低 Origin → 释放线下降 → cycle 正反馈"
- **真空 EMA 重锚 B3**V4.36.31/33/35):`VACUUM_EMA_ALFA=128`(τ≈1.28s)跟踪无车真空;
判定参考 `vac_ref = min(Origin, EMA)`,但**仅当 OriginEMA > 1×dlt**`VAC_REF_DELTA_DLT=1`,真锚错)才用 EMA 锚低
——防金属板悬停感应边缘快速拉低 EMA 导致触发线漂移。
**V4.36.31 cast bugV4.36.35 治本)**`(uint32_t)(负差)/128 = +3355万/样本`C 语义:负转无符号爆炸);
修复 = 有符号先除 `g += (uint32_t)(_ema_d/128)`V4.36.34 的"偏差>25% 自愈重置"保留为最后防线
### 3.4 进入/离开
- 进入:`CAPVD < Origin dlt`(按 Q 档 3/4/5 次确认),`dlt = Origin×SensTable[SENS]>>16`
- 离开:**简单滞回 3 次防抖**(V2.9 起默认,`(Origindlt)<CAPVD``cnt_release≥3`);平坦性三条件(CN200910309382)代码保留在 `#if USE_FLATNESS_EXIT` 内,**默认禁用**(现场实测不理想,2026-08-28
- 离开阈值 `dlt_rel = Origin×SensTable_1[SENS]>>16`
- **低Q 环带超时兜底**(V4.36.30,时间回滞替代空间回滞):板停在触发-释放回滞带内不再永久卡死——
`CAPVD > 进入线` 持续 `REL_BAND_TIMEOUT_TICKS=250`**2.5s**)→ 强制释放
- 低Q 释放带回加宽(V4.36.28):`REL_BAND_LO_MULT=180`dlt_rel×1.823→41 counts@SENS3),回滞 = 4941 = 8 counts
### 3.5 灵敏度表
```
USE_PLANB_TABLE = 1 (方案BV4.06 定稿,实际编译)
SensTable[4] = {337, 71, 38, 25} // 进入(调深;V4.07 SENS=0 回调 357→337
SensTable_1[4] = { 51, 27, 18, 12} // 释放(调浅;等比 ×25/21 ×12/14
USE_PLANB_TABLE = 0 PD132T 完全对齐表,备选)
SensTable[4] = {300, 60, 32, 21} // V2.11:全档与 PD132T 一致
SensTable_1[4] = { 60, 32, 21, 14}
```
- `SENS = 3-(sw&0x03)`(拨码反码,与 M1H 一致);拨码去抖:连续 5 次一致才生效
- ⚠ V2.8SENS=3 最高档 10→20、9→14——现场广告杆落杆误触发(机械/电磁扰动越过 0.015% 阈值)
- ⚠ V2.11:全档对齐 PD132T(客户现场替换需求);V4.06 起方案B 现场调校(SENS=3 实测接近 PD132T
### 3.6 线圈电感量监视(V4.26 → V4.36.37 四分)
- 判据:**默认低频档口径,空场频率合理窗 18~125kHz**V4.36.9/18/25 收敛:20~120 → 18~125
- 条件:仅稳定 + 无车 + 未断开时判(无车主路径调用,Origin 反推空场 f;车压/自检不判);越界/恢复均 **5s 防抖**`COIL_FAULT_HOLD_TICKS=500`V4.36.21 自 1s 加长)
- **四分级语义**V4.36.25 三分 → V4.36.37 方案A 分级):
| f 区间 | 电感(43nF | fault | 黄灯 | 判定 |
|---|---|---|---|---|
| 18~125k | 38µH~1.15mH | 0 | 灭 | 正常 |
| f<18k | L 偏大 | 1 | 一长一短 | 照常 |
| 125~156k | 24~38µH | 1 | 一长一短 | 照常 |
| **156~171k** | **20~24µH** | **2** | **一长两短**V4.36.38 | **恒判车(不随宏)** |
| **f>171k** | **<20µH 短路级** | **3** | **快闪 200ms**(同真断开) | 宏=0 判车 / **宏=1 等同断开** |
- 宏与阈值:
- `COIL_L_MIN_UH=24``COIL_L_MIN_F_KHZ=156`f@24µH=156.7k
- `COIL_L_SHORT_UH=20``COIL_L_SHORT_F_KHZ=171`f@20µH=171.6kV4.36.37 新增)
- `COIL_UNDER_MIN_AS_OPEN`**默认 1**(V4.36.39 用户拍板出厂态)——短路级=完全断开态(判定暂停 + 继电器保持释放 + 绿灯灭 + 黄灯快闪 + 专职恢复监测);`0` 保留"仅快闪提示、判定照常"
- 诊断:`EVT|coil_fault f:xx kHz L~xxx uH ...``EVT|coil_ok ...`
- **L 估算**V4.28/29/34):`L_uH = 2.533e7/(f_kHz² × COIL_CAL_C_NF)`,产品宏 **43**(三极管库存板;0Ω 板 68 仅实验)
- **热切换恢复(V4.36.40 修复)**:短路级强制断开期 vd1_task 停摆 → Origin/LPCNT 冻结 → 旧 recover 用冻结值判 f 永远 >171k → **换正常线圈也不恢复(只能断电)**
修复:recover 改用 **TMR3 捕获 ISR 实时 Xn**`f=240000/Xn`)判回窗,连续 5s → 实时置档 → ISR 停压 LOOP_OK → 主循环上升沿自动发起重连确认(100ms)→ 无车判稳门控 → **Origin 判稳重建** → 正常线圈 fault 归 0。**换线圈不断电约 6s 自愈**
### 3.7 指示逻辑
- **红灯**TMR14 PWM 呼吸(PB1,暗→暗 2520ms60ms/步)
- **绿灯**= **RLY2PA5odt 镜像**(吸合亮/释放灭,V4.36.10 由 RLY1 改默认继电器);
自检/判稳/就绪巩固期慢闪(`!LOOP_OK || g_reconn_stab || fault==3 || !stable || ready_hold>0`
- **黄灯优先级链**V4.36.38 现行,1>4>2>1'>3>灭):
1. 快闪 200ms`!LOOP_OK`(断开/从未接)或 `g_reconn_stab`(重连判稳中)或 **fault==3 短路级**
2. 常亮:环境异常预判/重校准学习(`g_env_warn/g_env_resync` 锁存)
3. **一长两短**900/300/100/300/100/700ms6 相):fault==2 可用级(20~24µH
4. 一长一短(900/300/100/700ms4 相):fault==1 出窗(L 偏大 / 24~38µH
5. N 短闪(80ms 亮/200ms 灭 ×N≤31.2s 间隔):断开史
6.
- 现场判读口诀:**一长两短=偏低但能用(照常判车);一长一短=出窗仍可用;快闪=真断开或 <20µH 短路级**
## 4. 时序/速率/周期速查(2026-09-09 V4.36.40 刷新)
> V4B 是**混合节拍**架构,与所有参考型号的单节拍不同:
| 量 | 值 | 说明 |
|----|-----|------|
| 检测主循环 | **10 ms** | FreeRTOS vTaskDelay(10)vd1_task 由 CAP_OK 门控 |
| 测量窗 | 1.09 ms | 131072/120MHzCAPVD 原始值节拍) |
| **CAPVD 更新节拍** | **10 ms** | IIR 消费节拍(vd1_task 在 10ms 循环跑) |
| **基线更新周期** | **5 s**500 窗) | 稳定期 ~1.3s 判稳(128 样本 + 2 窗漂移 ≤0.1% |
| IIR 时间常数 τ | **32 ms** | 10ms × 256/79(低Q 释放平滑另用 REL_ALFA=30 → τ≈85ms |
| 时序状态机 tick | **50 ms** | TMR15 ISR 5ms×10(进入/离开/脉冲/超时) |
| 进入确认 | 3~5×10ms = 30~50ms | 按 Q 档(高3/中4/低5 + 时序 IN_DELAY 500ms |
| 离开判定 | 简单滞回 3~5 次防抖(平坦性 #if 禁用) | 按 Q 档 + OUT_DELAY 500msSW4=ON |
| 低Q 环带超时兜底 | **2.5 s** | CAPVD>进入线持续 → 强制释放(V4.36.30) |
| 释放后 Origin 补偿 | 冻结 1s + 降权 2s×1/5 | V4.36.26/32 |
| 真空 EMA | τ≈1.28 s | V4.36.31(α=1/128 |
| 脉冲宽 | 500 ms | PULSE_DELAY=10 @50ms |
| 有限存在 | **300 s** | HOLD_TIME=6000 @50ms |
| 安全复位 | **240 s** | LC_HOLD_TIME=4800 @50ms |
| 环境重校准 | 2s 预判 → 7s 补偿 → 2s 恢复 | ENV_WARN/RESYNC/RECOVER 200/700/200 + 学习 3×200tick,预算 30s |
| 就绪巩固期 | **5s / 7s / 10s** | 按 Q 档(高/中/低),绿灯慢闪,V4.36.36 |
| 线圈监视防抖 | **5 s** | 500×10mscoil_monitor,仅稳定无车判) |
| 重连确认窗 | **100 ms** | 载波连续恢复计数(V4.36.2) |
| 重连起振抑制 | **200 / 300 / 1500 ms** | 按 Q 档(高/中/低,V4.36.7/11 |
| 重连判稳门控 | 600ms 无漂移 / 5s 兜底 | V4.36.15(值稳定才放行) |
| 有车断开继电器保持 | **1000 ms** | RELAY_HOLD_MSV4.36.3/7 |
| DBG 周期打印 | 2 s | 含 f_kHz + L_uHC_eff 标定后) |
| 看门狗 | IWDT ≈1.64s | TMR15 ISR 计数 + 主循环 poll_wdg 500ms 喂狗 |
## 5. 拨码与配置
| DIP | 引脚 | ON=1 | OFF=0 |
|-----|------|------|-------|
| SA_1/SA_2 | PA0/PA1 | 灵敏度低位/高位 | `SENS = 3-(sw&0x03)` |
| SW_3 | PA2 | 脉冲输出 | 存在输出 |
| SW_4 | PA3 | 离开延时 500ms | 无延时 |
| SW_5 | PA4 | 安全复位 | 正常运行 |
拨码去抖:连续 5 次一致才生效。
频率档位(33/66nF)不在 DIP 内,由板载拨码直控电容(不引 MCU IO)→ 固件按默认低频档标定。
⚠ 拨码不重启检测器(无复位电路联动)——电感分级变更后靠自动恢复机制收敛,无需断电。
## 6. 与 M1H 的血缘对比(同血统两代)
| 特征 | M1H (2008) | DLD154V4B |
|------|-----------|-----------|
| 平台 | STC12C5202 (8051, ~12MHz) | AT32F421 (M4, 120MHz) + FreeRTOS |
| 归一化基数 | 32768 | **131072**2^17,快 4 倍精度) |
| 测量窗 | 32.8ms | **1.09ms**(快 30×;V4.27 修正 120M tick 口径) |
| CAPVD 节拍 | 32.8ms | 10ms(快 3.3×) |
| 基线 | 100 窗 3.28s(有车也跟踪) | 500 窗 5s(有车冻结 + 冻结超时 + 环境重校准 + 释放后分级补偿) |
| 灵敏度表 | {216,108,36,10}/{108,72,18,9} | 方案B {337,71,38,25}/{51,27,18,12}(现场调校);PD132T 对齐表 {300,60,32,21}/{60,32,21,14} |
| IIR | ALFA 79 @32.8ms τ=106ms | ALFA 79 @10ms **τ=32ms**(快 3.3×) |
| 进入 | 单次越线 | **3~5 次确认(按Q档) + 斜率限幅** |
| 离开 | 简单阈值 | **简单滞回 3~5 次防抖 + 环带超时兜底** |
| 产品自诊断 | 无 | **断开编码 / 电感四分监视(18~125k)+ L 粗估 + 短路级等同断开 + 热切换自愈** |
| 看门狗 | WDT_CONTR | **IWDT ≈1.64s**V2.10 双保险) |
| 时序 tick | 50ms | 检测 10ms + 时序 50ms(混合) |
## 7. 设计特点
1. **混合节拍**是本型号最大特色:检测(IIR/基线/判据)在 10ms 快循环,时序状态机(进入/离开/脉冲/超时)在 50ms tick——两者解耦,响应快且时序参数与 M1H 直接对齐
2. **基线多重保护**:有车冻结 + 冻结超时(10s)+ 稳定性检查(±2%)+ 受控环境重校准(2s 预判/7s 补偿/30s 放弃)+ **释放后冻结 1s + 降权 2s**——比参考型号多三层自适应
3. **低Q 专项治理**V4.30~V4.36,见 §8):环带超时兜底、真空 EMA 重锚、释放平滑、带回加宽、确认分档——23µH 级低Q 线圈从"偶发锁死 75s"到"全程可控释放"
4. 平坦性离开判定(专利 CN200910309382)是参考型号没有的——**V2.9 起默认关闭**(现场实测不理想),切回简单滞回(与 154Pro 一致),代码保留可开
5. **黄灯人机接口完整**V4.23~V4.38):快闪 > 环境学习锁存 > **一长两短(可用级)** > 一长一短(出窗)> 断开史 N 短闪 > 灭——现场 10s 级可判故障类型与"能不能用"
6. **自诊断带校准**V4.26~V4.40):电感监视基于真实频率(V4.27 修正 4 倍)+ 标定等效电容(产品 C_eff=43)+ 四分语义 + **短路级等同断开(默认开)+ 热切换不断电自愈**
---
## 8. V4.30~V4.36 演进(2026-09-04 ~ 09-09,低Q 治理链 + 产品化语义)
### 8.1 低Q 释放/卡死治理链(机理编号)
| 机理 | 现象 | 药方(版本) |
|---|---|---|
| 1 | Origin 学高锚错 | V4.36.26 释放后冻结 500ms + τ85ms |
| 2 | 差 1~2 counts 脆断 | V4.36.28 `REL_BAND_LO_MULT` 150→**180**(带回 41 |
| 3 | 板深停触发区 | V4.36.29 容差 4**已撤**,太易释放)→ V4.36.30 **环带超时 2.5s 兜底** |
| 4 | Origin 学到搁置位 | V4.36.31/33 **真空 EMA 重锚**min(Origin,EMA),门控 >1×dlt |
| 5 | 残余缓离拉低 Origin | V4.36.32 冻结 1s + 降权 2s×1/5(仿 PD132T 慢采样) |
| 6 | **EMA cast 爆炸** | V4.36.34 钳位+自愈(掩盖)→ V4.36.35 **有符号先除治本**`(uint32)负差/128=+3355万` |
诊断字段(V4.36.27/34):DBG 行含 QLO/RSM/RLN/RCN/VEM/SUMADR 每 10s 打 `&VEM &ORGSUM &Origin &RSM`
### 8.2 电感分级产品化语义(用户拍板链)
| 版本 | 变更 | 决策 |
|---|---|---|
| V4.36.20~23 | 最低电感量 20 → 25 → **24µH** | 频率上限 171 → 153 → 156kHz |
| V4.36.24 | 宏 `COIL_UNDER_MIN_AS_OPEN` 双模式 | 0=仅快闪 / 1=完全断开 |
| V4.36.25 | 电感三分:窗回 125k125~156k 一长一短;>156k 快闪 | 修正误归正常 |
| **V4.36.37** | **方案A 分级降级**(用户选 A | fault2 = 156~171k 保判车 + 独立黄灯;fault3 = >171k 短路级才等同断开 |
| V4.36.38 | fault2 黄灯 疾闪 100ms → **一长两短**(用户定) | 与一长一短同家族、"两短"区分 |
| V4.36.39 | 宏默认 0 → **1**(用户拍板) | 短路级出厂即等同断开,客户无需编译期开宏 |
| V4.36.40 | **热切换死锁修复** | recover 用实时 Xn 判回窗;换线圈不断电 ~6s 自愈 |
**语义要点**:不误杀 20~24µH 的"低但可用"线圈(照常判车+一长两短提示);<20µH 真短路级才停判(不可靠输出风险)。
## 9. 待验证:23µH 悬停临界跳变(2026-09-09,代码未改)
> **状态**:现象已定位到代码路径,机理为**推断**,**尚未现场验证、未做任何代码改动**。
> 触发需三个条件同时满足、悬停窗口极窄(约 50~200 counts)—— 故"偶发、难复现"。存档备查。
### 9.1 现象(用户原述)
- 23µH 线圈,低频档 + 高灵敏度(SENS=3),上电持续运行
- 金属板反复接近/远离 → 正常(绿灯亮灭、继电器释放均正常)
- **偶然一次**:金属板晃到**临界高度停留** → 继电器频繁跳变(绿灯同步频繁亮灭),**可持续复现**
- 金属板远离等 ~10s 再靠近 → **一直复现不了**
- 断电重启后再试 → **也一直复现不了**
### 9.2 参数定位
| 项 | 值 | 依据 |
|---|---|---|
| 23µH @ C_eff=43nF | **f ≈ 160 kHz** | `L = 2.533e7/(f²×C)` |
| 电感分级 | `156 < f ≤ 171`**want=2 可用级**(黄灯一长两短) | `COIL_L_MIN_F_KHZ=156` / `COIL_L_SHORT_F_KHZ=171` |
| Q 档 | f > 100k → **低 Qg_q_lo=1** | `RECONNECT_Q_MID_F_KHZ=100` |
| 高灵敏度 | `SensTable[3]=25``dlt = Origin×25/65536 ≈ 0.038%`Origin≈130000 → **dlt≈50 counts** | 方案B 调校表 |
| 迟滞带 | 进入线 `1.0×dlt` / 释放线 `1.8×dlt` → 带宽 **0.8×dlt ≈ 40 counts** | `REL_BAND_LO_MULT=180` |
| vac_ref 切换门槛 | **1×dlt ≈ 50 counts** | `VAC_REF_DELTA_DLT=1` |
⚠ 若现场为 0Ω 实验板(C_eff≈68nF)→ 23µH 对应 f≈127kHz(want=1,一长一短),Q 档不变。**黄灯表现可反推板型**。
### 9.3 触发三要素(缺一不可 → 解释"偶发"
1. **低 Q**f>100k):23µH 必然满足 → 释放判定走 `g_rel_smooth`(τ≈85ms+ 1.8× 加宽
2. **高灵敏度**dlt 仅 50 counts → 迟滞带仅 40 counts 宽,极易被抖动穿透
3. **悬停在进入线附近**(dev ≈ 1×dlt):**正好踩在 vac_ref 切换门槛上**,且仍在真空 EMA 更新窗(±4×dlt)内
### 9.4 机理:vac_ref() 参考切换 = 阈值阶跃(推断)
代码事实(TaskLoop.c L290):
```c
static uint32_t vac_ref(void)
{
if (g_vacuum_ema == 0) return loop1_Origin;
if (loop1_Origin - g_vacuum_ema > dlt_ORG * VAC_REF_DELTA_DLT) /* 门槛 1×dlt */
return g_vacuum_ema; /* ← 参考整体下移,进入线/释放线同步阶跃 */
return loop1_Origin;
}
```
真空 EMA 更新条件(L13021326):**无车 且 dev ∈ ±4×dlt 且 freeze_tick==0** →
悬停在进入线附近时 dev≈−1dlt,**完全落在窗内**EMA 以 τ=1.28s 向悬停值收敛。
极限环(周期 ≈1~1.5s,1s 冻结期决定下限):
1. 无车,板悬停 → `CAPVD ≈ Origin1dlt` → EMA 缓慢向 CAPVD 靠
2. EMA 越过 `Origin1×dlt`**vac_ref 切到 EMA** → 进入线瞬移 50 counts
3. CAPVD 相对新进入线变"浅" → 维持无车;EMA 继续跟随并稳定在低值
4. 手抖使 CAPVD 再下探 1×dlt → **低于新进入线 → 进入确认 5 样本(50ms)→ 有车**
5. 有车 → **EMA 冻结**(更新只在无车分支)→ vac_ref 保持低位
6. 释放线 `EMA1.8dlt``g_rel_smooth` 跟上后必然高于它 → **释放命中(5 样本)→ 无车**
7. 释放 → `g_origin_freeze_tick=100`(1s 全冻结)→ 1s 后 EMA 重新跟随 → **回到步骤 1**
低 Q 测量抖动大 + `g_rel_smooth``CAPVD` 滞后 85ms,两个相位差保证"进了难出、出了难进"的交替翻转。
### 9.5 为什么难复现 / 远离恢复 / 断电消失
| 观察 | 解释 |
|---|---|
| 难复现 | 悬停深度必须落在 **(1×dlt, 4×dlt) ≈ 50~200 counts** 窄窗内,手放偏一点就进不去 |
| 远离 10s 恢复 | CAPVD 回真空 → dev→0 → EMA(τ=1.28s)拉回真空值 + Origin 均值窗(5s)洗掉污染 → 工作点重新对准 |
| 断电消失 | Origin / EMA / g_rel_smooth / 环带计数全部清零重建,须重新经历"压→悬停"路径才能把 EMA 培养到门槛 |
| **本质** | 非几何阈值问题(否则同一高度必然复现),而是**运行时自适应状态被悬停"培养"出来的极限环** |
### 9.6 现场验证清单(复现时优先做)
1. 抓串口 `EVT|enter_try` / `EVT|leave_try` / `Car_In` / `Car_OFF` 四类行 → 看 CAPVD 与 Origin/dlt 的相对位置、f 值确认 Q 档
2. 临时在 `vac_ref()` 加 1 行打印(用 EMA 还是 Origin + `OriginEMA` 差)→ 直接确认阈值是否在跳(可回退)
3. 黄灯对照:一长两短 = 三极管板(f≈160k)/ 一长一短 = 0Ω 板(f≈127k)
4. SENS 降到 1/2dlt 放大约 3~6 倍)→ 若跳变消失,坐实"门槛太窄"
### 9.7 修复候选(验证后再动,未实施)
| # | 方案 | 评价 |
|---|---|---|
| ① | **EMA 更新加真空守卫**:要求 `dev > 0.5×dlt`(接近真空)才更新 EMA | **最对症**,直接断掉"悬停污染 EMA" |
| ② | vac_ref 切换加回滞:切到 EMA 后需回升到 `Origin0.5dlt` 才切回 | 治标,便宜、无副作用 |
| ③ | `VAC_REF_DELTA_DLT` 1→2~3 | 悬停不再触发切换,但削弱 V4.36.31 原意 |
| ④ | 进入/释放加最小保持 300ms | 通用防抖兜底,可叠加 |
倾向 **①+④**(①治根,④保证任何自适应意外都不直接甩到继电器上)。
### 9.8 与既有治理链的关系
§8.1 机理 4V4.36.31/33 真空 EMA 重锚)是本现象的上位药方;V4.36.33 的 `>1×dlt` 门控只防住"**小偏差**重锚"
但**悬停深度 1~4dlt 时 EMA 仍会被跟随并越过门槛** → 属于机理 4 的**残留边角**。若验证成立,方案 ① 是机理 4 的补完。
---
## 2026-09-03 硬件变更:拨码电容开关旁路三极管(原理图 Ver4.01)
**准确改动**(用户确认):
- **R19 取下**(拆除)
- **R27 补焊 0Ω**(原空贴)
- 效果 = 拨码开关**不再经过三极管电路**,通过 0Ω 电阻**直接控制第二颗 33nF 电容**
**原因/效果**2026-09-03 现场标定):
- 原电路(拨码经三极管控电容):低频档(66nF 名义)实测等效谐振电容 **C_eff≈43nF**(2 台 5 组反推),第二颗 33nF 只等效并入 ~8.6nF
- 旁路后(0Ω 直控):**C_eff=68.1~68.9nF(均值 68.4)≈ 名义 66nF**,电容全量并入
- **产品决策(V4.34)**:产品基准**回到三极管库存板**——`COIL_CAL_C_NF=43`,0Ω 改动仅作机理验证(库存板存量消化优先)
- 33nF(高频)档标定 34(两板一致)