fix(V4B): V4.27 — 频率测量 4 倍偏差修正 (示波器 30.23k vs 打印 7k)

根因(两处2倍叠加):
1. calc_freq_khz 常数 60000 按 60MHz 假设; 实际 TMR3 计数时钟=sclk=120MHz (HEXT×10, AHB/APB1÷1)
2. 输入捕获 DIV_2 (每2边沿捕获, Xn 翻倍), g_input_div 从未参与换算
→ Xn=2×120M/f_real, f_print=f_real/4 (30.23/4=7.56✓ 36.82/4=9.21✓)

改动: calc 60000→240000 (注释推导); coil_l_uH 改随 f_kHz (25330000/(f²×C66));
      DBG/EVT 用同一 _fk; 版本 V4.27; spec §4.1.2 文字更正 + devlog/design v0.4 标注影响

影响: 旧日志 f/L 需×4 (16.3kHz 假象实为 65.2kHz≈90µH 正常线圈); V4.26 告警窗随真实 f 自洽
This commit is contained in:
wangfq
2026-09-03 11:49:43 +08:00
parent dd14e083fa
commit 6b7d624ff0
5 changed files with 70 additions and 21 deletions
+41 -2
View File
@@ -4,6 +4,44 @@
---
## 2026-09-03 — 频率测量 4 倍偏差修正(固件 V4.27)
> **固件版本:V4.27**cmcng.hFIRMWARE_VER="4.27" + MAIN=4/SUB=27)。devlog 修订 V2.25。
### 问题(用户现场实测对比示波器)
DBG 打印低频 **7kHz** / 高频 **9kHz**;示波器实测 **30.23kHz** / **36.82kHz**——固件少算 4 倍
30.23/4=7.56、36.82/4=9.21,整数截断吻合)。
### 根因(两处 2 倍叠加)
1. `calc_freq_khz` 常数 60000 按 **60MHz** 计数时钟假设;实际 TMR3 计数时钟 = sclk = **120MHz**
HEXT×10、AHB÷1、APB1÷1,见 at32f421_clock.c
2. 输入捕获配置 `TMR_CHANNEL_INPUT_DIV_2`(每 2 个信号边沿捕获一次 → Xn 翻倍);
board.c 算出的 `g_input_div` 从未参与频率换算
→ Xn = 2×120MHz/f_real → f_print = 60000/Xn = f_real/4。
spec §4.1.2 曾把"DIV_2"误述为"120MHz→60MHz 时钟"——实际是**边沿计数分频**,
不是时钟分频;等效采样率是 240M/周期而非 60M/周期。
### 改动
- `calc_freq_khz`60000 → **240000**240000 = 120MHz×DIV_2 的 kHz 口径;注释完整推导)
- `coil_l_uH`:改用修正后 f_kHz 计算(L_uH = 2.533e7/(f_kHz²×C_nF)),DBG/EVT 用同一 _fk
- 版本 V4.26→V4.27spec §4.1.2 流程文字更正;devlog 解读表同步 240000
### 影响面(重要)
- **旧日志全部 f/L 需 ×4 修正**:如"16.3kHz→L1445µH 超限"实为 **65.2kHz→L≈90µH 正常线圈**
- V4.26 线圈告警窗口(20~120kHz)判定随 calc 同步用真实频率,行为自洽;此前据
"16.3kHz 案例"的结论需按真实频率重新评估(该案例实为测频 bug 假象)
- LPCNT 自适应窗口/CAPVD/dlt/灵敏度等基于 Xn 比值,不受影响
### 验证
- gcc -fsyntax-only 0 errortests/env_resync/coil_range/power_on_stable/red_breath 全 PASS
- 待现场:串口 f ≈ 示波器(低频 30.23 / 高频 36.82);L 打印 ≈420µH@30.2kHz(默认 66nF 档)
## 2026-09-03 — 线圈电感量告警 + 故障补偿提速(固件 V4.26)
> **固件版本:V4.26**cmcng.hFIRMWARE_VER="4.26" + MAIN=4/SUB=26)。devlog 修订 V2.24。
@@ -232,7 +270,7 @@ DBG|t=2000ms f=99kHz Xn=600 LPCNT=218 Value=131072 CAPVD=131072 slow=131072 Orig
```
| 字段 | 含义 |
|------|------|
| f | 线圈振荡频率 kHz=60000×LPCNT/CAPVD无车≈100 |
| f | 线圈振荡频率 kHz=240000×LPCNT/CAPVDV4.27 修正:TMR3=120MHz 计数 + 通道 DIV_2 |
| Xn / LPCNT | 瞬时周期 / 自适应窗口 |
| Value / CAPVD / slow | 原始采样 / 主滤波 / 慢滤波(方案A) |
| Origin / dlt | 基准值 / 当前阈值(无车=进入线,有车=释放线) |
@@ -254,7 +292,7 @@ DBG|t=2000ms f=99kHz Xn=600 LPCNT=218 Value=131072 CAPVD=131072 slow=131072 Orig
### 辅助实现
- `calc_freq_khz(capvd, lp_cnt)`f_kHz = 60000×LPCNT/CAPVD60MHz 捕获时钟),验证:无车 99kHz / 深车 124kHz ✓
- `calc_freq_khz(capvd, lp_cnt)`f_kHz = 240000×LPCNT/CAPVDV4.27 修正:TMR3 计数 120MHz × 通道捕获 DIV_2 → 等效 240MHz/周期;旧 60000 按 60MHz 假设漏算 4 倍)
- `g_slope_limit_cnt`:斜率限幅截断计数(IIR 输入被 5% 限幅截断时 +1,周期打印带出后清零)
### 待办
@@ -1106,6 +1144,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.25 | 2026-09-03 | V4.27 频率测量 4 倍偏差修正(calc 60000→240000120MHz×DIV_2);coil_l_uH 随 f 修正;旧 f/L 日志需 ×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 删除) |