feat(adc): 新增变比维 r 三维折算,录波段格式升 v2
采样板注入 Ua=5V/Ia=0.5A 读数偏小,根因是固件只输出引脚电压、 缺「端子→引脚」变比。折算改三维: 工程量 = (code + b) × k[µV/码] × 1e-6 × r k 保持 ROM 引脚 LSB,b 为零点,r 为端子变比(int32 Q16)。 变比不能并进 k:UA 端子域 k 达 1.5e5 µV/码、Q16 溢出 int32; r 单独存 Q16 不溢出。两点标定改标 r,k 仍是板级事实。 - 新开单段 [adc_cal_sec](8 键 r_ua..r_in),cfg 段数达 8/8 上限 - 一次变比复用 prot_set 四项,不新开段;r=0 表示本路不折算 - ROM 默认带台架实测变比(电压族 1000、电流族 29.4118), 烧进固件即显二次值;VALID 仍须两点标定,两者互不派生 - eng 判据改「每路要么已配变比、要么削顶不显示」,不再看 VALID - 104 地址 0x8050~0x8057 写 r,run_par_cal_r_set 写值与置脏同函数 - 录波 v2:通道表加 int32 r_q16,头 128→160、整段 5250→5282; code_to_milli 用余数分解换等价单次圆整,20 万组大整数对拍 0 不符 - 文档同步:采集与算法层/通道映射/故障录波/网络配置/配置文件/ 产品需求/内存台账,历史带日期实测数字按冻结口径不改 - 单测 13 套全绿,/keil-build 0 错误 0 警告(256024/31760/ 2080/152368),RAM 实测回填内存内容分配策略 §6.1
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
* 而那正是「无波可录」的时刻。用 1 kHz 逐拍模拟在主机上跑满整段(360 拍一段)成本几乎为零。
|
||||
*
|
||||
* 桩的边界:本套不桩任何东西——wave_ring.c 与 wave_store.c 零平台依赖,
|
||||
* 封存瞬间事实(adc_cal 的 avail / k_q16 / b_codes)由本测试按 §6.3 口径
|
||||
* 封存瞬间事实(adc_cal 的 avail / k_q16 / b_codes / r_q16)由本测试按 §6.3 口径
|
||||
* 手工填进 wave_seal_cal_t,模拟接线道那一拍该交棒的内容。
|
||||
* 真 adc_cal、真 FatFs、真 FTP、注入对表属台架(docs/子系统设计/故障录波设计说明.md §10)。
|
||||
*
|
||||
@@ -198,6 +198,10 @@ static void cal_init(void) {
|
||||
s_cal.ch[j].avail = (uint8_t)((tpa != 0) ? 0x00 : 0x02);
|
||||
s_cal.ch[j].k_q16 = (tpa != 0) ? 10000000 : 52800000;
|
||||
s_cal.ch[j].b_codes = 0;
|
||||
/* v2:变比原值。本套是 V0.1 未标定形态,一路都还没配变比 -> 全 0
|
||||
* (= 本路不折算,输出停在引脚域,与 s_cal.eng = WAVE_ENG_PIN 自洽);
|
||||
* 非 0 变比的往返与折算由 test/host/wave_store 那套与它的 PC 解码器覆盖。 */
|
||||
s_cal.ch[j].r_q16 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -496,7 +500,7 @@ int main(void) {
|
||||
CHECK(trigger_and_seal((uint8_t)WAVE_TRIG_PROTECT, 12u, 200u) != 0, "全链路:先滚 200 拍再触发封段");
|
||||
CHECK(wave_ring_latch_meta(&s_cal) == WAVE_ST_OK, "全链路:交棒封存瞬间事实");
|
||||
CHECK(pack_seg() == 0, "全链路:打包游标跑到 DONE(数据源就是 wave_ring 的读口)");
|
||||
CHECK(s_len == (uint32_t)WAVE_ST_SEG_SZ_CUR, "整段字节数 = 5250(§6.3 等式)");
|
||||
CHECK(s_len == (uint32_t)WAVE_ST_SEG_SZ_CUR, "整段字节数 = 5282(§6.3 等式)");
|
||||
CHECK(wave_store_seg_check(s_buf, s_len, NULL) == WAVE_ST_OK, "自产段过整段自检(两个 CRC 都对)");
|
||||
CHECK(wave_store_seg_check(s_buf, s_len, &s_m) == WAVE_ST_OK, "自检并回填段头");
|
||||
CHECK((s_buf[0] == (uint8_t)WAVE_ST_MAGIC0) && (s_buf[1] == (uint8_t)WAVE_ST_MAGIC1) &&
|
||||
@@ -546,15 +550,18 @@ int main(void) {
|
||||
if (wave_st_get32(&s_buf[pos + WAVE_ST_CH_OFF_BCODE]) != (uint32_t)s_cal.ch[j].b_codes) {
|
||||
ok_tbl = 0;
|
||||
}
|
||||
if (wave_st_get32(&s_buf[pos + WAVE_ST_CH_OFF_RQ16]) != (uint32_t)s_cal.ch[j].r_q16) {
|
||||
ok_tbl = 0;
|
||||
}
|
||||
}
|
||||
CHECK(ok_tbl != 0, "通道表 8 项:sem = 下标 + conv/bits/avail/k_q16/b_codes 全部落进字节");
|
||||
CHECK(ok_tbl != 0, "通道表 8 项:sem = 下标 + conv/bits/avail/k_q16/b_codes/r_q16 全部落进字节");
|
||||
}
|
||||
{
|
||||
uint16_t hcrc = wave_store_crc(s_buf, WAVE_ST_HEAD_CRC_POS((uint8_t)WAVE_ST_CH_NUM));
|
||||
|
||||
CHECK((s_buf[WAVE_ST_HEAD_CRC_POS((uint8_t)WAVE_ST_CH_NUM)] == (uint8_t)(hcrc & 0xFFu)) &&
|
||||
(s_buf[WAVE_ST_HEAD_CRC_POS((uint8_t)WAVE_ST_CH_NUM) + 1u] == (uint8_t)(hcrc >> 8)),
|
||||
"头 CRC 覆盖 [0, 30+12*ch) 且低字节在前");
|
||||
"头 CRC 覆盖 [0, 30+16*ch) 且低字节在前");
|
||||
}
|
||||
{
|
||||
uint16_t dcrc = wave_store_crc(&s_buf[WAVE_ST_HEAD_SZ_CUR],
|
||||
|
||||
Reference in New Issue
Block a user