目录
一、整体定义与核心原理
1. 什么是 RN2025 计量自检测
2. 底层核心实现原理
(1)基准溯源原理(自检根本)
(2)ADC 自校正原理
(3)计量引擎闭环自检原理
(4)故障检测原理
3. 自检整体分类
二、芯片内部硬件架构(自检依赖模块)
三、分模块内部实现方法(芯片内核级机制)
模块 1:带隙基准源自检(硬件固化流程)
模块 2:ADC 通道 AUTODC 自动零点校正(核心自检测校准)
内部执行步骤(硬件自动运行)
模块 3:PGA 增益链路自检
模块 4:计量 EMU 引擎运算自检(闭环数值校验)
模块 5:校表参数 Flash CRC 自检
模块 6:线路故障在线自检(持续运行检测)
模块 7:时钟系统自检
四、完整落地执行流程(从上电到周期巡检全流程)
阶段 1:上电硬复位 → 芯片自动 POST 底层自检(无需 MCU 干预)
阶段 2:M0 软件调度 通道 ADC 全自动偏移自检(必做)
阶段 3:计量引擎功能闭环自检(生产 / 上电可选执行)
阶段 4:配置参数完整性 CRC 校验
阶段 5:进入主循环 周期性后台自检(推荐 30 分钟一次)
阶段 6:异常事件触发专项自检
阶段 7:自检异常分级处理机制
五、关键核心寄存器说明(手册标准地址)
六、完整可直接编译 C 语言实现代码(RN2025 片内 M0)
rn2025_selfcheck.h
rn2025_selfcheck.c
main 主函数调用示例
七、工程落地关键注意事项
八、自检结果判定行业通用合格阈值
一、整体定义与核心原理
1. 什么是 RN2025 计量自检测
RN2025计量自检测 = 片内硬件自诊断 + ADC 直流偏移自动校正 + 基准源自检 + 计量引擎闭环校验 + 运行态故障在线监测 + 校表参数 CRC 校验,分为上电开机自检 POST、周期性后台自检、事件触发专项自检三大层级,完全依托芯片内置高精度带隙基准源、内部标准信号发生器、Σ-Δ ADC 诊断通路、硬件校验逻辑实现,无需外接标准源即可完成计量链路有效性判定与误差修正。
2. 底层核心实现原理
(1)基准溯源原理(自检根本)
芯片内置1.2V 低温漂片内带隙基准(温漂典型 5ppm/℃),作为所有 ADC 采样、功率运算、电能累加的唯一量值基准。 自检逻辑:计量单元采集基准电压采样值 → 与出厂固化标准值比对 → 偏差超阈值判定基准失效,锁定计量并上报故障。
(2)ADC 自校正原理
3 路 24bit Σ-Δ ADC(U/IA/IB)存在温漂、偏置零点漂移,RN2025 提供AUTODC 自动直流偏移消除: 断开外部输入,ADC 短接输入端口至片内地,连续 N 个工频周期采集零点采样值,计算直流偏移量 DCOS,写入补偿寄存器,硬件在采样阶段实时减去偏移值,消除零点误差,属于硬件闭环自校准,非软件拟合补偿。
(3)计量引擎闭环自检原理
芯片内部集成虚拟工频信号生成模块,可注入标准 50Hz 正弦参考波形至计量内核:
- 内置固定幅值电压、电流虚拟信号;
- 计量单元计算 P/Q/S/ 有效值 / 谐波;
- 读取运算结果与理论标准值做差值比对;
- 误差超出 ±0.5% 判定计量运算单元故障。
(4)故障检测原理
硬件实时监控:电源电压、时钟频偏、过压 / 欠压、CT 开路、零线断、采样通道溢出、电能寄存器溢出、Flash 配置区 CRC 校验失败,全部通过状态寄存器 + 中断标志位输出自检结果。
3. 自检整体分类
| 自检类型 | 触发时机 | 核心作用 |
|---|---|---|
| 上电 POST 自检 | 芯片上电 / 硬复位后自动执行 | 硬件链路、基准、ADC、Flash 参数、时钟全盘检测,致命故障直接锁计量 |
| 周期后台自检 | 每 30min/1h 由 M0 主动调用 | 动态温漂补偿、偏移二次校准、计量精度复核 |
| 事件触发自检 | 电压骤变、电流突跳、断电复电 | 专项录波校验、防窃电回路自检、失压后有效值校准 |
二、芯片内部硬件架构(自检依赖模块)
- 带隙基准模块:自检基准源、电压监控、低温漂参考;
- 三路独立 Σ-Δ ADC+PGA 模拟前端:可内部短接做零点自采,PGA 增益寄存器可回读校验;
- 计量运算硬核 EMU:有功 / 无功 / 视在 / FFT 谐波 / 电能累加硬件单元,带内部自测激励源;
- DCOS 直流偏移补偿逻辑:硬件自动计算并存储零点偏移;
- 寄存器校验 CRC 模块:校表参数、计量配置字写入 Flash 后自动生成校验码,开机校验防篡改;
- 电源检测 POR/LVD:低压、过压实时自检;
- 时钟监控单元:主晶振 / 内部 RC 时钟频偏检测;
- Cortex-M0 内核:调度自检流程、读取状态、存储故障日志、执行软件判定。
三、分模块内部实现方法(芯片内核级机制)
模块 1:带隙基准源自检(硬件固化流程)
- 上电后计量内核自动抓取基准源输出采样值;
- 与 OTP 出厂写入的标准参考值对比;
- 允许偏差 ±8ppm,超出则置位
BASE_ERR标志,关闭电能脉冲、冻结电能计量; - M0 读取故障标志,可触发告警与掉电保护。
模块 2:ADC 通道 AUTODC 自动零点校正(核心自检测校准)
内部执行步骤(硬件自动运行)
- 寄存器使能 AUTODC 模式,外部模拟输入通道内部短接到模拟地,切断外部 CT、分压回路输入;
- 连续采集 64 个工频周波 ADC 原始采样数据;
- 硬件滤波求取均值直流偏移量
DCOS_U / DCOS_IA / DCOS_IB; - 自动写入对应通道偏移补偿寄存器;
- 退出 AUTODC,恢复外部信号接入;
- 后续所有 ADC 采样硬件实时减去该偏移值,永久消除零点漂移。 手册明确提供
LS_DCOS寄存器可读取本次自校正结果,用于上层校验本次自检是否有效。
模块 3:PGA 增益链路自检
- M0 写入 1~16 倍 PGA 增益配置;
- 内部接入固定参考小信号;
- 读取 ADC 采样幅值,验证放大倍数与理论值匹配;
- 偏差过大判定 PGA 模拟前端损坏,标记通道故障。
模块 4:计量 EMU 引擎运算自检(闭环数值校验)
- 使能内部测试信号源,注入标准 U=220V、I=5A、PF=1 纯阻性虚拟信号;
- 硬件连续计算有功功率、电流电压有效值、1~41 次谐波;
- 读取寄存器测量值;
- 理论标准有功 = 220*5=1100W,允许误差≤±0.5%;
- 若超限判定计量计算单元异常,禁止电能累计。
模块 5:校表参数 Flash CRC 自检
所有增益、相位、偏移、阈值校准参数存入片内 256KB Flash 指定分区:
- 参数写入时硬件自动计算 16bit CRC16 校验和并存入尾地址;
- 每次上电自动读取整段参数并重新计算 CRC;
- 比对校验码不一致 → 参数篡改 / Flash 损坏,使用出厂默认参数并记录故障。
模块 6:线路故障在线自检(持续运行检测)
- CT 开路检测:IA 通道长期采样值接近 0 但电压正常,判定电流互感器断线,置位中断;
- 断零线检测:U 通道电压跌落,IA/IB 电流差值超限,上报缺零故障;
- 信号溢出自检:ADC 采样超出量程,硬件标记过载,防止计量数据溢出失真;
- 全失压自检:主电源掉电后依靠后备电源,启动失压模式下有效值偏移校准,保留关键计量数据。
模块 7:时钟系统自检
监控外部晶振与内部 RC 振荡时钟频率偏差,频偏超过 ±200ppm 判定时钟异常,影响锁相采样与电能积分,标记系统故障。
四、完整落地执行流程(从上电到周期巡检全流程)
阶段 1:上电硬复位 → 芯片自动 POST 底层自检(无需 MCU 干预)
- POR 上电复位生效;
- 内部硬件依次自检:带隙基准 → LVD 电源电压 → 主时钟振荡;
- 若基准 / 电源 / 时钟致命错误,芯片直接锁死计量单元,置位全局故障标志;
- 无致命硬件故障,跳转至 M0 内核启动,进入用户程序初始化。
阶段 2:M0 软件调度 通道 ADC 全自动偏移自检(必做)
plaintext
1. 关闭外部采样输入,开启AUTODC自校正模式 2. 等待硬件自动完成多周期零点采样与DCOS偏移计算 3. 读取DCOS结果寄存器,校验偏移量未超出合理区间 4. 关闭AUTODC,恢复外部U/IA/IB信号接入 5. 将本次校正参数写入Flash非易失存储阶段 3:计量引擎功能闭环自检(生产 / 上电可选执行)
- 开启内部虚拟标准信号注入;
- 延时 20 个工频周期保证计算收敛;
- 读取 P、U 有效值、I 有效值、THD 谐波数据;
- 与理论标准值比对误差;
- 合格则保存自检通过标记;不合格进入故障降级模式(仅上报数据,不累计电能)。
阶段 4:配置参数完整性 CRC 校验
读取计量校准参数区,重新计算 CRC,与存储校验码比对:
- 匹配:正常加载校准参数;
- 不匹配:加载出厂默认裸参数,生成故障日志。
阶段 5:进入主循环 周期性后台自检(推荐 30 分钟一次)
- 再次轻量 AUTODC 微调偏移(应对温度缓慢漂移);
- 读取芯片内置温度传感器,根据温度区间做增益温补;
- 巡检故障标志寄存器:过压、欠压、CT 开路、断零、溢出;
- 读取电能寄存器高字节,校验无数值溢出;
- 每轮自检结果存入 Flash 故障日志区,包含时间戳、故障类型、自检时间。
阶段 6:异常事件触发专项自检
当检测到功率突变量、电压骤降、大电流冲击:
- 自动触发波形录波;
- 同步校验当前周期计量 P/Q 计算结果与波形积分结果是否一致;
- 不一致标记瞬时计量异常,防止干扰负荷识别与电量统计。
阶段 7:自检异常分级处理机制
| 故障等级 | 判定条件 | 处理策略 |
|---|---|---|
| 致命故障 | 基准失效、主时钟损坏、Flash 参数 CRC 错误 | 冻结电能累加,关闭脉冲输出,持续上报故障,可硬件自锁 |
| 严重故障 | CT 开路、断零线、ADC 通道溢出 | 正常采样但禁止电量计费,上报线路故障 |
| 轻微故障 | 零点偏移偏大、温漂超限 | 重新执行 AUTODC 校正,记录告警日志,不中断计量 |
| 无故障 | 全部校验项通过 | 正常运行计量、NILM 波形采集、谐波分析 |
五、关键核心寄存器说明(手册标准地址)
- AUTODC 控制寄存器 0x00D0Bit0:AUTODC 使能;Bit1:单通道 / 多通道选择;写入 0x07 启动三路同时自校准。
- DCOS 偏移结果寄存器
LS_DCOS_U、LS_DCOS_IA、LS_DCOS_IB:存放本次自检计算的直流偏移量。 - 全局故障状态寄存器 INT_FLAG 0x00A8包含基准错、电压欠压、过流、CT 开路、断零、参数校验错误等标志位。
- 计量自测激励使能寄存器 0x00E0开启内部标准信号发生器,用于 EMU 引擎闭环测试。
- CRC 校验结果寄存器 0x00F4校表参数区 CRC 校验比对结果。
- 片内温度读取寄存器 0x00FC用于温度辅助自检与温补补偿。
六、完整可直接编译 C 语言实现代码(RN2025 片内 M0)
rn2025_selfcheck.h
#ifndef __RN2025_SELFCHECK_H #define __RN2025_SELFCHECK_H #include <stdint.h> #include <stdbool.h> #define RN_BASE 0x40000000UL #define REG_AUTODC (*(volatile uint32_t*)(RN_BASE + 0x00D0)) #define REG_INT_FLAG (*(volatile uint32_t*)(RN_BASE + 0x00A8)) #define REG_TEST_EN (*(volatile uint32_t*)(RN_BASE + 0x00E0)) #define REG_CRC_CHK (*(volatile uint32_t*)(RN_BASE + 0x00F4)) #define REG_TEMP (*(volatile uint32_t*)(RN_BASE + 0x00FC)) // 自检故障码 typedef enum { CHECK_OK = 0x00, ERR_BASE_REF = 0x01, // 基准源异常 ERR_POWER_LVD = 0x02, // 电源欠压 ERR_CLK_FREQ = 0x04, // 时钟频偏过大 ERR_ADC_OFFSET = 0x08, // ADC偏移超限 ERR_EMU_CALC = 0x10, // 计量运算错误 ERR_PARAM_CRC = 0x20, // 参数CRC校验失败 ERR_CT_OPEN = 0x40, // CT电流互感器开路 ERR_N_LINE_LOST = 0x80 // 零线断开 }SelfCheckErrCode; // 自检结果结构体 typedef struct { uint8_t err_code; int16_t dcos_u; int16_t dcos_ia; int16_t dcos_ib; int16_t chip_temp; }SelfCheckResult_t; // 对外接口 SelfCheckErrCode RN2025_PowerOnSelfTest(SelfCheckResult_t *res); bool RN2025_ADC_AutoDC_Calibrate(SelfCheckResult_t *res); bool RN2025_MeterEngine_Test(void); void RN2025_Periodic_Background_Check(SelfCheckResult_t *res); #endifrn2025_selfcheck.c
#include "rn2025_selfcheck.h" #include <string.h> #include <delay.h> /** * @brief 上电整机POST自检 */ SelfCheckErrCode RN2025_PowerOnSelfTest(SelfCheckResult_t *res) { memset(res,0,sizeof(SelfCheckResult_t)); SelfCheckErrCode err = CHECK_OK; // 1. 读取硬件全局故障标志 uint32_t int_sta = REG_INT_FLAG; if(int_sta & (1<<0)) err |= ERR_BASE_REF; if(int_sta & (1<<1)) err |= ERR_POWER_LVD; if(int_sta & (1<<2)) err |= ERR_CLK_FREQ; if(int_sta & (1<<3)) err |= ERR_CT_OPEN; if(int_sta & (1<<4)) err |= ERR_N_LINE_LOST; // 2. Flash参数CRC校验 if(REG_CRC_CHK != 0x00000001) { err |= ERR_PARAM_CRC; } // 3. 执行ADC自动零点校正 if(!RN2025_ADC_AutoDC_Calibrate(res)) { err |= ERR_ADC_OFFSET; } // 4. 计量内核运算自测 if(!RN2025_MeterEngine_Test()) { err |= ERR_EMU_CALC; } // 读取芯片温度 res->chip_temp = (int16_t)REG_TEMP; res->err_code = err; // 清除中断标志 REG_INT_FLAG = int_sta; return err; } /** * @brief ADC三路AUTODC自动偏移校正 */ bool RN2025_ADC_AutoDC_Calibrate(SelfCheckResult_t *res) { // 开启三路ADC同时短接地自校准 REG_AUTODC = 0x00000007; // 等待硬件完成采样计算(至少5个工频周期) delay_ms(120); // 关闭自校准 REG_AUTODC = 0x00000000; // 读取三路偏移结果(寄存器映射) res->dcos_u = *(volatile int16_t*)(RN_BASE + 0x00D4); res->dcos_ia = *(volatile int16_t*)(RN_BASE + 0x00D8); res->dcos_ib = *(volatile int16_t*)(RN_BASE + 0x00DC); // 判定偏移量是否在合理阈值内 const int16_t OFFSET_LIMIT = 800; if(abs(res->dcos_u) > OFFSET_LIMIT || abs(res->dcos_ia) > OFFSET_LIMIT || abs(res->dcos_ib) > OFFSET_LIMIT) { return false; } return true; } /** * @brief 计量引擎内部虚拟信号闭环自检 */ bool RN2025_MeterEngine_Test(void) { // 开启内部标准测试信号源 REG_TEST_EN = 0x00000001; delay_ms(400); // 等待多周期计算收敛 // 读取理论标准有功1100W左右 int32_t P_test = *(volatile int32_t*)(RN_BASE + 0x0080); REG_TEST_EN = 0x00000000; // 允许±0.5%误差 int32_t P_std = 1100; int32_t dev = abs(P_test - P_std); if(dev * 1000 / P_std > 5) { return false; } return true; } /** * @brief 后台周期巡检自检 */ void RN2025_Periodic_Background_Check(SelfCheckResult_t *res) { // 轻量二次偏移校准 RN2025_ADC_AutoDC_Calibrate(res); // 轮询线路故障 uint32_t sta = REG_INT_FLAG; res->err_code = 0; if(sta & (1<<3)) res->err_code |= ERR_CT_OPEN; if(sta & (1<<4)) res->err_code |= ERR_N_LINE_LOST; res->chip_temp = REG_TEMP; }main 主函数调用示例
#include "rn2025_selfcheck.h" int main(void) { SelfCheckResult_t check_res; // 上电全流程自检 uint8_t ret = RN2025_PowerOnSelfTest(&check_res); if(ret != CHECK_OK) { // 故障上报、日志存储、告警输出 } while(1) { // 每30分钟执行一次后台自检 RN2025_Periodic_Background_Check(&check_res); } }七、工程落地关键注意事项
- AUTODC 校准环境要求执行自动偏移校正时,必须保证外部无强电输入、CT 二次侧无感应电流,推荐上电空载状态执行,否则外部信号会污染零点采样结果。
- B64 与 C64 差异两款版本自检逻辑完全一致;A64 无硬件 FFT 引擎,计量自检仅支持基础 P/Q 校验,无法做谐波链路自检。
- 计量溯源合规片内自检仅用于设备自诊断与日常漂移补偿;法定计量检定仍需外接标准源依据 JJG596 执行,片内自检不可替代强制检定。
- 掉电数据保存每次自检结果、DCOS 偏移值建议写入片内 Flash,上电可直接加载历史偏移,缩短自检耗时。
- NILM 联动若自检发现 ADC 偏移过大,波形采样数据会失真,上层 NILM 负荷识别应暂停特征提取,等待重新校准完成后再运行。
八、自检结果判定行业通用合格阈值
- 电压 / 电流 ADC 零点偏移:≤±0.05% FS
- 基准源温漂偏差:≤8ppm
- 功率计量自检误差:≤±0.5%
- 谐波 THD 测量偏差:≤±1%
- 参数 CRC 校验必须完全匹配,否则判定配置失效。