From c44f985afbe674a3680554b4190313f1eee25b4b Mon Sep 17 00:00:00 2001
From: Wanderingss <1624155937@qq.com>
Date: Thu, 5 Nov 2026 09:34:27 +0800
Subject: [PATCH] =?UTF-8?q?docs:=20=E8=B0=90=E6=B3=A2B=E8=A1=8C=E6=8C=89?=
=?UTF-8?q?=E6=9D=BF=E7=AB=AF=E5=89=8D=E7=AB=AF=E7=9C=9F=E5=AE=9E=E8=A1=B0?=
=?UTF-8?q?=E5=87=8F=E5=85=B3=E9=97=AD=E2=80=94=E2=80=94=E7=BB=93=E8=AE=BA?=
=?UTF-8?q?=E7=8E=B0=E7=8A=B6=E5=8C=96=E4=B8=8E=E7=99=BB=E8=AE=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 执行手册:用户裁定删除 §8.6–§8.10 尾部(顺序/分诊/还原/归档节);
谐波 B 行结论只留现状(删万用表分诊、三点拟合、嫌疑解除等过程叙述)
- 定案:250 Hz 读数 −4.4 % = IA 前端差分滤波(C35 100 nF + R19/R21
各 1 k,一阶低通 fc ≈ 796 Hz)真实衰减,板端读数忠实、量算皆对;
工频 50 Hz 仅 −0.2 % 不受影响;选择性成立;谐波产品化需板改
- 通道映射 §8.2 新增前端 RC 段:逐阶外推(21 次 −39.6 %,改 10 nF
后 −0.9 %)、改板优先于软件修正的理由、证伪条件(250 Hz 附加滞后 ≈17°)
- 数据可信.md:§2.7 谐波行同步;任务卡打勾保留并标注四项未闭合
(叠加轮/削顶低频档/测频改码档/模型仪器证伪);README 顺位表 ✅
- 登记簿 §3 新增「IA 前端差分滤波限制谐波带宽」条目(语义标识)
- 证据:ia_rc_model.py 输出归档 boot_log_data 并入 manifest(LF 重算
md5);速查图生成器脚注同步并重跑(脚本与产物同笔)
- check_doc_links --all 通过(3206 处、无法判定 0)
---
docs/images/交流六轮速查.svg | 9 +-
docs/任务规划/README.md | 6 +-
docs/任务规划/数据可信.md | 12 +-
docs/任务规划/登记簿.md | 1 +
docs/测试说明/专项验证/ADC前端注入验证流程.md | 115 ++++--------------
.../boot_log_data/20261104_ac_ia_rc_model.txt | 17 +++
.../boot_log_data/20261104_ac_manifest.txt | 1 +
docs/硬件平台/ADC通道映射说明.md | 13 +-
tools/arch_diagram/gen_ac_rounds_svg.py | 8 +-
9 files changed, 72 insertions(+), 110 deletions(-)
create mode 100644 docs/测试说明/测试数据/boot_log_data/20261104_ac_ia_rc_model.txt
diff --git a/docs/images/交流六轮速查.svg b/docs/images/交流六轮速查.svg
index 53487914..002ae2af 100644
--- a/docs/images/交流六轮速查.svg
+++ b/docs/images/交流六轮速查.svg
@@ -54,7 +54,7 @@
象限
测频轮
-A 档无数 = 过
+测不出数 = 过
@@ -66,8 +66,8 @@
注入
UA 同幅值轮接法,扫 45 / 50 / 55 Hz
判据
-A 档如实报不可测:valid=0、UI 显 --;报 5
-0.00 反而是 bug
+如实报不可测(现状固件):valid=0、UI 显 -
+-;报 50.00 反而是 bug
读数
freq(hb) 0.01 Hz;UI Hz
@@ -102,5 +102,6 @@
wave_read.py fft --ch 4;UI Ia2 / Ia5
目检旁证
-顺序与耗时见 §8.6(约 135 min 一趟 session);[ERR] 判读见 §8.7,失败先查 §8.8 分诊表。波形缩略图只表形状,不代表真实幅度刻度。
+六轮已跑完(2026-11-02 / 11-04):实测结论见 docs/硬件平台/ADC通道映射说明.md §8.2,谐波 B 行已归因板端前端 RC(fc≈796 Hz)。波形缩略图只表
+形状,不代表真实幅度刻度。
diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md
index 7fa21161..b2280377 100644
--- a/docs/任务规划/README.md
+++ b/docs/任务规划/README.md
@@ -60,7 +60,7 @@ docs/测试说明/专项验证/模拟器差距清单.md §2.3「开机账本 boo
| **1** | **UI 补齐** | **清单已清空(2026-10-28)** | 记录 5 页与运行报告页已落地并绑页;余下 5 叶属 §5「当前不做」,重开条件见 docs/任务规划/UI补齐.md §5;上板判据见 docs/任务规划/登记簿.md §7 |
| **2** | **net 层跨上下文收口** | **下一顺位(未开工)** | UI 清单已清空,切换条件已满足;**开工需用户点头**——换主线是产品决策,不由本批顺带做掉 |
| **3** | 其余结构与可靠性评估 | 排队 | net 收口后;逐项见 `登记簿.md`,观察项不为了“清清单”而强做 |
-| **4** | 数据可信(采集数据可信度) | 动态波形验证**手边可做**;变比确认与两点标定等外部资源 | 信号发生器动态波形验证(不依赖外部资源)→ 端子/子板变比确认 → 标准源两点标定;**排序调整(2026-10-29):动态验证让位给故障录波数据面**,段文件落地后判据升级为 PC 独立重算对表(docs/子系统设计/故障录波设计说明.md §11)(已知电压注入已于 2026-10-27 台架闭环并销项);外部资源到位可插入优先处理 |
+| **4** | 数据可信(采集数据可信度) | 动态波形验证 **✅ 2026-11-04 闭环(六轮)**;变比确认与两点标定等外部资源 | 信号发生器动态波形验证(不依赖外部资源,✅ 2026-11-04)→ 端子/子板变比确认 → 标准源两点标定;**排序调整(2026-10-29):动态验证让位给故障录波数据面**,段文件落地后判据升级为 PC 独立重算对表(docs/子系统设计/故障录波设计说明.md §11)(已知电压注入已于 2026-10-27 台架闭环并销项);外部资源到位可插入优先处理 |
| **5** | 标准源送检与第三方 104 主站验收 | 等待标定完成 | 两点标定完成且保护 VALID 已置位;送检窗口前 2 日冻结特性 |
| **6** | 保护元件与采集增强 | 等待标准源或硬件改版 | 保护先解除未标定闭锁;三相同时刻类功能等 V0.2 硬件 |
| **7** | 验证窗口事项 | 逢条件顺带 | CI runner、PC peer、CH340、负向故障注入条件到位时执行 |
@@ -71,8 +71,8 @@ docs/测试说明/专项验证/模拟器差距清单.md §2.3「开机账本 boo
- **UI**:写路径、整定 4 页、装置维护 3 页与遥测死区/系数 2 页已收口(含上板判据与真机回读);
菜单树、页面注册表与字库都是生成物,同刻只允许一条道写。
-- **送检**:已知电压注入(✅ 2026-10-27 闭环)→〔信号发生器动态波形验证 —— 手边可做,与后两关并行、不阻塞送检〕
- → 端子/子板变比确认 → 标准源两点标定 → 保护解除闭锁 → 送检。
+- **送检**:已知电压注入(✅ 2026-10-27 闭环)→ 信号发生器动态波形验证(✅ 2026-11-04 闭环,未闭合
+ 四项标注在 数据可信.md §5 任务卡内)→ 端子/子板变比确认 → 标准源两点标定 → 保护解除闭锁 → 送检。
- **保护扩展**:标准源未到位前不新增无法验证的判据;跨转换器相位、功率、对称分量类
功能必须等 V0.2 硬件。
- **结构债**:UI 完成后先做 net 收口;RS-485 白名单、内存优化、仓库体积等观察项不抢占
diff --git a/docs/任务规划/数据可信.md b/docs/任务规划/数据可信.md
index d6b20a61..c4506a7a 100644
--- a/docs/任务规划/数据可信.md
+++ b/docs/任务规划/数据可信.md
@@ -26,7 +26,7 @@
|---|---|---|
| 1 通路活 | 9 路都在转换、没串道、极性没反? | ✅ 2026-10-27 已证 |
| 2 静态引脚电压 | 注 1 V 直流,读数是不是 1 V? | ✅ 2026-10-27 已证(六项判据全 PASS,§2.6) |
-| **3 动态引脚波形** | **注 Vpp 2.828 V 正弦(板上读数 ≈1 V),算出来还是不是 1 V?** | **🟦 2026-11-02 / 11-04 已跑两轮、四项已闭环**(仅剩谐波 B 行分诊一项未闭合——削顶 2 Hz 档与复位复核经用户裁定 2026-11-04 关闭 → §4.6 任务卡;实测结论 `docs/硬件平台/ADC通道映射说明.md` §8.2) |
+| **3 动态引脚波形** | **注 Vpp 2.828 V 正弦(板上读数 ≈1 V),算出来还是不是 1 V?** | **✅ 2026-11-02 / 11-04 已跑两轮、六轮全部闭合**(削顶 2 Hz 档与复位复核经用户裁定 2026-11-04 关闭;谐波 B 行超差已归因板端前端 RC fc≈796 Hz → §4.6 任务卡;实测结论 `docs/硬件平台/ADC通道映射说明.md` §8.2) |
| 4 端子二次值 | 引脚上这 1 V 对应端子侧几 V? | 🟡 等子板原理图或实物 |
| 5 精度等级验收 | 额定工况下整条链误差够几级? | 🟡 等标准源 |
@@ -46,7 +46,7 @@
|---|---|
| 判断现在这些数能信到什么程度 | §1 这张图 + §2.6(静态证到哪)+ §2.7(动态证到哪) |
| 改采集 / 算法 / 品质位相关代码 | §2.1 §2.2 §2.3(口径)+ §4.1~§4.5(设计依据) |
-| 上台架做正弦验证 | §4.6(接法、六轮判据、数字从哪儿读、坑)+ §5 的「信号发生器动态波形验证」卡 |
+| 上台架做正弦验证 | ✅ 已闭环(2026-11-04);复跑看 §4.6(接法、六轮判据、数字从哪儿读、坑)+ §5 的「信号发生器动态波形验证」卡 |
| 看还差谁、按什么顺序做 | §5 任务卡 + §6 顺序图 |
| 确认某件事是**故意不做**而不是漏了 | §9;有没有踩坑风险看 §8 |
@@ -161,10 +161,10 @@ V0.1 恒命中 UB/UC/IB/IC/IN,位图 `0xE6`),它表示"这路不能测交
| 相位 | ✅ 同片内过(录波档 ≤2° 判据) | 同段 UA/UN 两路实测(0° 与 90° 两工况);**跨转换器仍禁比**——无同刻性是 V0.1 硬件边界(§9),不是待修缺陷 |
| 频率 | ✅ 「如实报不可测」成立(这就是现状判据) | 含满幅注入段全不可测、UI 恒 `--`;**45~55 Hz 精度仍未验**——要验须降 `FREQ_AMP_MIN` 单跑一轮 → §7 #8 |
| 削顶 / 品质 | ✅ DC −1.00 V 档锁存 + sticky 实证;2.0 Hz 低频档与复位复核经用户裁定 2026-11-04 关闭 | `[ERR] rail: edge=0x2 sticky=0x2` 唯一一条、撤注恒持;执行见 §4.6 任务卡 |
-| 谐波 C04 / C05 | 🟡 选择性轨已证(单注 100/250 Hz 分别只进对应桶、纯基波两桶为 0);**仍无消费者、无处上送** | 250 Hz→`Ia5` 行 −4.4 % 待万用表分诊(执行手册 B 行);接到哪、给谁用归 §9 的谐波轨立项 |
+| 谐波 C04 / C05 | 🟡 选择性轨已证(单注 100/250 Hz 分别只进对应桶、纯基波两桶为 0);**仍无消费者、无处上送** | 250 Hz→`Ia5` 行 −4.4 % **已按板端前端真实衰减关闭(2026-11-04)**:IA 前端差分滤波 C35 = 100 nF + R19/R21 各 1 k 构成一阶低通 fc ≈ 796 Hz,板端读数忠实、工频不受影响;谐波产品化需板改(模型与数据 `docs/硬件平台/ADC通道映射说明.md` §8.2,执行手册谐波记录 B 行);接到哪、给谁用归 §9 的谐波轨立项 |
| 保护判据 | 🔒 闭锁中 | §4.3 |
-→ 两轮已按 **§4.6** 跑完可跑项(从**已验证过的那个注入点**灌正弦);未闭合一项(谐波 B 行分诊)登记在 §4.6 任务卡状态列(削顶 2 Hz 低频档与复位复核经用户裁定 2026-11-04 关闭,见 §2.7 削顶行与执行手册削顶卡步 3 行)。
+→ 两轮已按 **§4.6** 跑完(从**已验证过的那个注入点**灌正弦);六轮全部闭合(谐波 B 行超差已归因板端前端 RC,见 §2.7 谐波行;削顶 2 Hz 低频档与复位复核经用户裁定 2026-11-04 关闭,见 §2.7 削顶行与执行手册削顶卡步 3 行)。
---
@@ -327,7 +327,7 @@ typedef struct {
| **谐波轮** | 谐波轨 | 基波 + 20 % 二次 + 20 % 五次(IA 上注)。⚠ 峰值预算:Vpp 2.828 V 基波 + 两个 20 % 分量的最坏对齐峰值 ≈ 1.98 V 已顶 ±2 V 红线 → 基波用 **Vpp 2.263 V**、二次与五次各 Vpp 0.453 V | **录波档**:段文件 `test/host/wave_read.py fft --ch 4 --all`(`IA` = 段内表序 4,直接给基波与 2 / 5 次谐波有效值,单位 mV);**旁证**:UI 交流量页 `Ia2` / `Ia5`(1 mV)与 `phasor(hb) C04-IA-F2` / `C05-IA-F5`(×0.1 定点,只证这根轨不是恒 0) | 谐波轨读数 = 注入分量(**±2 %,走录波档**;心跳档判不动:读数 0.160 V 在 ×0.1 串口行上只有 1~2 格)。⚠ 这两根轨**目前没有任何下游消费者**(`prot_elm.c` 无引用、`meas` 只算 `harm=1`),所以谐波轮只证"算得对",**不证"有人用"**——接到哪、给谁用,归 §9 的谐波轨立项 |
**先做幅值 / 波形 / 削顶三轮**(纯读数、无跨通道约定),相位 / 谐波次之,测频轮视 §7 #8 的裁定。每条的两档跑法(心跳档 /
-录波档)、触发动作、耗时排布与失败分诊在 `docs/测试说明/专项验证/ADC前端注入验证流程.md` §8.6。
+录波档)与触发动作在 `docs/测试说明/专项验证/ADC前端注入验证流程.md` §8.4–§8.5 的注入卡里(耗时排布与失败分诊两节已随 2026-11-04 轮次收尾删除,将来复跑照卡自行排程)。
#### 4.6.3 数字能从哪儿读(零固件改动)
@@ -368,7 +368,7 @@ typedef struct {
| 标识(任务名)| DoD(可验证验收判据) | 硬依赖 | 资源 | 写范围 | 状态 |
|---|---|---|---|---|---|
-| **信号发生器动态波形验证** | 按 §4.6.2 跑完六轮(测频轮允许以"如实报不可测"通过),逐条记实测 / 判据 / 结论;执行步骤与判据表**新增到** `docs/测试说明/专项验证/ADC前端注入验证流程.md`(直流节之后开一节"交流"),实测结论在 `docs/硬件平台/ADC通道映射说明.md` §8.1 之后新开一节;证据(串口日志 + 录波段文件)归档 `docs/测试说明/测试数据/boot_log_data/` | 静态注入闭环(✅ 2026-10-27)+ 一台能出 50 Hz 正弦、幅度可调到 Vpp 2.828 V 的交流信号发生器(**不需要标准源、不需要端子加压**) | 🔴 台架 + 手边发生器 | `docs/测试说明/`、`docs/硬件平台/` | 🟦(**2026-11-02 / 11-04 已跑两轮**:实测已回填、结论新开 `docs/硬件平台/ADC通道映射说明.md` §8.2、证据已归档 `boot_log_data`;剩谐波 B 行分诊一项——闭合即销行;削顶 2 Hz 档+sticky 复位复核经用户裁定 2026-11-04 关闭) |
+| **信号发生器动态波形验证** | 按 §4.6.2 跑完六轮(测频轮允许以"如实报不可测"通过),逐条记实测 / 判据 / 结论;执行步骤与判据表**新增到** `docs/测试说明/专项验证/ADC前端注入验证流程.md`(直流节之后开一节"交流"),实测结论在 `docs/硬件平台/ADC通道映射说明.md` §8.1 之后新开一节;证据(串口日志 + 录波段文件)归档 `docs/测试说明/测试数据/boot_log_data/` | 静态注入闭环(✅ 2026-10-27)+ 一台能出 50 Hz 正弦、幅度可调到 Vpp 2.828 V 的交流信号发生器(**不需要标准源、不需要端子加压**) | 🔴 台架 + 手边发生器 | `docs/测试说明/`、`docs/硬件平台/` | ✅ **已验证(2026-11-02 / 11-04 两轮、六轮全部闭合;用户裁定 2026-11-04 打勾保留本行)**:实测已回填执行手册各轮记录表、结论新开 `docs/硬件平台/ADC通道映射说明.md` §8.2、证据已归档 `boot_log_data`。**未闭合项(均已裁定不做或另登记)**:① 谐波叠加工况(基波+二次+五次同段)未跑——发生器无谐波叠加/ARB 功能,属设备缺口;算法侧由 `test/host/phasor/phasor_test.c` TC-PHASOR-006 覆盖,待有谐波功能标准源复跑;② 削顶 2 Hz 低频档与 sticky 复位复核——用户裁定 2026-11-04 关闭;③ 测频"降幅值门证 0.02 Hz 测准"的改码档未做(现状档以如实报不可测通过);④ 谐波 B 行归因一阶低通模型(fc≈796 Hz)未做绝对仪器证伪(预测 250 Hz 额外滞后 ≈17°,示波器到手复核);谐波功能产品化需板改(C35 换小 + 清点各路容值),已登记 `docs/任务规划/登记簿.md` §3 |
| **端子/子板变比确认** | 给出"端子电压 → ADC 引脚电压"的比值(万用表同时量端子与引脚,或查子板原理图后实测核对),写入 `docs/硬件平台/ADC通道映射说明.md`;据此判定 `eng` 能否置 1;数据缺失则本波只交付引脚电压并登记缺口 | 已知电压注入验证(✅);**与动态验证无依赖关系**,可并行 | 🟡 子板实物或原理图 | `docs/硬件平台/` | ⬜ |
| **两点标定与精度验收** | 电压 4 路(UA/UB/UC/UN)+ 电流 4 路(IA/IB/IC/IN)各做两点标定(零点 + 满度,温度不纳入),写入 `[adc_cal]` 并置 `VALID`;误差 ≤ 目标精度(待定:0.5 级 / 1 级 → §7 #1);证据归档 | 端子/子板变比确认;削顶五路的处置结论(削顶轮) | 🟡 标准源 / 继保测试仪 | `docs/算法/`、`docs/测试说明/测试数据/boot_log_data/` | ⬜ |
diff --git a/docs/任务规划/登记簿.md b/docs/任务规划/登记簿.md
index d67cee4a..0eb349d1 100644
--- a/docs/任务规划/登记簿.md
+++ b/docs/任务规划/登记簿.md
@@ -28,6 +28,7 @@
| # | 事项 | 发现 | 证据与现状 | 出处 |
|---|---|---|---|---|
| 双转换器无共同采样触发 | **8 路电气量分属两片转换器(V0.1 硬件缺陷,需下一版硬件修改)**——UA/UN/IA 走 TPAFE5160(16 位、8 通道同步、±5 V 双极性),UB/UC/IB/IC/IN 走 STM32 ADC(12 位、顺序扫描、0~3.3 V 单极性):① 两片转换器无共同采样触发 + STM32 侧顺序扫描(9 通道一轮 ≈ 67 µs)→ 跨转换器通道**无同一时刻性、相位关系不确定**,主板侧功率/功率因数/相角/对称分量类运算不成立;② 同族电气量精度与量程不一致(LSB ≈ 152.6 µV vs ≈ 806 µV,且 STM32 侧前端无中点偏置、负半周削顶);③ 语义与硬件归属交叉,固件映射/UI 通道序/自检注入须逐通道查表绕开 | 2026-10-10 定性更正(**撤销** 2026-10-09 建档时"有意分配、不要修正"的说法) | **V0.2 改版要求**:8 路电气量 UA/UB/UC/UN/IA/IB/IC/IN **全部接 TPAFE5160**,与 TPAFE 上 5 路备用路(AIN5/13/7/15/12)对调串联电阻在转换器一侧的目的地——元件数量与料号不变,属走线级改动。**V0.1 现板软件口径**:主板侧只做逐通道独立监视,禁止跨转换器做相位/功率/功率因数/矢量类运算(此类量取子板计量模块结果)。固件侧消费者已落地(ADC 采集链路,2026-10-10,按语义映射表取数)→ V0.2 改版只改映射表内容,上层语义与代码不动 | `../硬件平台/ADC通道映射说明.md` §1/§7;`../硬件平台/V0.1_网表详细分析报告.md` §1.4 V10、§6-3 |
+| IA 前端差分滤波限制谐波带宽 | **IA 通道差分滤波电容 C35 = 100 nF 构成一阶低通 fc ≈ 796 Hz,谐波产品路线的硬件前置未清**——250 Hz 注入读数 −4.4 % 即前端真实衰减(板端读数忠实;R19/R21 各 1 k `docs/硬件平台/V0.1.tel`:49 + C35 跨接差分对,拓扑 FR-ADC-5 `docs/产品需求/产品需求设计文档.md`);工频测量不受影响,外推 5 次 −4.6 %、9 次 −13 %、15 次 −27 %、21 次(1050 Hz)−39.6 % | 2026-11-04(模型与实测数据 `docs/测试说明/测试数据/boot_log_data/20261104_ac_ia_rc_model.txt`) | **改版/改板方向**:C35 换 10 nF(fc≈8 kHz、21 次仅 −0.9 %;改板优先于软件逐阶修正——容差与温漂使修正表不可信,理由详 `docs/硬件平台/ADC通道映射说明.md` §8.2)+ **清点其余各路差分滤波电容容值**(网表无容值标注,C35 = 100 nF 系用户口头确认,其余各路未定);将来有示波器可按预测复核(250 Hz 差分分量额外滞后 ≈17°)。详述 `docs/硬件平台/ADC通道映射说明.md` §8.2 | `docs/测试说明/专项验证/ADC前端注入验证流程.md` 谐波记录 B 行;`docs/硬件平台/ADC通道映射说明.md` §8.2 |
## 4. 测试与验证基础设施
diff --git a/docs/测试说明/专项验证/ADC前端注入验证流程.md b/docs/测试说明/专项验证/ADC前端注入验证流程.md
index 6580a6eb..d102a927 100644
--- a/docs/测试说明/专项验证/ADC前端注入验证流程.md
+++ b/docs/测试说明/专项验证/ADC前端注入验证流程.md
@@ -43,7 +43,7 @@
## 4. 数字能从哪儿读(固件只有下面这些周期行,没有命令控制台)
-> **录波段文件能力已落地(2026-10-29)**:故障录波数据面进仓(格式属主 `docs/子系统设计/故障录波设计说明.md` §6.2/§6.3、板级判据 §10;口径变更 2026-10-30 并入该文 §11,原卡片登记簿销项后删除)——每次触发一段,段文件直接给 8 路 × 320 点原始码值,判据可从「比对派生标量」升级为「PC 独立重算 vs 板上读数」互相对表。下表是固件**周期性**打印的全部输出行(段文件只在触发时产生,不在其中),两类数字互为对照。
+> **录波段文件能力已落地(2026-10-29)**:每次触发写一段,段文件直接给 8 路 × 320 点原始码值(格式属主 `docs/子系统设计/故障录波设计说明.md` §6.2/§6.3、板级判据 §10),判据可从「比对派生标量」升级为「PC 独立重算 vs 板上读数」互相对表。下表是固件**周期性**打印的全部输出行(段文件只在触发时产生,不在其中),两类数字互为对照。
| 日志行 | 频率 | 内容 | 用途 |
|---|---|---|---|
@@ -58,8 +58,6 @@
> ⚠ 交流轮次(判据 `docs/任务规划/数据可信.md` §4.6)必须用 `meas:` 比幅值,别用 `phasor(hb)`——那行 ×0.1 定点,注 1 V 只剩 10 格。
-`adc:` 行 2026-10-27 新增(`App/task/adc_task.c` 心跳块),此前验 8 通道要复位二十余次,现在**全程不必复位**。
-
**「码」是什么**:ADC 原始整数,**不是物理量**——电压 = 码 × LSB:
| 转换器 | 位数与极性 | 码范围 | 1 码 | 示例 |
@@ -202,17 +200,17 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| **串口心跳行** `phasor(hb)`(打印处 `App/task/adc_task.c:209`) | `phasor(hb) C0x-…-F1: Re=.. Im=.. rms=.. (x0.1)` | **0.1 V、向下截断**(×0.1 定点) | 有数没数、量级、象限 | ⚠ 相位 ≤2°、谐波 ±2 % 想都别想:注 Vpp 2.828 V(板上 ≈1000 mV)时 `rms` 满打满算 10 格,20 % 谐波只占 2 格 |
| **串口心跳行** `freq(hb)`(打印处 `App/task/adc_task.c:224`) | `freq(hb): f=.. valid=.. (x0.01)` | 0.01 Hz | 测频轮的读数和新鲜度(`valid`) | — |
| **板子屏幕** 主界面→实时数据→交流量(代码 `Drivers/BSP/UI/ui_page_ac.c:47`) | 页 7 行 `Ua/U0/Ia/Ia2/Ia5/Hz/量纲`;量值行 3 位小数、Hz 行 2 位 | **1 mV**(靠人眼看屏 + 拍照留证) | 谐波轮 `Ia2`/`Ia5` 幅值;幅值轮交叉旁证;测频轮 `Hz` 显 `--` | 相位(页面上没有角度) |
-| **录波段文件 + PC 重算**:一次触发写一段 `/wave/WAVE.BIN` 到板 FTP 根目录(`NN` = 00~99 轮转),取回本机用 `test/host/wave_read.py` 算(`dump`/`fft`/`shape`/`plot`,纯标准库;格式属主 `docs/子系统设计/故障录波设计说明.md` §6.2/§6.3,2026-10-29 并入主干) | 段内 8 路 × 320 点原始码 + 封存瞬间的标定与品质快照 | `fft` 浮点重算:基波有效值、相位、2 次与 5 次谐波有效值(mV) | 相位 ≤2°、谐波 ±2 %——**只有这条路判得动**;顺带 PC 独立重算与板上数字互相对表 | 段与发生器**没有绝对相位锁**(触发点固定在段内点 159)→ 只能比同一段内的相对相位;一段 320 ms,不代表长时间稳定 |
+| **录波段文件 + PC 重算**:把 `/wave/WAVE.BIN` 段取回本机用 `test/host/wave_read.py` 算(四子命令见 §4 表;格式属主 `docs/子系统设计/故障录波设计说明.md` §6.2/§6.3) | 段内 8 路 × 320 点原始码 + 封存瞬间的标定与品质快照 | `fft` 浮点重算:基波有效值、相位、2 次与 5 次谐波有效值(mV) | 相位 ≤2°、谐波 ±2 %——**只有这条路判得动**;顺带 PC 独立重算与板上数字互相对表 | 段与发生器**没有绝对相位锁**(触发点固定在段内点 159)→ 只能比同一段内的相对相位;一段 320 ms,不代表长时间稳定 |
-> **2026-11-02 / 11-04 两轮已跑**(六轮全有实测:幅值/波形/相位/测频/谐波过,削顶直流档过——2 Hz 档与复位复核**用户裁定 2026-11-04 不做、关闭**,谐波 B 行待万用表分诊)。按本文 §8.10 第 2/3 条口径,实测结论只详述在 `docs/硬件平台/ADC通道映射说明.md` §8.2,此处不抄第二份。
+> **2026-11-02 / 11-04 两轮已跑、六轮全部闭合**。实测结论只详述在 `docs/硬件平台/ADC通道映射说明.md` §8.2,此处不抄第二份。
-**六轮用例先定「什么证据才算过」——这张快查表逐轮指定证据档**(背景:2026-10-29 录波段文件能力落地后,判据档位跟着重划过一次,经过见 `docs/子系统设计/故障录波设计说明.md` §11):
+**六轮用例先定「什么证据才算过」——这张快查表逐轮指定证据档**(档位重划的经过见 `docs/子系统设计/故障录波设计说明.md` §11):
| 证据档 | 哪些轮用 | 过关要求 | 定这个档的原因 |
|---|---|---|---|
-| **心跳档**——串口周期行看够,**不用录波** | 幅值、波形、测频、削顶(削顶的接法以 §8.5 削顶卡为准,别按 50 Hz 老接法想当然) | 串口周期行(`meas:` / `freq(hb)` / `rail:` 位图)达判据即算过 | 判据阈值 ≥ 周期行分辨率(±2 % 对 1 mV、位图对 1 bit),录波无增益 |
+| **心跳档**——串口周期行看够,**不用录波** | 幅值、波形、测频、削顶 | 串口周期行(`meas:` / `freq(hb)` / `rail:` 位图)达判据即算过 | 判据阈值 ≥ 周期行分辨率(±2 % 对 1 mV、位图对 1 bit),录波无增益 |
| **录波档**——**必须录一段波**才算定量 | 相位、谐波 | 面板触发手动录波 → FTP 把段文件取回 → `wave_read.py fft` PC 浮点重算,与板上读数对表达判据 | 板上周期行是 ×0.1 截断定点(上限表「判不动」列),≤2°、±2 % 只有重算才判得动;谐波轮就算拿 UI 的 1 mV 也不行——**屏上那个数本身就是板子 DFT 算出来的答案**,系数表用错行、索引错位这类算术错会原样透传到屏上,必须靠 PC 独立重算当第二把尺子(段文件还顺带核对频位:100 Hz 确落 2 次 bin);**没录段文件只能退回「心跳档」记,定量判据不算过** |
-| **改码退路**(默认不走) | 相位抬打印倍数、测频放宽 `FREQ_AMP_MIN` | 仅当录波档不可用(段取不回、PC 跑不了脚本)才考虑;做则重编 + 烧录 + 按 §8.9 全量还原 | 动了固件就不是「零改动验证」了——**动手前必须问用户** |
+| **改码退路**(默认不走) | 相位抬打印倍数、测频放宽 `FREQ_AMP_MIN` | 仅当录波档不可用(段取不回、PC 跑不了脚本)才考虑;做则重编 + 烧录 + 把临时补丁全量还原并核对 | 动了固件就不是「零改动验证」了——**动手前必须问用户** |
### 8.2 设备清单与开机前置门
@@ -223,10 +221,10 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| 万用表 AC 档 | 能读 mV;**记明型号与响应类型**(真有效值 / 均值)——判别法:表身或说明书没印 "True RMS" 就当均值档;拿发生器注一个 Vpp 2.828 V 方波到 AC 档,读数 ≈1.41 V = 真有效值档、≈1.57 V = 均值档(差 11 %,一眼分辨) | 基准就是它;波形轮两种表读数都与基波期望差很多,不记响应类型说不清谁错 |
| 板子 | 产品构建(`test/board/test_config.h` 四 `TEST_SUITE_*` 全注释)+ `/keil-build` 0 错 0 警 + 烧录 `-Rst -Run` + 回读校验 | → `stlink-flash` skill 与 AGENTS.md「构建与验证」 |
| `[adc_cal]` 状态 | **保持未标定**(`eng=0`),别为"读数好看"先写标定值 | 现在 `meas:` / `phasor` 量纲是 **ADC 引脚电压 V**——未标定态的设计本来就不折算(`App/algo/meas.h`);标定一生效换二次值,本节全部期望值作废 |
-| 串口 | 全程抓 RX 落盘:`serial-assistant` skill(`open` → `clear` → 跑 → 读日志 / `log --tail`) | 日志文件就是证据本体,§8.10 归档它;**长跑别用 `/serial-boot-test`**——它绑一轮启动语义(静默 8 s、总超时 30 s、`max_boot_count`=1,forbidden 含 `[ERR]`,削顶轮故意造 `[ERR]`),约 135 min 必超时或误判;daemon 写 `state/serial.log`(20 MB 截头保尾 10 MB)→ `docs/测试说明/流程与规范/自动化测试流程.md` 长时间采集 |
+| 串口 | 全程抓 RX 落盘:`serial-assistant` skill(`open` → `clear` → 跑 → 读日志 / `log --tail`) | 日志文件就是证据本体;**长跑别用 `/serial-boot-test`**——它绑一轮启动语义(静默 8 s、总超时 30 s、forbidden 含 `[ERR]`,削顶轮故意造 `[ERR]`),必超时或误判;daemon 写 `state/serial.log`(20 MB 截头保尾 10 MB,长跑防截断 → `docs/测试说明/流程与规范/自动化测试流程.md` 长时间采集) |
| FTP 客户端 | 走 21 端口取段文件(出厂 `[ftp]` 账号,连续 5 次失败锁 60 s) | 相位 / 谐波的定量判据只能拿段文件来算;`/wave/WAVE.BIN`(00~99 轮转),**取回本机后立刻改名归档**,否则下次触发盖掉 |
-| 录波触发路径 | 产品构建唯一**免改代码**路径 = UI 菜单第 26 叶「手动录波」确认页(`Drivers/BSP/UI/ui_page_wave_manual.c` → `App/task/ui_task.c:605`) | 保护启动上升沿也算触发,但保护判据现处**未标定闭锁**(AGENTS.md「现状」),别指望自动来段;bench 自抓在 `DTU_BENCH` 且 `WAVE_BENCH_AUTOCAP` 非 0(默认 0,`App/task/adc_task.c:153`),开它走 §8.9 |
-| 共地 | 发生器 LO/GND 与板 AGND **单点**相连 | 不共地量到的是两地之差;现象见 §8.8 |
+| 录波触发路径 | 产品构建唯一**免改代码**路径 = UI 菜单第 26 叶「手动录波」确认页(`Drivers/BSP/UI/ui_page_wave_manual.c` → `App/task/ui_task.c:605`) | 保护启动上升沿也算触发,但保护判据现处**未标定闭锁**(AGENTS.md「现状」),别指望自动来段;bench 自抓在 `DTU_BENCH` 且 `WAVE_BENCH_AUTOCAP` 非 0(默认 0,`App/task/adc_task.c:153`),开它属临时措施,跑完撤销重编 |
+| 共地 | 发生器 LO/GND 与板 AGND **单点**相连 | 不共地量到的是两地之差,读数带与幅值无关的偏移或漂移 |
**开机前置门**——插上网线、开了串口采集、**还没接发生器**之前,串口日志就该通过下面 8 条;任何一条不过,先回 §5.5 处理,别带着脏链往下跑:
@@ -238,13 +236,13 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| 4 | **开机与注入的先后** | 先上电 → 在串口看到 `adc: UB` 数值有正常摆动 → **再**开发生器输出 | 顺序反了会埋雷:贴轨锁存要求该通道"此前出现过中带样本"(`App/algo/adc_health.c` `adc_health_rail_watch()`),开机就注大信号,削顶轮的锁存**装不上**,测出假"不锁存" |
| 5 | 开机单发行 | `first:`、`phasor(first)`、`freq(first)` 各只一条(`App/task/adc_task.c:478`/`:201`) | 数心跳周期时把它们剔掉,别算进"每 10 s 一行"里 |
| 6 | `phasor(hb)` 行 | 有数就打出来 | **有数 ≠ 数有效**:这行只查 `phasor_get()==0` 不看 valid 位(`App/task/adc_task.c:209`),判读必须配着 `vl`/`cl`/`rail` 一起看 |
-| 7 | `health:` / `sampling fault:` | 不该出现 | 这些位只吃序号差/错误计数/tick 差(`App/algo/adc_health.c:91-189`),注入多大正弦都不该点亮;亮了 = 节拍/丢帧问题 → §8.8 |
-| 8 | `wave:` 行(`App/task/adc_task.c:782`) | 基线 `armed=0`、`err=0`、`ovf=0`、`drop=0`;`seg=` 成段数(**0 也正常**,从没触发过就该是 0) | 后面每触发一段核一次:`seg` +1 且那三个计数**不涨**;计数涨了先按 §8.8 分诊再谈读数 |
+| 7 | `health:` / `sampling fault:` | 不该出现 | 这些位只吃序号差/错误计数/tick 差(`App/algo/adc_health.c:91-189`),注入多大正弦都不该点亮;亮了 = 节拍/丢帧问题,先修节拍链再谈读数 |
+| 8 | `wave:` 行(`App/task/adc_task.c:782`) | 基线 `armed=0`、`err=0`、`ovf=0`、`drop=0`;`seg=` 成段数(**0 也正常**,从没触发过就该是 0) | 后面每触发一段核一次:`seg` +1 且那三个计数**不涨**;`err`/`ovf` 非零才是失败(`drop` 触发后涨一截属设计内:SEALED 窗口丢点、一拍加 8,`App/algo/wave_ring.c:50`,涨完即冻结) |
### 8.3 接线的四条(与直流轮次比,差别只在第 2、3 条)
1. **夹子接哪儿**:跟直流轮同一个位置——§3 清单的**端子侧**焊盘(`U5` 排针,串阻 1 脚侧)。接这里的好处是**读数与设定值不用换算**:从焊盘到 ADC 引脚这一段是 1:1(直流轮已实测盖章,斜率偏差 −0.14 %,见 §6),端子侧电压就是引脚电压。⚠ 换个位置注(直接进引脚)才需要外串 10 k(§7 第 4 条),照本条接就不用。
-2. **幅度一律按峰峰值 Vpp 设定**,别拿面板有效值显示当设定基准——同一个 Vpp 换波形后有效值显示跟着变,切波形瞬间那格还残留上一波形时代的值(2026-11-02 实测就被坑过一轮,见波形轮注)。对表时注意换算:发生器设定 = Vpp;万用表 AC 档与板上读数天然是有效值刻度,正弦下 有效值 = Vpp ÷ 2.828。
+2. **幅度一律按峰峰值 Vpp 设定**,对表时注意换算:发生器设定 = Vpp;万用表 AC 档与板上读数天然是有效值刻度,正弦下 有效值 = Vpp ÷ 2.828。
| 侧 | 判据上限(§7 红线 2) | 允许的最大正弦 Vpp | 本节用量 |
|---|---|---|---|
@@ -256,14 +254,14 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
### 8.4 记录表抬头(每条用例一份,与日志一起归档)
-这份抬头回答一个问题:**这组数字是在什么条件下量出来的**。缺任何一项,三个月后这页记录就没法复核,§8.10 归档台账的「固件版本」栏也就没有出处。做法只有一件事——照着下表,从右边写的地方**抄**过来,不用你判断任何数:
+这份抬头只回答一个问题:**这组数字是在什么条件下量出来的**——照下表从右边写的地方**抄**过来,不用你判断任何数;缺任何一项,这页记录三个月后就没法复核。
| 要抄的信息 | 从哪儿抄、为什么它要紧 |
|---|---|
| 日期、操作人 | 王建锋 |
| 板子序列号 + 固件版本 | `fw build: Nov 4 2026 19:05:57 suite=NONE dstr=off`(2026-11-04 补测轮整行照抄;11-02 首轮为 `fw build: Nov 2 2026 14:21:24 suite=NONE dstr=off`) |
| 发生器型号 + 端接 | VICTOR 2026H(端接必须设"高阻",设成 50 Ω 输出会被砍一半,所有期望值作废) |
-| 万用表型号 + 响应类型 | FNIRST-DMT-99 + 真有效值档(判别法见 §8.3 设备表;波形轮不写响应类型,说不清 1414/1570 谁对谁错) |
+| 万用表型号 + 响应类型 | FNIRST-DMT-99 + 真有效值档(判别法见 §8.2 设备表) |
| 标定状态 | cal: ua_mv=-7 un_mv=-7 ia_mv=1747 vl=0x00 cl=0xe6 rail=0x000 edge=0x000 |
| 基线读数 | meas: seq=300 v=1 ua_mv=0 un_mv=0 ia_mv=0 f=0 fv=0 |
@@ -273,10 +271,10 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
1. 接好线、开发生器输出,等 ≥30 s 读数稳定;
2. 从串口取**连续 ≥10 行**心跳,先确认 `frames` 在涨、`adc1_err=0`(采不到算不得数),再核对卡片要求的读数——数字要取这 ≥10 行的**中位数**,别拿单行(`meas:` 是瞬时基波有效值透传、200 ms 是上送节拍非平均窗,`docs/任务规划/数据可信.md` §4.5,单行带拍频式跳动);
-3. 这张卡的判据要录波取证的:抄完数后,从面板第 26 叶「手动录波」触发一段,把录波页屏上显示的文件名(`WAVE`)抄进该轮记录表;分析前在本机跑一次 `test/host/wave_read.py --selftest`,**不通过,分析结果不算证据**(不赶时间,第 7 步统一取回再做,§8.6);
+3. 这张卡的判据要录波取证的:抄完数后,从面板第 26 叶「手动录波」触发一段,把录波页屏上显示的文件名(`WAVE`)抄进该轮记录表;分析前在本机跑一次 `test/host/wave_read.py --selftest`,**不通过,分析结果不算证据**(不赶时间,六轮跑完统一取回再做);
4. 关掉发生器输出,把数填进该卡记录表。
-**两种情况先修再测,别往下走**:采集链没清(`frames` 不涨 / `adc1_err≠0`)→ 查 §8.8;偏差没进判据 → 先复查三件事(端接 / 万用表响应类型 / 共地),改完重测,复查仍超才进 §8.8。
+**两种情况先修再测,别往下走**:采集链没清(`frames` 不涨 / `adc1_err≠0`)→ 按 §8.2 前置门逐项查采集链;偏差没进判据 → 先复查三件事(端接 / 万用表响应类型 / 共地),改完重测,复查仍超才谈固件问题。
#### 幅值轮(先做:三档幅值的偏差都在 ±2 % 内)
@@ -308,7 +306,7 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| 三角 | 0.578(闭式 8/π²/√2 = 0.573) | ≈817 | 0.583 |
- 判据:读数 = **基波**期望 ±2 %,**不是**真有效值。方波栏:真有效值表 ≈1414 mV、均值响应表 ≈1570 mV、板上 ≈1278 mV——**正是"读的是基波"的证据,不是 bug**;抬头必须写清万用表响应类型(判据文档同一条)。
-- 系数:方波基波 = 4/π × 峰值、三角 = 8/π² × 峰值,除 √2 得基波有效值 → 闭式 **0.900 / 0.573**,20 点 DFT 实算 **0.904 / 0.578**(`docs/任务规划/数据可信.md` §4.6.2 同值,算术以本节为准)。
+- 系数算术以本节为准(4/π 与 8/π² 除 √2 得基波有效值;`docs/任务规划/数据可信.md` §4.6.2 引本表同值)。
记录表:
@@ -325,10 +323,10 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| 读数 | `phasor(hb) C02-UA-F1` 与 `C03-UN-F1`,各取 `atan2(Im, Re)` 再比差值 |
| 判据(`docs/任务规划/数据可信.md` §4.6.2) | **录波档**:同段内两路相位差 ≤2°,改 90° 后差值 ≈90°;**心跳档只判跟随**(差值落 80°~100°,容差写记录表) |
| ⚠ 分辨率 | 串口行的 ×0.1 向下截断:Vpp 2.828 V(板上 ≈1000 mV)时 Re/Im 各 ±10 格,**一格 0.1 V** → 角度量化误差最坏 ≈ 8°,**≤2° 串口判不出来** |
-| 怎么取证 | ① **录波档(首选,零改代码)**:触发一段,`wave_read.py fft` 重算基波相位,比同段内 `UA`(表序 0)与 `UN`(表序 3)相位差——浮点重算不受 ×0.1 量化限制,≤2° 判得动(动作见下段);② **心跳档**:没录到段文件时退用,同相 ≈0°、改 90° 后差值落 80°~100° 即算跟随;③ **抬倍数退路**:临时 `log_phasors()` 倍数改 ×1000 并改行尾 `(x0.1)`,跑完按 §8.9 还原——录波档可用时基本不必走,要走**先问用户** |
+| 怎么取证 | ① **录波档(首选,零改代码)**:动作见下「录波档的具体动作」六步,比同段内 `UA`(表序 0)与 `UN`(表序 3)相位差,浮点重算不受 ×0.1 量化限制、≤2° 判得动;② **心跳档**:没录到段文件时退用,同相 ≈0°、改 90° 后差值落 80°~100° 即算跟随;③ **抬倍数退路**:临时 `log_phasors()` 倍数改 ×1000 并改行尾 `(x0.1)`,跑完撤销补丁并重编 + 重烧——录波档可用时基本不必走,要走**先问用户** |
| 红线 | **只许比同片内**:跨转换器无同刻性(V0.1 硬件缺陷)+ STM32 五路另有 1 拍乒乓滞后 → `docs/硬件平台/ADC通道映射说明.md` §7 |
-记录表(按心跳档抄屏;录了波的轮次直接记脚本输出,归档口径见 §8.10 第 1 条):
+记录表(按心跳档抄屏;录了波的轮次直接记脚本输出):
| 发生器相位设定 | C02-UA `Re`/`Im` | C03-UN `Re`/`Im` | 录波文件名|两路 `atan2` 之差 | 结论 |
|---|---|---|---|---|---|
@@ -354,7 +352,7 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| 读数 | `freq(hb): f=.. valid=..`;UI 交流量页 `Hz` |
| 期望(现状固件) | **就是不出数**:幅值门 `FREQ_AMP_MIN 50.0f`(`App/algo/freq.h:62`,`App/algo/freq.c:231` 拿它与基波有效值比)在引脚电压域恒不过 → `valid=0`、`f=0`、UI `Hz` 显 `--` |
| 判据 | **如实报不可测**,而不是报一个看起来对的 50.00。若门限没改却报出 50.00 → 反而是 bug,停下查 `App/algo/freq.c` |
-| 另有一档(需先取得同意) | 临时把 `FREQ_AMP_MIN` 由 `50.0f` 降到 `0.5f` → 重编(`/keil-build`,要 build 锁)+ 重烧 → 扫 45.000 / 50.000 / 55.000 Hz 三点,PC 侧判据 0.02 Hz → 跑完**必须还原**,收尾判据见 §8.9。这一档要改固件重烧,动它之前先问过你;不做也不影响上面那条判据成立 |
+| 另有一档(需先取得同意) | 临时把 `FREQ_AMP_MIN` 由 `50.0f` 降到 `0.5f` → 重编(`/keil-build`,要 build 锁)+ 重烧 → 扫 45.000 / 50.000 / 55.000 Hz 三点,PC 侧判据 0.02 Hz → 跑完**必须还原**(撤销补丁 + 重编 + 重烧,`git diff` 核对干净)。这一档要改固件重烧,动它之前先问过你;不做也不影响上面那条判据成立 |
| 坑 | 非整 50 Hz 时 `meas:` 拍频式跳动属预期 → **扫频读 `freq(hb)` 别读 `meas:`**(`docs/任务规划/数据可信.md` §8 同一条);取源先 `UA`(C02)再退 `IA`(C01)(`App/algo/freq.c:47`)——注 `UA` 走 UA 源;若只注 `IA`,测频跟 IA 走 |
记录表:
@@ -369,10 +367,8 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
- ⚠ **50 Hz 同幅正弦造不出锁存,是实现约束不是固件缺功能**:锁存条件"连续 `ADC_RAIL_N_RUN = 20` 拍贴同一侧轨带"(`App/algo/adc_health.h:174`),`adc_health_rail_watch()` 里**任何一拍回中带就清零**;1 kHz 下一个 50 Hz 周波只有 20 点、正半周必落中带 → 连续贴底最长 ≈ 209°/360° × 20 ≈ **11 拍 < 20**。
- **轨带数值**(`App/algo/adc_cal.c:452` `adc_cal_rail_ths()`,TEMP 不监视):STM32 贴底 = 码 ≤ **81**(2 % FS ≈ 65 mV)、贴顶 = 码 ≥ 4013;TPAFE = ±32112 码(≈ ±4.9 V)→ **TPAFE 侧在 ±2 V 判据上限内造不出来**,只有 STM32 五路能做。
- **直流削顶档(首选,零固件改动)**:发生器切 **DC −1.00 V** 注 `UB` 端子侧,保持 ≥5 s。期望:`rail=0x002`、`edge=0x002`、一条 `[ERR] rail: edge=0x2 sticky=0x2 (code-domain, 20-run+release)`(`App/task/adc_task.c:428`)、`adc: UB` 贴 0。撤掉注入后 **sticky 位不随输入恢复而清**(只有 `adc_health_rail_init()` / 复位才清)→ 复位一次记录"是否随复位清",本轮战果之一。
-- **工频对照档**:原接法注 50 Hz → 连续贴底最长 ≈ **11 拍 < 20**,**不锁存是预期**,非失败非战果。
- **2 Hz 低频削顶档**:发生器 Vpp 2.828 V 但**频率设 2.0 Hz** → 负半周 250 ms = 250 拍贴底 ≥ 20 → 锁存;顺带证"贴轨检测与工频无关"。
-- **反向假阳性**:注 Vpp <130 mV(峰值 <65 mV)的 50 Hz 小信号会让 `UB` 贴底**锁存**——"信号太小进不了中带",不是削顶。读 `rail` 时一并排除。
-- **与 `cl` 区分**:`cl=0xE6` 是**来源派生**静态贴底掩码(`docs/任务规划/数据可信.md` §2.6),削顶轮要动态 `rail=`/`edge=`;别把 `cl` 当本轮战果。
+- **反向假阳性**:注 Vpp <130 mV(峰值 <65 mV)的 50 Hz 小信号会让 `UB` 贴底**锁存**——"信号太小进不了中带",不是削顶。读 `rail` 时一并排除(`cl=0xE6` 静态掩码另见 §8.2 前置门第 3 条,别当本轮战果)。
记录表:
@@ -412,7 +408,7 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
| 注入分量 | 发生器设定 | UI 读数 (V) | 期望 (V) | 偏差 % | `phasor` 旁证 | 结论 |
|---|---|---|---|---|---|---|
| A 只注二次 | 100.00 Hz / Vpp 0.453 V | `Ia=0` / `Ia2=0.158` / `Ia5=0` | 0.160 / ≈0 | **−1.25 %** | —(A/B 步落在 18:22–18:28 日志盲区,心跳旁证未留) | **过**(±2 % 内;选择性成立——100 Hz 没漏进基波 / 五次桶) |
-| B 只注五次 | 250.00 Hz / Vpp 0.453 V | `Ia=0` / `Ia2=0` / `Ia5=0.153`(2026-11-04 复测;11-02 初读 0.152) | ≈0 / 0.160 | **−4.4 %**(超 ±2 %) | —(两轮均未留 250 Hz 心跳旁证——带外信号 `meas:` 判不了,见上卡旁证行) | **待定分诊**:选择性成立(基波 / 二次桶 = 0),幅值超差 −4 ~ −5 % 两轮复现。分诊一刀:**万用表(真有效值档)直量发生器输出端**——表读 ≈0.153 → 发生器 250 Hz 带载下坠、板端忠实,本行改判"过(按实际注入基准)"并补记实测;表读 ≈0.160 → 板端 IA 前端 250 Hz 频响嫌疑,登记专项(R19 通道滤波网表核算),不再归因仪表 |
+| B 只注五次 | 250.00 Hz / Vpp 0.453 V | `Ia=0` / `Ia2=0` / `Ia5=0.153`(2026-11-04 复测;11-02 初读 0.152) | ≈0 / 0.160 | **−4.4 %**(超 ±2 %) | —(两轮均未留 250 Hz 心跳旁证——带外信号 `meas:` 判不了,见上卡旁证行) | **过——已按「板端真实衰减」关闭(2026-11-04)**:−4.4 % = IA 前端差分滤波(C35 = 100 nF + R19/R21 各 1 k,一阶低通 fc ≈ 796 Hz)在 250 Hz 的真实衰减,**板端读数忠实,量与算都没错**(模型与数据 `docs/硬件平台/ADC通道映射说明.md` §8.2);工频 50 Hz 仅 −0.2 %,不受影响;选择性成立(基波 / 二次桶 = 0);谐波功能要板改(C35 换 10 nF)——登记 `docs/任务规划/登记簿.md` §3 |
| C 纯基波 | 50.00 Hz / Vpp 0.453 V(实际按 0.453 注,Vpp 2.263 那档未做) | `Ia=0.160` / `Ia2=0` / `Ia5=0`(2026-11-04 复测;11-02 初读 0.159) | ≈0 / ≈0 | 基波 **0.0 %**(对 0.160 读数;11-02 为 −0.6 %) | **有**:18:33:43 起串口可见窗 `C01 rms=1 / C04 rms=0 / C05 rms=0`,与 C 步工况吻合;2026-11-04 复测窗串口 `ia_mv=159↔160` 同刻印证屏显 | **过**(两谐波轨零值经串口旁证补认;基波读数两轮 ≤0.6 %,与幅值轮同档一致) |
| 叠加(原行,**本轮不做**) | 基波 + 二次 + 五次同段 | — | — | — | — | 发生器无谐波叠加 / ARB 功能 → 本轮不做·设备缺口·TC-PHASOR-006 单测覆盖(`test/host/phasor/phasor_test.c`,3 条谱线各 ±1 %,实跑 57/57 PASSED) |
@@ -424,69 +420,4 @@ TPAFE 双极性补码可注负压;STM32 单极性负半周测不了。UA/UN/IA
& '.venv\Scripts\python.exe' test/host/wave_read.py fft WAVE.BIN --ch 4 --all
```
-`fft` 每整周波给一行:**基波有效值 + 2 次与 5 次谐波有效值**(mV,浮点重算),±2 % 是定量判据;`--ch` = 段内通道表序,`IA` = 4(`UA UB UC UN IA IB IC IN`,TEMP 不录,`App/algo/wave_ring.h:216`)。UI 目检退**旁证**(证"板上与脚本算的是同一个东西"),不是替代判据。THD 与根均方不在本轮(`docs/任务规划/数据可信.md` §4.6.5)。
-
-### 8.6 顺序与耗时(一个台架轮次跑完)
-
-| 序 | 做什么 | 估算 | 注 |
-|---|---|---|---|
-| 0 | 前置门 + 基线 30 s | 10 min | §8.2,不满足先停 |
-| 1 | 幅值轮(三档幅值) | 15 min | 先做 |
-| 2 | 波形轮(方波 / 三角,峰值对齐) | 15 min | 记万用表响应类型 |
-| 3 | 相位轮:段文件相对相位(`UA`/`UN` 同源,再改 90°) | 20 min | 没录到段文件时退心跳档 |
-| 4 | 测频轮(判"如实报不可测") | 5 min | 现状就该不出数 |
-| 5 | 削顶轮:50 Hz 对照 + 直流档 + 2 Hz 档 + 复位复核 | 30 min | **单独日志**,§8.7 |
-| 6 | 谐波轮:段文件 `fft` + UI 旁证 | 25 min | §8.5 谐波卡 |
-| 7 | 段文件取回 + 脚本归档(FTP + `dump`/`fft`/`shape`/`plot`) | 15 min | 取完立刻改名,100 号轮转 |
-| — | 改固件的档:测频门限降到 `0.5f` / 相位串口行抬十倍读数分辨率 | +40 min | **这两档要改代码、重烧固件,动手前一定先问过用户**;各含重编 + 烧录 + 还原 |
-
-合计约 **135 min**(= 上表各行相加;不含"需用户点头"两档)。各步含换线/改设定/抄表的间隙,前后一步可留点重叠,实际往往用不满。段文件取回与脚本跑集中在第 7 步统一做,中间各步只"触发 + `seg=` +1",避免反复插拔网线。
-
-### 8.7 `[ERR]` 判读与 `/serial-boot-test` forbidden 冲突说明(削顶轮单独一份日志)
-
-- 削顶轮**故意造** `[ERR] rail: edge=… sticky=… (code-domain, 20-run+release)`,而 `/serial-boot-test` forbidden 含 `[ERR]`(AGENTS.md「构建与验证」)→ **别拿 `/serial-boot-test` 标记校验当结论**:改人工判读,归档写清"预期 [ERR]:贴轨锁存负向用例"(`docs/任务规划/数据可信.md` §8 风险表同一条)。
-- 除这一条 `[ERR] rail:`,**任何 `[ERR]` 都是失败**;四个 Fault 崩溃日志也以 `[ERR]` 开头 → 出现 Fault 即本次不通过(`docs/子系统设计/看门狗设计说明.md` §10),别接着注入。
-- 每次开机 `rail:` 沿只打一条、`SYSLOG` 只记一次(设计不是漏报);想看第二条沿就复位一次。
-
-### 8.8 失败分诊(先查这一列,别急着改固件)
-
-| 现象 | 先查 | 依据 |
-|---|---|---|
-| 与万用表差约 2 倍 | 发生器输出端接设成 50 Ω | §8.2 表第 2 行 |
-| 差约 5.3 倍,或数带 6553.6 / 1241.2 痕迹 | 拿错刻度尺,或把 `adc:` 码值当 mV 读 | §2 两把尺子、§4「码是什么」 |
-| `phasor` 行 `rms` 只 10 格量级 | 正常(×0.1),不是 bug | §4 尾注、§8.1 |
-| 非整 50 Hz 时 `meas:` 拍频式跳动 | 预期:瞬时透传、200 ms 不是平均窗 → 改读 `freq(hb)` | `docs/任务规划/数据可信.md` §8 风险表 |
-| 50 Hz 正弦注 `UB` 但 `rail` 不锁存 | **预期**(连续贴底不足 20 拍)→ 改用直流档或 2 Hz 档重注 | §8.5 削顶卡 |
-| 改 DC 也不锁存 | 释放沿前提没满足:开机后该路从未出现中带样本 → 先建基线再注 | `App/algo/adc_health.c`、§8.2 前置门末条 |
-| 撤掉注入后 `rail` 仍非 0 | 锁存语义(sticky),只 `adc_health_rail_init()` / 复位才清 → 复位后仍不清**才是** bug | §8.5 削顶卡直流削顶档 |
-| 读数带与幅值无关的偏移或漂移 | 共地 / 地环 | §8.2 共地行 |
-| `meas: seq` 不涨 | 发布闸门停 → 先查采集链,别判波形 | §8.2 前置门 |
-| `health:` 或 `sampling fault:` 亮 | 与注入波形无关:`adc_health` 的位只吃序号差、错误计数增量与 tick 差(`App/algo/adc_health.c:91-189`)→ 查节拍 / 丢帧,别查发生器 | §8.2 前置门 |
-| 9 路全 0 | 读作"没数据",不是"输入零" | §4 尾注 |
-| `wave_read.py` 报错退出 / 拒画 | **这是正确行为**:CRC 不符或零长度必须拒收而不是画出半张图 → 取回一段、查是不是传输半品;仍拒 `dump` 看双 CRC16 哪个不符 | `test/host/wave_read.py` 文件头 |
-| `shape --strict` 说实测与段头不等 | 先分量具:段头 `CLIPPED` bit 是**来源派生、从不实测**;DC 偏移 / 极小注入 / 非驱动通道该换 `--clip-superset` | §8.5 削顶卡段文件档 |
-| 触发后 `seg=` 不涨或 `ovf` 涨 | 落盘路径在 defaultTask、卷空闲后才搬段,先等几秒;仍不涨查 `wave:` 行三个计数与 `/wave` 目录可写(`[ftp]` 写权限)。⚠ **`drop` 每次触发后涨一截是设计内**(SEALED 窗口期间新样本一律丢弃并计点,`App/algo/wave_ring.c:50`,一丢一拍加 8):2026-11-04 实测 804 ms 保持窗 → `drop` +6632 = 829 拍 ×8,涨完即冻结;**判失败只看 `err`/`ovf` 非零或 `drop` 持续不停涨** | `App/task/adc_task.c:782` |
-
-### 8.9 还原与收尾清单(临时改动一律还原)
-
-| 临时改动 | 还原判据 |
-|---|---|
-| 测频轮改码档:`FREQ_AMP_MIN` 50.0f → 0.5f(`App/algo/freq.h:62`) | 还原 + `/keil-build` 0 错 0 警 + `git diff` 的 `App/algo/freq.h` 为空 + `docs/任务规划/数据可信.md` §7 #8 留"本轮台架已还原" |
-| 相位轮抬倍数:`log_phasors()` `* 10.0f` → `* 1000.0f`(`App/task/adc_task.c:209`) | 同上,`git diff` 的 `App/task/adc_task.c` 为空 |
-| bench 定时自抓门(`DTU_BENCH` + `WAVE_BENCH_AUTOCAP` 非 0,`App/task/adc_task.c:153`) | 还原默认 0 + `/keil-build` 0 错 0 警 + `git diff` 的 `App/task/adc_task.c` 为空 |
-| 只动接线与发生器 | `git status` 除归档目录外干净 |
-| 全程 | `test/board/test_config.h` 四套件宏全注释(产品构建);烧录 `-Rst -Run` + 回读校验 |
-
-### 8.10 归档与回写(跑完必做,缺一条不算收尾)
-
-1. **证据归档** → `docs/测试说明/测试数据/boot_log_data/`(日期_主题_类型.txt):`20261104_ac_amp_meas_log.txt`、`20261104_ac_clip_rail_log.txt`;UI 照片同目录。**录波档多用例多带两份**:段原件(`20261104_ac_phase_wave.BIN`)+ 脚本输出(`fft`/`shape`/`dump` 文本 + `plot` 图)——录波档证据本体是**那段原始码值**,日志只是旁证;段原件被覆盖就取不回来,先改名再触发下一段。
-2. **实测结论回写** → `docs/硬件平台/ADC通道映射说明.md` §8.1 之后**新开一节**(`docs/任务规划/数据可信.md` §5 DoD 这么分)。本文只留"怎么跑",**不抄实测数**。
-3. **本文回写** → 只在 §8.1 表下加一句指针("YYYY-MM-DD 已跑通,实测见 …");**不建第二份结论表**(`docs/文档规范.md` 同一事实只详述一处)。
-4. **判据一致性** → 本文 §8 期望值算术、接法与证据分档已写进 `docs/任务规划/数据可信.md` §4.6.2(2026-10-29)。再分叉按开头指引块裁定(语义从那节、算术与步骤从本文),**不在本文建第二份判据表**。
-5. **销项** → `docs/任务规划/数据可信.md` §2.7 与 §6 卡片表按"完成即删",属 Ask first,须用户指示。
-
-### 8.11 这一轮证不到什么(别把读数当证据)
-
-判据属主 `docs/任务规划/数据可信.md` §4.6.5(端子二次值 / 精度等级 / 跨转换器相位与功率与对称分量 / THD 与谐波根均方 / 温升 EMC 长时间漂移)。本节按录波能力落地改过三条(2026-10-29 并入录波数据面后):**录波段文件已可用** → 相位 / 谐波走录波档,结论**形状级**非标量级;**板端对表还没跑过**(`docs/子系统设计/故障录波设计说明.md` §10),本轮是第一份实测;**段与发生器无绝对相位锁定**(触发点在段内点 159)→ 只能比同段相对相位;**320 点 = 320 ms**,不等于长时间稳定性。示波器只作旁证。
-
-边界:**算法精度已在纯数字域钉住**——`test/host/phasor/phasor_test.c` TC-PHASOR-003/004/006、`test/host/freq/freq_test.c` J1,全把已知正弦直接灌 `sample_ring`、绕开 `adc_cal` 折算(幅值是工程量口径非引脚 µV)。§8 只证"信号到 `sample_ring` 之前":发生器刻度与端接、前端串阻与滤波电容幅频、两转换器同刻性、码到 mV 折算、各处打印的量化损失。过**不等于**"算法精度已实测验证"。
+`fft` 每整周波给基波与 2 次/5 次谐波有效值(mV,浮点重算),±2 % 是定量判据;`--ch` = 段内通道表序,`IA` = 4(`UA UB UC UN IA IB IC IN`,TEMP 不录,`App/algo/wave_ring.h:216`)。UI 目检只是**旁证**(证"板上与脚本算的是同一个东西"),不是替代判据。THD 与根均方不在本轮(`docs/任务规划/数据可信.md` §4.6.5)。
diff --git a/docs/测试说明/测试数据/boot_log_data/20261104_ac_ia_rc_model.txt b/docs/测试说明/测试数据/boot_log_data/20261104_ac_ia_rc_model.txt
new file mode 100644
index 00000000..7efc8fbe
--- /dev/null
+++ b/docs/测试说明/测试数据/boot_log_data/20261104_ac_ia_rc_model.txt
@@ -0,0 +1,17 @@
+fc = 795.8 Hz (R19+R21 = 2000 Ω, C35 = 100 nF)
+
+ f/Hz |H|衰减% 相位° 实测偏差% 残差% 备注
+ 50.0 -0.20 -3.6 -0.63 -0.43 C 行 纯基波(复测 0.160 → 0.0 %)
+ 100.0 -0.78 -7.2 -1.25 -0.47 A 行 单注二次
+ 250.0 -4.60 -17.4 -4.38 0.22 B 行 单注五次(11-02 初读 0.152 = −5.0 %)
+
+产品含义外推(同一 1k+1k+100n 拓扑,按谐波次数):
+ 5 次 = 250 Hz → 衰减 -4.6 %
+ 7 次 = 350 Hz → 衰减 -8.5 %
+ 9 次 = 450 Hz → 衰减 -13.0 %
+ 11 次 = 550 Hz → 衰减 -17.7 %
+ 13 次 = 650 Hz → 衰减 -22.6 %
+ 15 次 = 750 Hz → 衰减 -27.2 %
+ 21 次 = 1050 Hz → 衰减 -39.6 %
+
+若 C 改小 10×(10 nF):fc = 7958 Hz,21 次(1050 Hz) 衰减仅 -0.9 %
diff --git a/docs/测试说明/测试数据/boot_log_data/20261104_ac_manifest.txt b/docs/测试说明/测试数据/boot_log_data/20261104_ac_manifest.txt
index ae20f5f0..ea6166ca 100644
--- a/docs/测试说明/测试数据/boot_log_data/20261104_ac_manifest.txt
+++ b/docs/测试说明/测试数据/boot_log_data/20261104_ac_manifest.txt
@@ -10,3 +10,4 @@ e5dc076bc4c975eac92f93b2db8e0e81 相位轮 0°/90° 段原件(触发 19:15:32
b853cd0c34d3698184782a32cb34c2d2 无归属切换瞬态段(触发 19:22:19,UA 1408 mVpk 瞬态,不判任何行,留证溯源) 5250 B 20261104_ac_unattributed_wave10.BIN
599e8c5b79a590089f3bd47134c2e1be 6442 B 20261104_ac_wave09_scriptout.txt
783b45fe3fcf5034a0a84954c34a2d5d 6033 B 20261104_ac_wave10_11_scriptout.txt
+236c34c4f33105d7c653f7939d3a2e3c 谐波 B 行归因证据:前端差分 RC 三点拟合模型输出(脚本 ia_rc_model.py,见登记簿 §3 与通道映射 §8.2) 818 B 20261104_ac_ia_rc_model.txt
diff --git a/docs/硬件平台/ADC通道映射说明.md b/docs/硬件平台/ADC通道映射说明.md
index 1468489b..56511b03 100644
--- a/docs/硬件平台/ADC通道映射说明.md
+++ b/docs/硬件平台/ADC通道映射说明.md
@@ -236,11 +236,22 @@ Vpp,端接高阻),万用表 FNIRST-DMT-99(判为真有效值档,判别
| 相位 | **过(录波档 ≤2°)**:同段 `UA`(表序 0)vs `UN`(表序 3),同片 TPAFE 内比 | 0°/0° 段 Δφ = **0.07°**(WAVE06,11-02);0°/90° 段 Δφ = **90.05°**、偏差 0.05°、逐周波漂移 ≤0.01°(WAVE09,11-04,16 整周波全过);段与发生器无绝对相位锁,只比同段相对差 |
| 测频 | **如实报不可测成立**(现状判据就是不出数) | 两轮合计 561 行 `freq(hb)` 全部 `f=0 valid=0`(含满幅注入段);幅值门 `FREQ_AMP_MIN=50.0f`(`App/algo/freq.h:62`)在引脚域恒不过——标定态或改门限前测频轮不出数是**预期** |
| 削顶 | **直流档锁存成立、sticky 实证**;低频档与复位复核按裁定关闭 | UB 注 DC −1.00 V:`rail=0x002 edge=0x002`、唯一 `[ERR] rail: edge=0x2 sticky=0x2`、`adc: UB` 钉 0 码;撤注后恒持 ≥30 min(sticky 只有 `adc_health_rail_init()` 清,即复位)。50 Hz 同幅不锁存=预期(≈11 拍<20)。2.0 Hz 低频档与"复位清 sticky"复核**用户裁定 2026-11-04 不做**(判据链已被直流档闭合) |
-| 谐波 | **选择性两轮成立**;幅值 A/C 过、B 待分诊 | 单注 100 Hz → `Ia2` −1.25 %;纯基波 → `Ia` 0.0 %(复测)/ −0.6 %(初测)、两谐波桶=0;单注 250 Hz → `Ia5` **−4.4 %**(两轮复现 −4 ~ −5 %,超 ±2 %)——分诊一刀=万用表直量发生器输出端,见执行手册记录表 B 行 |
+| 谐波 | **选择性两轮成立**;幅值 A/C 过、B 已归因板端前端 RC 并关闭 | 单注 100 Hz → `Ia2` −1.25 %;纯基波 → `Ia` 0.0 %(复测)/ −0.6 %(初测)、两谐波桶=0;单注 250 Hz → `Ia5` **−4.4 %**(两轮复现 −4 ~ −5 %)——归因:差分滤波 C35 = 100 nF(用户确认)+ R19/R21 各 1 k(`docs/硬件平台/V0.1.tel`:49;拓扑 = 1 k 串联 + 1 k 接差分负端、不分压,`docs/产品需求/产品需求设计文档.md` FR-ADC-5)→ IA 差分传递 = 一阶低通 **fc ≈ 796 Hz**,该 −4.4 % 是前端在此频点的**真实衰减,板端读数忠实**;工频 50 Hz 仅 −0.2 %,不受影响(模型与数据见下段) |
**观察项(都判读过、非缺陷)**:TPAFE 输入浮空读数钉在 ≈1743/1747 mV 静态(撤线后 UA/IA 出现——
读 `meas:` 时先确认接线);未接线的 STM32 侧引脚码值随环境缓漂(UC/IC/IN/T),不消费即可;
录波触发后 `drop` 涨一截是 SEALED 窗口设计内(`App/algo/wave_ring.c:50`,涨完冻结,判失败只看
`err`/`ovf`);采集链健康两轮全程 Δ9998/10 s、`idle=0`、`adc1_err=0`(前置门 8 条全过)。
+
+**IA 前端差分滤波 = 低通 fc ≈ 796 Hz(2026-11-04,谐波 B 行定量归因)**:工频测量够用、
+谐波测量不够用——同拓扑外推 5 次 ≈ −4.6 %(出 ±2 % 判据)、7 次 −8.5 %、9 次 −13.0 %、11 次
+−17.7 %、13 次 −22.6 %、15 次 −27.2 %、21 次(1050 Hz)−39.6 %;C35 若改 10 nF 则 fc ≈ 8 kHz,
+21 次仅 −0.9 %。谐波功能产品化的硬件前置 = 板改小 C35 + 清点其余各路差分滤波电容容值(已登记
+`docs/任务规划/登记簿.md` §3)。**为什么改板而不是软件逐阶修正**:修正系数依赖这颗电容的实际容值,
+而电容有容差、随温度漂,每块板、每个温度都不一样,修正表跟不上;二次谐波制动这类"拿某次谐波幅值
+与基波比值"的判据,比值被前端畸变后判定就不可信。换 10 nF 后测量带内是平的,板端读数直接可信,
+不需要修正。证伪条件(将来有示波器再复核):该低通预测 250 Hz 差分分量额外滞后
+≈17°;模型与三点拟合 `docs/测试说明/测试数据/boot_log_data/20261104_ac_ia_rc_model.txt`。
+
**边界**:本节不证端子二次值 / 精度等级 / 跨转换器相位(V0.1 硬件缺陷)/ THD——见
`docs/任务规划/数据可信.md` §4.6.5。
diff --git a/tools/arch_diagram/gen_ac_rounds_svg.py b/tools/arch_diagram/gen_ac_rounds_svg.py
index e1bd7a36..5303d859 100644
--- a/tools/arch_diagram/gen_ac_rounds_svg.py
+++ b/tools/arch_diagram/gen_ac_rounds_svg.py
@@ -97,9 +97,9 @@ CARDS = [
"UA(R31)与 UN(R28)同源同幅 Vpp 2.828 V",
"同段内相位差 ≈0°,B 通道改 90° 应跟到 ≈90°,±2°",
"wave_read.py fft 定量;phasor(hb) 只核象限"),
- ("测频轮", "A 档无数 = 过", C_AMBER, BG_AMBER, "sweep",
+ ("测频轮", "测不出数 = 过", C_AMBER, BG_AMBER, "sweep",
"UA 同幅值轮接法,扫 45 / 50 / 55 Hz",
- "A 档如实报不可测:valid=0、UI 显 --;报 50.00 反而是 bug",
+ "如实报不可测(现状固件):valid=0、UI 显 --;报 50.00 反而是 bug",
"freq(hb) 0.01 Hz;UI Hz"),
("削顶轮", "负向 · 单独日志", C_ROSE, BG_ROSE, "clip",
"UB(R52):DC −1.00 V 保持 ≥5 s,或 2.0 Hz 正弦",
@@ -111,8 +111,8 @@ CARDS = [
"wave_read.py fft --ch 4;UI Ia2 / Ia5 目检旁证"),
]
-FOOTNOTE = ("顺序与耗时见 §8.6(约 135 min 一趟 session);[ERR] 判读见 §8.7,失败先查 §8.8 分诊表。"
- "波形缩略图只表形状,不代表真实幅度刻度。")
+FOOTNOTE = ("六轮已跑完(2026-11-02 / 11-04):实测结论见 docs/硬件平台/ADC通道映射说明.md §8.2,"
+ "谐波 B 行已归因板端前端 RC(fc≈796 Hz)。波形缩略图只表形状,不代表真实幅度刻度。")
# ----------------------------- 工具函数 -----------------------------
def esc(s):