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:
+7
-5
@@ -26,7 +26,7 @@
|
||||
#include "gd5f2gq5ue.h"
|
||||
#include "tpafe5160.h"
|
||||
#include "adc_input.h" /* 语义取数与有效性层:adc_input_init()(语义映射 + STM32 ADC1 扫描) */
|
||||
#include "adc_cal.h" /* 标定折算层:adc_cal_init()(ROM 系数 + cfg 两段注册,道A 标定折算与落盘整定) */
|
||||
#include "adc_cal.h" /* 标定折算层:adc_cal_init()(ROM 系数 + cfg 三段注册,道A 标定折算与落盘整定) */
|
||||
#include "run_par.h" /* 运行参数段:run_par_init()([run_par] 注册 + 104 地址映射真源,道D 这一项) */
|
||||
#include "iec104_comm.h" /* [comm] 段:iec104_comm_init()(ca/端口注册,道G task-8) */
|
||||
#include "phasor.h" /* 全周傅氏相量层:phasor_init()(系数表 + 实例 + 双区交换) */
|
||||
@@ -292,14 +292,16 @@ int app_main_init(void) {
|
||||
DBG_INFO("freq layer init: OK");
|
||||
|
||||
/* 4c-3) 通道标定层(标定折算,「数据可信」标定折算与落盘整定)初始化:RAM 系数副本置
|
||||
* ROM 默认(量程口径冻结定死的引脚侧 LSB,docs/硬件平台/ADC通道映射说明.md §7.1)
|
||||
* + 向配置引擎注册 [adc_cal] / [adc_cal_ofs] 两段。注册必须先于
|
||||
* ROM 默认(k = 量程口径冻结定死的引脚侧 LSB,docs/硬件平台/ADC通道映射说明.md §7.1;
|
||||
* r = 台架实测反算的端子变比,同文档 §7.2)
|
||||
* + 向配置引擎注册 [adc_cal] / [adc_cal_ofs] / [adc_cal_sec] 三段。注册必须先于
|
||||
* defaultTask 的 cfg_file_load(「先注册后 load」契约)→ 只能落内核前;
|
||||
* 折算消费在 adcTask 每拍(adc_cal_apply),标定文件值随 load/poll 原地
|
||||
* 生效,无回调。 */
|
||||
adc_cal_init();
|
||||
DBG_INFO("adc cal init: OK (k_q16 tpafe=%ld stm32=%ld)",
|
||||
(long)ADC_CAL_K_Q16_TPAFE, (long)ADC_CAL_K_Q16_STM32);
|
||||
DBG_INFO("adc cal init: OK (k_q16 tpafe=%ld stm32=%ld r_q16 v=%ld i=%ld)",
|
||||
(long)ADC_CAL_K_Q16_TPAFE, (long)ADC_CAL_K_Q16_STM32,
|
||||
(long)ADC_CAL_R_Q16_VOLT, (long)ADC_CAL_R_Q16_CURR);
|
||||
|
||||
/* 4c2) 运行参数段初始化(「数据可信」这一项):死区 9 点工厂默认 + 注册
|
||||
* [run_par] 段。同 adc_cal 的「先注册后 load」契约 → 必须内核前;
|
||||
|
||||
+16
-6
@@ -218,16 +218,25 @@ static void feed_map_phasor(void) {
|
||||
* 入口参数:无
|
||||
* 返回值:UI_DATA_ENG_PIN 或 UI_DATA_ENG_SEC uint8_t
|
||||
* 限定条件:无(纯读)
|
||||
* 函数说明:**全或无**——电气 8 路(TEMP 除外,它不参与线性标定)的
|
||||
* ADC_CAL_F_VALID 全置位才升二次值。取全或无是因为整帧共用一个 eng:
|
||||
* 只要还有一路是引脚电压,页面挂"二次值"就会把那一路的读数误标
|
||||
* (宁可整体显示"未标定",也不给部分真值贴真值标签)
|
||||
* 函数说明:判据 = 「每路要么已配变比、要么削顶不显示」(2026-11-11 口径变更):
|
||||
* 电气 8 路里,凡**未被削顶**的通道都必须 `adc_cal_ratio_configured()`,
|
||||
* 全部满足才升二次值;削顶通道不参与断言——它们页面本来就显 "--",
|
||||
* 不进任何读数,拿它们卡住整帧标签只会让 V0.1 那五路削顶把徽标永久钉在
|
||||
* "未标定"上。
|
||||
* ⚠ 与 `adc_cal_prot_blocked()`(判据闭锁看 UA/UN/IA 三路 VALID)**不是
|
||||
* 同一件事,别合并**:那个问"准不准"、这个问"什么单位"。也没用 VALID:
|
||||
* 只配了变比、没做两点标定时输出**确实是**二次值,只是精度未定——
|
||||
* 量纲标签若跟着 VALID 走,屏上就会出现"数值是 5.000(二次)却标未标定 V"
|
||||
* 这种自相矛盾。
|
||||
*/
|
||||
static uint8_t feed_eng(void) {
|
||||
uint8_t sem;
|
||||
|
||||
for (sem = 0u; sem < (uint8_t)ADC_SEM_TEMP; sem++) {
|
||||
if ((adc_cal_flags((adc_semantic_t)sem) & ADC_CAL_F_VALID) == 0u) {
|
||||
if ((adc_cal_flags((adc_semantic_t)sem) & ADC_CAL_F_CLIPPED) != 0u) {
|
||||
continue; /* 削顶通道不显示读数,不参与整帧量纲断言 */
|
||||
}
|
||||
if (adc_cal_ratio_configured((adc_semantic_t)sem) == 0u) {
|
||||
return UI_DATA_ENG_PIN;
|
||||
}
|
||||
}
|
||||
@@ -322,7 +331,8 @@ static void feed_fill_rt(ui_data_rt_t *p_snap, uint32_t tick_ms) {
|
||||
p_snap->valid = 1u;
|
||||
p_snap->eng = feed_eng();
|
||||
|
||||
/* 遥测:语义通道序的基波有效值(采样环已按 adc_cal 折算 → 当前为引脚电压域) */
|
||||
/* 遥测:语义通道序的基波有效值(采样环已按 adc_cal 折算 → 量纲看 eng:
|
||||
* 已配变比的路是二次值 V/A,未配的是引脚电压 V) */
|
||||
for (sem = 0u; sem < (uint8_t)ADC_SEM_COUNT; sem++) {
|
||||
int8_t pi = s_yc_phasor[sem];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user