feat(adc): 心跳新增 adc: 行输出 9 路原始码值,并补卡 0 台架注入验证流程

背景:ADC 采集的软件链路已全部打通(节拍、语义取数、折算、相量、
200 ms 快照、104/UI 消费),但"读数对不对"从未验证过——卡 0 的
已知电压注入一直挂账。挂账的直接原因之一是读数出口不够用:
固件只有 cal: 行(UA/UN/IA 三路,mV)与 first: 行(9 路码值,仅
开机一次),验 8 个通道 × 3 个注入点要复位二十余次。

改动一(App/task/adc_task.c,v3.3)
- 心跳新增 adc: 行,每 10 s 输出 9 路原始码值,与 first: 行同序
  同格式,台架"改电压 → 读一行"即可对表,全程免复位。
- 不并入 cal: 行:9 个码值会把该行推到 168 字符,撞
  DBG_CON_LINE_MAX(192) 的静默截断边界(截断不报错,只会少打几路,
  是最难发现的台架假数据来源)。
- 无新增跨任务状态、无新增外设访问;栈 +36 B(局部码值数组),
  adcTask 静态最坏 1400 B / 余量 1160 B(底线 1024 B),stack_report
  PASS;静态 RAM 不变,Flash +188 B。

改动二(新增 docs/测试说明/ADC前端注入验证流程.md)
- 卡 0 的执行侧:注入点清单、期望码值表、零点/线性/映射/极性/节奏
  五步、现场记录表、安全红线、已知坑。
- 固化 2026-10-27 的网表结论:逐通道追 V0.1.tel 确认 ADCn 节点上
  只有"串阻 2 脚 + 滤波电容 + 转换器引脚",没有对地分流电阻;所谓
  "1k 到地"是 TPAFE 负输入脚 AIN_nGND 经 1k 拴到 AGND 的差分滤波。
  故本板不存在 2:1 分压,端子侧斜率 = 引脚侧斜率 = 6553.6 / 1241.2
  码/V。数据可信.md §2.1 的 305.18 / 1611.3 µV/码 确认不成立。
- 不验交流:台架无信号源,且五路单极性削顶。

改动三(索引与指针)
- docs/README.md 测试说明索引、测试文档模板规范.md 的 ADC 缩写行
  (原"待立")同步。
- 数据可信.md 卡 0 增加指向该流程的指针(本表只写判据,不写怎么
  接表笔)。

门禁:Keil 构建 0 错误 0 警告;check_ids --strict 通过;
check_doc_links --all --sections-strict 通过(193 文档 / 2871 处引用);
pre-commit 全过(含 cppcheck、编码规范、体积档、标定层与量纲回归
单测);两处内存台账已按 --write / --update 刷新。
This commit is contained in:
2026-10-27 15:14:07 +08:00
parent 103e26e111
commit 343305b433
9 changed files with 301 additions and 18 deletions
+32
View File
@@ -99,6 +99,13 @@
* meas_tick()(全仓调用点 = 1,评审判据);品质注入源 =
* adc_cal_flags() 削顶位图,频率 = 同拍 freq 读数;心跳新增
* meas: 行(seq/v/ua·un·ia_mv/f/fv),读数比对类判据待台架实测
* v3.3 2026-10-27 DTU 项目组 卡 0 台架读出口:心跳新增 adc: 行——连续输出 9 路
* **原始码值**(与 first: 行同序同格式)。动因 = 注入验证
* 原本只能靠"改电压 + 复位 + 抓一次 first:",8 个通道 × 3 个
* 注入点要复位二十余次;改为每 10 s 一行后可全程免复位。
* 不并进 cal: 行是因为 9 个码值会把该行推到 168 字符、
* 撞 DBG_CON_LINE_MAX(192) 的静默截断边界(见该行注释)。
* 无新增跨任务状态、无新增外设访问,栈 +36 B(局部码值数组)
*/
#include "adc_task.h"
@@ -520,6 +527,31 @@ void adc_task_func(void *arg) {
log_phasors("hb");
/* 全 9 路**原始码值**(「数据可信」卡 0 注入验证的唯一连续读出口):
* 与 first: 行同序同格式(UA/UB/UC/UN/IA/IB/IC/IN/T),台架
* "改电压 → 读一行"即可对表,不必为每个注入点反复复位去抓只在开机
* 出现一次的 first: 行。两处的通道顺序是同一份约定,改一处必须同步另一处。
* ⚠ 为何单独一行、不并进下面的 cal: 行:cal: 已 75 字符,9 个码值最坏
* 再加 93 字符,逼近 DBG_CON_LINE_MAX(192) 的截断边界——截断**不报错**,
* 只会静默少打几路,是最难发现的台架假数据来源;分行后各自留足余量。
* ⚠ 取数失败(-2 该来源无有效数据)时该槽保持 0,故"9 路全 0"读作
* "没数据",不读作"九路都是 0 V"——判据是 frames 心跳是否仍在涨。 */
{
int32_t rc[ADC_SEM_COUNT];
uint8_t j;
for (j = 0u; j < (uint8_t)ADC_SEM_COUNT; j++) {
rc[j] = 0;
(void)adc_input_raw((adc_semantic_t)j, &rc[j]);
}
DBG_INFO("adc: UA=%ld UB=%ld UC=%ld UN=%ld IA=%ld IB=%ld IC=%ld IN=%ld T=%ld",
(long)rc[ADC_SEM_UA], (long)rc[ADC_SEM_UB],
(long)rc[ADC_SEM_UC], (long)rc[ADC_SEM_UN],
(long)rc[ADC_SEM_IA], (long)rc[ADC_SEM_IB],
(long)rc[ADC_SEM_IC], (long)rc[ADC_SEM_IN],
(long)rc[ADC_SEM_TEMP]);
}
/* L1.5/采样通道自检 台架观测面(×1000 mV 定点,MicroLIB 无 %f):
* ua/un/ia_mv = 三路 TPAFE 引脚电压毫伏(未标定域,**不是**
* 二次值;卡 12 注入验证的读数落点,偏差判据 ≤2 %)