docs(data-trust): 卡 0 注入验证闭环——标 ✅ 保留行,不按"完成即删"

卡 0(已知电压注入验证)2026-10-27 台架六项判据全 PASS,但**不删行**。
`数据可信.md` 卷首明文规定:卡 0 被 `App/task/adc_task.c` 的 v3.3 修订行与
`adc:` 行注释引用为口径出处("「数据可信」卡 0 注入验证的唯一连续读出口"),
删行会让代码头注释失去出处——这是"完成即删"在该文件的既定例外。

- 状态图例新增 ✅ 已闭环,限定"仅限被代码头注释指称的卡,保留行不删";
  §5 标题同步注明例外。
- 卷首"只剩三项"改为"只剩两项"(0b / 12),并说明卡 0 为何保留。
- §5 表:卡 0 状态 ⬜ → ✅;表下补"闭环结论"块(零点 0~5 码、R²=0.9999997、
  斜率 6544.2 码/V 偏差 −0.14 %、映射一一对应、极性对称性 ≤0.34 %、
  frames 1000 Hz),并记两项残差(最小二乘残差与 IB 零点贴上限)。
- §3 M4 行:① 已达成(原"① 与 ⑤ 待卡 0"),只剩 ⑤ 的台架面待卡 12。
- §2.6 首帧 ~1000 码的疑问结案:实测零点 0~5 码,首帧是上电瞬态,
  且 TPAFE ~11450 / STM32 ~1000 是两个转换器各自的零位。
- §6 顺序图与斜率规则:卡 0 标 ✅;补记实测偏差 −0.14 % 未触发规则,
  并说明该规则此次的真实价值是反向排除 2:1 分压(若分压斜率会掉到 ~3277)。
- §7 已定案:注入点修正为**串联电阻子板侧(`AINn` / `U5` 排针,③ 段的端子侧)**,
  原"在 ADC 引脚侧"作废——`U5` 排针才是可安全接触的最低一级。
- §8 风险表:ROM 默认系数风险解除(理论 LSB 被实测支持),
  加压烧板行改为"卡 0 已按 ≤2 V 执行完毕,端子级额定值仍须等 0b"。
- `ADC前端注入验证流程.md` §5.6 第 3 条:把"删行不留记录"改为记录实际处置。
This commit is contained in:
2026-10-27 21:35:46 +08:00
parent 87615b2e99
commit 8f7c141a0b
3 changed files with 75 additions and 24 deletions
+38 -19
View File
@@ -1,14 +1,19 @@
# 数据可信(等待台架与外部资源)
> **只想知道要做什么:直接看 §5。** 当前只剩三项:卡 0 已知电压注入(万用表)→
> 卡 0b 端子变比(子板)→ 卡 12 标准源两点标定。它们都等待台架或外部资源,
> **只想知道要做什么:直接看 §5。** 当前只剩**两项**:卡 0b 端子变比(子板)→
> 卡 12 标准源两点标定。它们都等待台架或外部资源,
> **当前不占编码道;现在做 UI,见 `UI补齐.md`。**
> (卡 0 已知电压注入已于 2026-10-27 台架闭环、六项判据全 PASS,实测见
> `docs/硬件平台/ADC通道映射说明.md` §8.1;**该行按"口径锚点"保留并标 ✅,不按"完成即删"删行**,
> 原因见下条。)
>
> **本文同时是设计约束的归属文件,不是纯任务卡。** 排序只看
> `docs/任务规划/README.md` §2;后续事项统一索引在 `登记簿.md` §7。
> ⚠ §2.1 / §2.3 / §2.6 / §4.1~§4.5 / §7 / §8 / §9 / §10 与卡 0 / 0b / 12 都被**代码头注释**引用为
> 口径出处(`adc_cal.*` / `meas.*` / `cfg_file.*` / `prot_elm` / `protect_task.c` / `ui_data*`)——
> 它们是现行规范、不是"已完成记录",不要当历史删掉。上游分析见
> 它们是现行规范、不是"已完成记录",不要当历史删掉。**卡 0 已闭环但仍留在 §5 表里**,
> 就是因为 `App/task/adc_task.c` 的 v3.3 修订行与 `adc:` 行注释都按"卡 0"指称那行日志的用途;
> 删行会让代码头注释失去出处。上游分析见
> `docs/问题记录/采集与数据处理短板评测.md`。
>
> **修订**:2026-10-23 建档。
@@ -79,7 +84,9 @@
> 另一个必须查清的现象:2026-10-10 首帧读数 TPAFE 侧 `UA=11429 / UN=11454 / IA=11452`、
> STM32 侧 `UB=1018 / UC=1044 / IB=943 / IC=1069 / IN=1052`——**同片各通道几乎相同**,
> 而"1k 到地"在无输入时本应把节点拉到 0 V。首帧本就不是稳态值,不能据此定论,
> 但也不能当成"已正常"。卡 0 的零点判据专门查这一条。
> 但也不能当成"已正常"。**卡 0 的零点判据已查清(2026-10-27)**:8 路短接 AGND 后零点
> 0~5 码(TPAFE ≤4.6 mV / STM32 ≤4.0 mV),远小于首帧的 ~1000——首帧是上电瞬态,
> 不能当零点用。另注:TPAFE ~11450 与 STM32 ~1000 是两个转换器**各自**的零位,不是同一问题。
---
@@ -89,10 +96,11 @@
| 里程碑 | 退出判据(全部满足才算完成) | 服务分类 | 状态(2026-10-25) |
|---|---|---|---|
| **M4 系数与量纲** | ① **至少 1 路电压通道经已知电压注入验证**(卡 0),斜率与理论 LSB 偏差 ≤2 %;② `adc_cal` 折算落地,采样环里是**引脚电压 V**而非码值(`eng=0`;若卡 0b 已给变比则直接到二次值 `eng=1`);③ 8 通道系数/零点可落盘、上电加载失败回退 ROM 默认;④ 三处下游常数按工程量重定并注明依据;⑤ "未标定 → 保护闭锁"生效;⑥ 量纲回归用例(不该动作时不动作)通过 | Standard | 🔶 **未收口**:②③④⑥ 已达成,**① 与 ⑤ 的台架面待卡 0**(台架不在手边) |
| **M4 系数与量纲** | ① **至少 1 路电压通道经已知电压注入验证**(卡 0),斜率与理论 LSB 偏差 ≤2 %;② `adc_cal` 折算落地,采样环里是**引脚电压 V**而非码值(`eng=0`;若卡 0b 已给变比则直接到二次值 `eng=1`);③ 8 通道系数/零点可落盘、上电加载失败回退 ROM 默认;④ 三处下游常数按工程量重定并注明依据;⑤ "未标定 → 保护闭锁"生效;⑥ 量纲回归用例(不该动作时不动作)通过 | Standard | 🔶 **未收口**:①②③④⑥ 已达成(① 于 2026-10-27 台架实测闭环,UA 斜率偏差 −0.14 %,见 `docs/硬件平台/ADC通道映射说明.md` §8.1),**只剩 ⑤ 的台架面待卡 12**(需标准源置 `VALID` 才能验闭锁→解锁) |
**M5 遥测链 / M6 运行参数与点表**:均已达成,口径沉淀在 `App/algo/meas.h`、`App/algo/run_par.h`
头注释与 §4.5;M5 的"104 上送值与**工程量**一致"仍挂卡 0 / 卡 12(工程量口径尚未成立)。
头注释与 §4.5;M5 的"104 上送值与**工程量**一致"仍挂卡 0b / 卡 12(卡 0 只证到"引脚电压"口径,
二次值要等 0b 的变比)。
> **不进本波退出判据的两项增强**:谐波**方和根真有效值**(挂
> `docs/算法/继电保护功能复现规划.md` 「遥测谐波轨(可选)」)与快照**4 点平均平滑**——随谐波轨立项一起做;
@@ -207,38 +215,47 @@ typedef struct {
---
## 5. 任务卡(五字段;完成即销项删行)
## 5. 任务卡(五字段;完成即销项删行,例外见状态图例)
> 资源图例:🔴 台架(COM6/ST-LINK,`bench.lock` 独占)· 🟡 外部(标准源 / 子板原理图)· 🟢 纯软件。
> 状态:⬜ 未开始 · 🟦 进行中。**新条目一律用语义标识,不新增字母+数字编号**
> (规则见 `docs/任务规划/README.md` §0)。
> 状态:⬜ 未开始 · 🟦 进行中 · ✅ 已闭环(**仅限被代码头注释指称的卡,保留行不删**)。
> **新条目一律用语义标识,不新增字母+数字编号**(规则见 `docs/任务规划/README.md` §0)。
> 序栏 0 / 0b 只为阅读顺序(补的是 §2.6 这一前置验证),1~12 的编号与外部引用保持不变。
> **顺序:0 → 0b → 12**。**卡 0 是唯一"只需一块万用表"的卡**,没有外部依赖,是今天就能做的
> 第一步;它同时是 M4 ①、卡 12 与 B10 送检的前置。
> **顺序:0 ✅ → 0b → 12**。卡 0 已于 2026-10-27 台架闭环,是 M4 ①、卡 12 与 B10 送检的前置**已解除**;
> **下一步做卡 0b**(等子板实物或原理图)。
> **卡 0 的台架执行步骤**(注入点清单、期望码值、五步流程与现场记录表)见
> `docs/测试说明/ADC前端注入验证流程.md`——本表只写判据,不写怎么接表笔。
| 序 | 任务 | DoD(可验证验收判据) | 硬依赖 | 资源 | 写范围 | 状态 |
|---|---|---|---|---|---|---|
| **0** | **已知电压注入验证(首次功能级 ADC 验证)** | 在**可安全接触的最低一级**(ADC 引脚侧或端子侧,二选一并在证据里写明注入点)用板载 3.3 V 轨经电位器注入 **3 个直流点**(≈0.3 / 1.0 / 2.0 V),每点**同时**用万用表读注入点实际电压 + 读 `adc_input_raw()` 码值:① 三点线性拟合 **R² ≥ 0.999**;② 注入点在引脚侧时,斜率须与 §2.1 理论值(TPAFE 6553 码/V、STM32 1241 码/V)偏差 **≤2 %**;在端子侧时把斜率记为**实测变比**;③ 注入 0 V(短接 AGND)零点 \|码\| ≤ 30(TPAFE)/ ≤ 5(STM32),并解释首帧 ~1000 码的来源;④ **逐通道映射确认**:8 路电气量逐个注入,确认"注入哪一路、哪一路语义变化",语义与下标不符即映射错;⑤ TPAFE 侧原"BUSY 有脉冲"判据**改用固件帧计数**(注入前后 `tpafe5160_frame_seq()` 仍严格 1000 Hz 递增)——不需要示波器;⑥ 结论写回 `docs/硬件平台/ADC通道映射说明.md` §8,把"尚未执行"改为实测值 + 日期 | — | 🔴 + 万用表(**不需信号源 / 示波器**) | `docs/硬件平台/ADC通道映射说明.md`、`docs/测试说明/boot_log_data/` | ⬜ |
| **0** | **已知电压注入验证(首次功能级 ADC 验证)** | 在**可安全接触的最低一级**(ADC 引脚侧或端子侧,二选一并在证据里写明注入点)用板载 3.3 V 轨经电位器注入 **3 个直流点**(≈0.3 / 1.0 / 2.0 V),每点**同时**用万用表读注入点实际电压 + 读 `adc_input_raw()` 码值:① 三点线性拟合 **R² ≥ 0.999**;② 注入点在引脚侧时,斜率须与 §2.1 理论值(TPAFE 6553 码/V、STM32 1241 码/V)偏差 **≤2 %**;在端子侧时把斜率记为**实测变比**;③ 注入 0 V(短接 AGND)零点 \|码\| ≤ 30(TPAFE)/ ≤ 5(STM32),并解释首帧 ~1000 码的来源;④ **逐通道映射确认**:8 路电气量逐个注入,确认"注入哪一路、哪一路语义变化",语义与下标不符即映射错;⑤ TPAFE 侧原"BUSY 有脉冲"判据**改用固件帧计数**(注入前后 `tpafe5160_frame_seq()` 仍严格 1000 Hz 递增)——不需要示波器;⑥ 结论写回 `docs/硬件平台/ADC通道映射说明.md` §8,把"尚未执行"改为实测值 + 日期 | — | 🔴 + 万用表(**不需信号源 / 示波器**) | `docs/硬件平台/ADC通道映射说明.md`、`docs/测试说明/boot_log_data/` | ✅ |
| **0b** | **端子 / 子板变比确认** | 给出"端子电压 → ADC 引脚电压"的比值(万用表同时量端子与引脚,或查子板原理图后实测核对),写入 `docs/硬件平台/ADC通道映射说明.md`;据此判定 `eng` 能否置 1;数据缺失则本波只交付引脚电压并登记缺口 | 0 | 🟡 子板实物或原理图 | `docs/硬件平台/` | ⬜ |
| **12** | **8 通道两点标定与精度验收** | 电压 4 路(UA/UB/UC/UN)+ 电流 4 路(IA/IB/IC/IN)各做两点标定(零点 + 满度,温度不纳入),写入 `[adc_cal]` 并置 `VALID`;误差 ≤ 目标精度(待定:0.5 级 / 1 级);证据归档 | 0、0b | 🟡 标准源 / 继保测试仪 | `docs/算法/`、`docs/测试说明/boot_log_data/` | ⬜ |
> 三张卡的分工:**0b 与 12 都是外部依赖**(子板 / 标准源),0 没有。M4 用板级 LSB 常数即可
> 收口(`eng=0`),但"二次值"真正成立要靠 0b 的变比、`VALID` 置位要靠 12。
>
> **卡 0 闭环结论(2026-10-27,注入点 = 端子侧 `U5` 排针,判据 ①~⑥ 全 PASS)**:零点 0~5 码 ·
> 三点拟合 R² = 0.9999997 · 斜率 6544.2 码/V(vs 引脚侧理论 6553.6,偏差 −0.14 %,**故 ③ 段确为 1:1,
> 判据 ② 按"端子侧斜率 = 实测变比"记为 ≈ 0.999**)· 8 路逐通道映射一一对应 · 极性对称性 ≤0.34 % ·
> 注入前后 `frames` 均 Δ9998/10 s(1000 Hz)。明细与两项残留口径见
> `docs/硬件平台/ADC通道映射说明.md` §8.1。**残差**:最小二乘残差 −2.03/+3.45/−1.42 码(无系统性弓形);
> IB 零点 2~5 码最贴近 ≤5 上限,若后续变大先查 R49 / `AIN9`。
---
## 6. 并行与顺序
```
0 注入验证(万用表)→ 0b 变比(子板)→ 12 两点标定(标准源)
0 ─→ 闭锁验证(VALID 置位后保护才走判据)→ B10 送检
0 ✅ 注入验证(万用表)→ 0b 变比(子板)→ 12 两点标定(标准源)
0 ✅ ─→ 闭锁验证(VALID 置位后保护才走判据)→ B10 送检
```
- **卡 0 斜率规则**:实测斜率与理论 LSB 偏差 >2 % 时**先查前端(分压/变比/焊接)再改系数**——
用系数凑斜率会把硬件的错固化成"标定值"。
- **WIP**:本波已收口,**当前软件道为 0**;三张卡全是台架/外部窗口,串行做即可。
用系数凑斜率会把硬件的错固化成"标定值"。**2026-10-27 实测偏差 −0.14 %,规则未触发**;
这条规则的第一次实战价值在于**反向确认**:若 ③ 段真是 2:1 分压,斜率会掉到 ~3277 码/V,
实测 6544.2 直接把它排除。
- **WIP**:本波已收口,**当前软件道为 0**;剩两张卡全是外部窗口,串行做即可。
并行度规则见 `docs/环境与部署/并行任务工作树方案.md` §7.3。
---
@@ -255,7 +272,9 @@ typedef struct {
**已定案(不再讨论)**:未标定即闭锁(2026-10-25 用户裁定**保持闭锁到标准源到位**,
不缩短解锁路径)· `CFG_VAL_INT` 补引擎类型 · 遥测快照由 `adc_task` 分频发布 ·
温度不纳入线性标定(`adc_cal_flags(TEMP)` 恒 0)· 首次注入在 ADC 引脚侧(卡 0 DoD,≤2 V 直流)。
温度不纳入线性标定(`adc_cal_flags(TEMP)` 恒 0)· 首次注入在**串联电阻子板侧(`AINn` / `U5` 排针,
即 ③ 段的端子侧)**,≤2 V 直流——2026-10-27 按此执行;原"在 ADC 引脚侧"的写法已作废,
因为 `U5` 排针才是可安全接触的最低一级(引脚侧要拆子板)。
---
@@ -267,8 +286,8 @@ typedef struct {
| **标定值把保护"调坏"** | 卡 12 写入错误系数 | `adc_cal_set()` 校验范围(`k` 必须在板级系数 × [0.5, 2.0] 内)+ 写入后回读校验;越界拒绝并留 `[ERR]` |
| **削顶通道被当成可测** | 消费者只看 `k` 不看 `flags` | `adc_cal_flags()` 是唯一查询入口,`adc_cal_apply()` 不返回可用性;单测覆盖"CLIPPED 通道 104 恒 IV" |
| **快照双写** | 104 或 UI 侧也加一个 200 ms 计时器 | 设计约定"唯一发布者 = `adc_task`";其余侧只读,评审时看 `meas_tick()` 的调用点数量 = 1 |
| **未验证的系数被当成定论** | 跳过卡 0 直接冻结 ROM 默认系数 | ⚠ **此风险已部分兑现**:ROM 默认系数已按理论 LSB 冻结,卡 0 仍未跑。实测斜率偏差 >2 % 时**先查前端**(分压/变比/焊接),不用系数去凑 |
| **加压烧板** | 变比未确认就往端子加额定电压 | 卡 0 只加 ≤2 V 直流;端子级上额定值必须在卡 0b 之后,且先量"端子对地通断"确认无直流通路 |
| **未验证的系数被当成定论** | 跳过卡 0 直接冻结 ROM 默认系数 | ✅ **风险已解除(2026-10-27)**:卡 0 实测斜率 6544.2 码/V,与 ROM 默认系数所依据的理论 LSB(6553.6)偏差 **−0.14 %**,默认系数被实测支持。规则保留:日后若某路偏差 >2 %,**先查前端**(分压/变比/焊接),不用系数去凑 |
| **加压烧板** | 变比未确认就往端子加额定电压 | 卡 0 已按 ≤2 V 直流执行完毕;**端子级上额定值仍必须在卡 0b 之后**,且先量"端子对地通断"确认无直流通路 |
---
@@ -237,7 +237,9 @@ TPAFE 是双极性、二进制补码,可以注负压;STM32 是单极性,
实测值 + 日期;
2. 若实测确认无分压,同步在 `docs/硬件平台/ADC通道映射说明.md` §7.1 的链路分段表把第 ③ 段
(`AINn` ↔ 转换器引脚)从"待台架实测"改为实测结论;
3. `docs/任务规划/数据可信.md` 卡 0 销项(按该文件夹"完成即删"的约定,删行不留记录)。
3. `docs/任务规划/数据可信.md` 卡 0 销项。**注意:实际处置是标 ✅ 保留行,不是删行**——
该文件卷首明文规定卡 0 被 `App/task/adc_task.c` 的 v3.3 修订行与 `adc:` 行注释引用为口径出处,
删行会让代码头注释失去出处;这是"完成即删"在该文件的**既定例外**。
## 6. 判据汇总
+34 -4
View File
@@ -169,7 +169,7 @@ STM32(U17)为 LQFP144 脚号。
|---|---|---|
| ① 语义 ↔ 网名 ↔ 板级网名 ↔ 转换器代码通道 | §2/§3/§4/§5 的 17 路映射表 | **定死**(本文件为唯一权威) |
| ② 转换器引脚电压 ↔ 码值 | TPAFE `U_pin = code × 152.59 µV`(code 带符号);STM32 `U_pin = code × 805.66 µV` | **定死**(纯转换器事实,上表) |
| ③ `AINn`(串联电阻子板侧)↔ `ADCn`/转换器引脚 | **变比 = 1:1(2026-10-27 定死)**:`ADCn` 节点只有 {串阻.2, 滤波 C, 转换器引脚},无对地元件(拓扑图见上)。旧"读法 A(2:1 分压 → 305.18 / 1611.3 µV/码)"**作废**——它是把接在差分负端的 1k 误读成对地分压 | **定死**(网表级结论)。卡 0 不再判别分压读法,只确认转换器 LSB 与逐通道映射 |
| ③ `AINn`(串联电阻子板侧)↔ `ADCn`/转换器引脚 | **变比 = 1:1(2026-10-27 定死)**:`ADCn` 节点只有 {串阻.2, 滤波 C, 转换器引脚},无对地元件(拓扑图见上)。旧"读法 A(2:1 分压 → 305.18 / 1611.3 µV/码)"**作废**——它是把接在差分负端的 1k 误读成对地分压 | **定死**(网表级结论 + **2026-10-27 台架实测确认**,见 §8.1:端子侧注入斜率 6544.2 码/V,与引脚侧理论 6553.6 差 0.14 %,不存在 2:1 分压)。卡 0 已闭环 |
| ④ 语义端子(二次端子)↔ `AINn` | 子板/端子板变比:仓库内**无任何文档**(`docs/硬件平台/` 只有 `.tel` 网表与分析报告,无子板原理图;§8 步骤 4) | **缺口**——卡 0b 实测确认;拿不到变比则"端子二次值"不成立、`eng` 保持 0 |
**可评审结论**:
@@ -177,17 +177,47 @@ STM32(U17)为 LQFP144 脚号。
1. **ROM 默认系数按 ② 引脚口径冻结**:TPAFE 通道 `k = 152.59 µV/码`、STM32 通道 `k = 805.66 µV/码`;标定折算的输出单位 = **ADC 引脚电压 V**(`eng = 0`)。该口径**不依赖** ③④ 两个未决项,自本卡定死即成立——这就是 M4 承诺边界止于“引脚电压”的依据(`docs/任务规划/数据可信.md` §2.6)。
2. `docs/任务规划/数据可信.md` §2.1 旧表的“板级系数(输入侧)305.18 / 1611.3 µV/码”**已随 ③ 段定死而删除**(2026-10-27):该值按 2:1 分压折算,而网表证明 `ADCn` 节点无对地元件。板级系数 = 引脚侧系数(152.59 / 805.66);305.18 / 1611.3 今后只允许出现在“±10 V 档 LSB”语境(芯片手册口径),不得再当本板系数。
3. **满量程必须写明参考点**:TPAFE 通道满量程 = ±5 V **@ 引脚**(跨度 10 V);③ 已定 1:1、④ 仍未知,故端子侧满量程只允许写“引脚侧数值 × ④ 比”,**严禁**把“码 × 152.59 µV”当端子二次值写进代码/文档(那是引脚电压)。
4. **待台架实测占位(本轮按用户指示跳过)**:卡 0(三点注入:线性 R² ≥ 0.999、斜率、零点、逐通道映射确认)、卡 0b(端子→引脚变比)、卡 12(两点标定)完成后,回写本节 ④ 行与 §8。实测斜率与 ② 理论值偏差 >2 % 时**先查前端**(分压/变比/焊接),不得用系数凑错斜率(`docs/任务规划/数据可信.md` §8 风险表)。
4. **卡 0 已于 2026-10-27 闭环**(六项判据全 PASS,实测见 §8.1):③ 段 1:1 由台架直接证实,
② 引脚侧 LSB 与实测斜率差 0.14 %,逐通道映射与极性均已验。**仍待实测的是 ④**(端子→引脚
变比,卡 0b)与卡 12(两点标定);两者完成前 `eng` 保持 0、输出单位仍是 ADC 引脚电压。
实测斜率与 ② 理论值偏差 >2 % 时**先查前端**(分压/变比/焊接),不得用系数凑错斜率
(`docs/任务规划/数据可信.md` §8 风险表)。
---
## 8. 逐通道验证方法(上板自检口径)
1. **TPAFE 侧**:对目标 `AIN` 注入 1 V DC → 观察对应 `buf[i]` 变化(UA→`buf[6]`、UN→`buf[5]`、IA→`buf[2]`),同时 U3.14 `BUSY` 有脉冲;**语义与下标不符即映射错**。⚠ **本步无执行记录**(2026-10-23 核查;`docs/硬件平台/V0.0_网表详细分析报告.md` §5.1 第 6 条的同一验证也从未执行)。已排入 `docs/任务规划/数据可信.md` 卡 0,并把两条判据降为**不需要示波器**的口径:① "`BUSY` 有脉冲"改用固件帧计数——注入前后 `tpafe5160_frame_seq()` 仍严格 1000 Hz 递增即等价;② 幅值判据改用万用表读注入点实际电压 + 同时读 `adc_input_raw()` 码值,三点线性拟合(R² ≥ 0.999)。
2. **STM32 侧**:对目标引脚(如 PC4=UB)注入 0.5 V → 读 `ADC_CHANNEL_14` 应变化;若不变而相邻通道变化 → 通道宏写错(见 §5 警告)。⚠ **本步尚未执行**(2026-10-10 「STM32 ADC1 启动与扫描」台架只验证了"9 通道全部转换成功 + 零超时 + 互异非饱和 + 跨次开机读数不同",台架无信号源);映射的**代码侧**一致性有两道保证:① `App/algo/adc_input.c` 的 `k_adc_map[]` 与 CubeMX 标签(`ADC17_UB`=PC4 等)逐条对齐;② 开机自检 `adc_input_init()` 校验每个 STM32 语义通道都落在 `k_stm32_rank_ch[]` 扫描序列内(挡"映射到不扫描的通道 → 恒读陈旧值")。
1. **TPAFE 侧**:对目标 `AIN` 注入 1 V DC → 观察对应 `buf[i]` 变化(UA→`buf[6]`、UN→`buf[5]`、IA→`buf[2]`),同时 U3.14 `BUSY` 有脉冲;**语义与下标不符即映射错**。✅ **2026-10-27 已执行**(原 2026-10-23 挂账的"无执行记录"已消除;`docs/硬件平台/V0.0_网表详细分析报告.md` §5.1 第 6 条的同一验证随之关闭)。判据按 `docs/任务规划/数据可信.md` 卡 0 的**不需要示波器**口径执行:① "`BUSY` 有脉冲"改用固件帧计数——注入前后 `tpafe5160_frame_seq()` 仍严格 1000 Hz 递增即等价;② 幅值判据改用万用表读注入点实际电压 + 同时读 `adc_input_raw()` 码值,三点线性拟合(R² ≥ 0.999)。
2. **STM32 侧**:对目标引脚(如 PC4=UB)注入 0.5 V → 读 `ADC_CHANNEL_14` 应变化;若不变而相邻通道变化 → 通道宏写错(见 §5 警告)。✅ **2026-10-27 已执行**(原 2026-10-10 的"尚未执行"已消除;当时台架只验证了"9 通道全部转换成功 + 零超时 + 互异非饱和 + 跨次开机读数不同",台架无信号源);映射的**代码侧**一致性有两道保证:① `App/algo/adc_input.c` 的 `k_adc_map[]` 与 CubeMX 标签(`ADC17_UB`=PC4 等)逐条对齐;② 开机自检 `adc_input_init()` 校验每个 STM32 语义通道都落在 `k_stm32_rank_ch[]` 扫描序列内(挡"映射到不扫描的通道 → 恒读陈旧值")。
3. **备用通道**:RESERVED 路不接入任何语义,UI 与上报里不得出现;若实测有读数漂移,只记录不消费。
4. **端子侧变比(2026-10-23 补,2026-10-27 收窄)**:上面 1/2 两条都只到 **ADC 引脚**。③ 段(`AINn` ↔ 转换器引脚)已由网表追线定死为 **1:1**(`ADCn` 节点无对地元件,拓扑图见 §7.1),**板内不再有未知比值**;剩下的未知量只有 ④ **子板/端子板变比**——它在仓库里没有任何文档给出(`docs/硬件平台/` 只有 `.tel` 网表与分析报告,无子板原理图)。故**不得**用"2:1 分压"换算出二次值;该变比由 `docs/任务规划/数据可信.md` 卡 0b 实测确认。
### 8.1 2026-10-27 实测记录(首次执行,六项判据全 PASS)
**注入点在端子侧**(`U5.x` 连接器焊盘,见 `docs/测试说明/ADC前端注入验证流程.md` §3),
未碰 LQFP 引脚——有 1k 串阻护着,且 ③ 段已定 1:1,端子侧斜率即引脚侧斜率。
完整步骤、现场记录表与逐项判据见该文档 §5/§6,此处只留结论。
| 项 | 实测 | 判据 | 结论 |
|---|---|---|---|
| 零点(8 路短接 AGND) | 0~5 码(TPAFE ≤4.6 mV / STM32 ≤4.0 mV) | TPAFE ≤30 / STM32 ≤5 码 | PASS |
| 三点线性(UA) | R² = 0.9999997 | ≥0.999 | PASS |
| 斜率(UA,TPAFE) | **6544.2 码/V**(期望 6553.6,偏差 −0.14 %),截距 −7.2 码 | 偏差 ≤2 % | PASS |
| 逐通道映射 | 8 路各自塌到**本路**(零点步骤逐路代偿) | 注入哪路只动哪路 | PASS |
| 极性(TPAFE 三路) | −6566 / −6568 / −6566,对称性 ≤0.34 % | 落在 −6554 附近且 ≤2 % | PASS |
| 节奏 | 注入前/后 Δ9998 码 / 10 s ≈ 1000 Hz,`idle=0`、`adc1_err=0` | 注入前后仍 1000 Hz | PASS |
**由此确认的三件事**:
1. **③ 段变比 = 1:1 得到台架直接证据**(原为网表追线的推断)。端子侧注入斜率 6544.2 码/V,
与引脚侧理论 6553.6 差 0.14 %——若存在 2:1 分压,斜率会是理论值的一半(约 3277),实测不存在。
旧"板级系数 305.18 / 1611.3 µV/码"据此**第二次**被否(第一次是网表拓扑)。
2. **8 路语义 ↔ 物理端子一一对应**,`k_adc_map[]` 与 §3/§5 映射表无误。
3. **TPAFE 补码符号位解释正确**:−1.0 V 点码值为负、幅值与 +1.0 V 点对称。
**两项残留口径**(不影响本轮 PASS,但别当成已验证):**串扰**未单独证(零点步骤时其余七路浮空、
本身在漂,小幅串扰看不出来);**节奏**只测了注入前后、没测注入进行中。
---
## 9. 变更记录