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)
This commit is contained in:
@@ -4,6 +4,44 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-11 — 环境重校准后触发高度变低根治:基准/派生参考同步 + EMA 余数累加(固件 V4.36.41)
|
||||
|
||||
用户反馈:黄灯常亮故障补偿后,金属板进入触发的高度比断电上电后低很多,感觉补偿结束后恢复不了正常灵敏度的触发高度。
|
||||
|
||||
**根因(两处,均可复核)**:V4B 的**进入判定用的是 `vac_ref() = min(Origin, 真空EMA)`,不是 `Origin`**(`TaskLoop.c:1432`)。而 V4.36.31 引入真空 EMA 后,**补偿路径没有同步它**:
|
||||
|
||||
- **机制1(一次性,量级大)**:`env_resync_apply()` 只原子替换 `loop1_Origin`,EMA 停在旧真空。补偿的前提是 `dev > +4×dlt` 连续 7s,学到的 B ≈ 当前 CAPVD ⇒ **Δ ≥ 4×dlt 是必然**,于是 `Origin − EMA = Δ > 1×dlt` ⇒ `vac_ref()` **必然**切到旧 EMA ⇒ 进入线整整低 Δ(SENS3@130k:Δ≥192 counts ≈ 0.15% Δf/f 的额外触发门槛)。断电上电时 EMA 由判稳重建 = Origin,故立刻恢复。
|
||||
- **机制2(常驻,单测实测)**:`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` 不变式;小步(≤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 场景(复现+修复对比 / 护栏大小步 / V4.36.33 门控回归 / 上电语义 / 死区实测)。
|
||||
|
||||
**单测实测数字**(`Origin 130506→130636`,Δ=130,dlt=49):
|
||||
|
||||
| 场景 | 现状 | V4.36.41 |
|
||||
|---|---|---|
|
||||
| 补偿后进入线 | 130457(低 130 = 2.65×dlt = 0.100% Δf/f) | **130587(低 0)** |
|
||||
| EMA 追赶 40s 后偏差 | 127 counts(2.59×dlt) | **0** |
|
||||
|
||||
**现场验证(待填)**:
|
||||
- [ ] 制造黄灯常亮补偿 → 抓 `EVT|env_learn_start` / `EVT|env_resync Origin:..->..`
|
||||
- [ ] 抓 `DBG|… Origin=… VEM=… RLN=…`:确认 `Origin − VEM` 是否长期 > 1×dlt(本根因的直接判据)
|
||||
- [ ] 单变量对照(同一块板同一高度序列):(a)补偿后立刻测 /(b)灭灯后静置 10s 再测 /(c)断电上电测 —— 本版应 (a)≈(b)≈(c)
|
||||
- [ ] 现场日志片段粘贴区:
|
||||
|
||||
```
|
||||
(待填)EVT|env_resync Origin:……->……
|
||||
(待填)DBG|…… Origin=…… VEM=…… RLN=…… dlt=……
|
||||
```
|
||||
|
||||
语法:待 MRS 编译确认(本机无 AT32 工具链);**镜像单测 8/8 全绿**(gcc -O0 -Wall -Wextra,0 warning);REV 4.36.41;spec V2.60 / devlog V2.78。
|
||||
|
||||
> 归档:根因分析稿 `docs/env-resync-trigger-line-analysis.md`;补丁 `docs/patches/v4.36.41-A-B-origin-ema-sync.diff`、`docs/patches/v4.36.41-D-ema-frac-no-deadband.diff`。
|
||||
> ⚠ 提交前:`cmcng.h` 的 `FIRMWARE_VER` 字符与 `FIRMWARE_VER_REV` 需 40→41;`technical-spec.md` 文档头(固件版本 V4.36.41 / 文档版本 V2.60)同步;本条目日期按实际 commit 日校准。
|
||||
|
||||
## 2026-09-08 — 就绪巩固期 Q 分级:低Q 上电首压防卡(固件 V4.36.36)
|
||||
|
||||
用户反馈:电感偏低/低Q 线圈上电自检结束(绿灯灭)马上压板,大概率绿灯常亮;10s 后再测正常。要求绿灯自检闪时长分级:高Q 5s/中Q 7s/低Q ≥10s。
|
||||
@@ -2151,6 +2189,7 @@ if (dev >= dlt_ORG × 4) {
|
||||
|
||||
| 版本 | 时间 | 说明 |
|
||||
|------|------|------|
|
||||
| V2.78 | 2026-09-11 | V4.36.41 环境重校准后触发高度变低根治: 新增 origin_set_atomic() 同步真空 EMA(3 处写入点; 维持 Origin−EMA ≤1×dlt 不变式) + EMA 余数累加消 ±127 counts 整数死区; 新增镜像单测 test_vac_ref_reanchor 5 场景全绿 |
|
||||
| V2.77 | 2026-09-08 | 注释同步: TaskLoop.c/h + tests 全部 疾闪 → 一长两短 (V4.36.38 现役描述, 历史版本行保留变更记录) |
|
||||
| V2.76 | 2026-09-08 | V4.36.40 热切换修复: fault3 强制期 Origin/LPCNT 冻结 → recover 改 TMR3 实时 Xn 判回窗(240000/Xn); 恢复后 LOOP_OK 回位自动发起重连确认+判稳重建 Origin, 换线圈不断电 ~6s 自愈 |
|
||||
| V2.75 | 2026-09-08 | V4.36.39: COIL_UNDER_MIN_AS_OPEN 默认 0→1 (用户拍板) —— L<20µH 短路级出厂等同断开 |
|
||||
|
||||
Reference in New Issue
Block a user