电表级单相计量芯片RN8209C在Zigbee和Z-Wave智能家居系统中的应用
1 芯片介绍
1.1 芯片特性
1.1.1 计量
- 提供三路Σ-△ADC
- 有功电能误差在8000:1动态范围内<0.1%,支持IEC62053-22:2003标准要求
- 无功电能误差在8000:1动态范围内<0.1%,支持IEC62053-23:2003 标准要求
- 提供两路电流和一路电压有效值测量,在1000:1动态范围内,有效值误差<0.1%
- 提供一路脉冲频率发生器,可用于对用户自定义功率进行电能量累加积分
- 提供三路ADC的瞬时采样值
- 潜动阈值可调
- 提供反相功率指示
- 提供电压通道频率测量
- 提供电压通道过零检测
- 提供参考基准监测功能
1.1.2. 软件校表
- 电表常数(HFConst)可调
- 提供增益和相位校正
- 提供有功、无功、有效值offset校正
- 提供小信号校表加速功能
- 提供配置参数自动校验功能
- 提供SPI/UART接口
- 具有电源监控功能
- 具备电能寄存器定时冻结功能
- UART的RX输入引脚同时具备管脚复位功能
- RN8209 +5V/3.3V电源供电,功耗典型值为15mW@5V、8mW@3.3V
- 内置1.25V±1% 参考电压,温度系数典型值5ppm/℃,最大15ppm/℃
- 采用SSOP24(RN8209D)/SOP16L(RN8209C)绿色封装
1.2 功能简介
RN8209能够测量有功功率、无功功率、有功能量、无功能量,并能同时提供两路独立的有功功率和有效值、电压有效值、线频率、过零中断等,可以实现灵活的防窃电方案。 RN8209支持全数字的增益、相位和offset校正。有功电能脉冲从PF管脚输出,无功电能脉冲/用户自定义电能脉冲频率从QF引脚输出。 RN8209C提供串行接口UART,固定波特率4800,管脚复位与UART输入引脚RX复用。RN8209D提供串行接口SPI和UART,方便与外部MCU之间进行通信。
RN8209 内部的电源监控电路可以保证上电和断电时芯片的可靠工作。
1.3 管脚定义
1.4 典型应用
2 校表流程
可利用标准电能表进行校表,有功和自定义能量脉冲PF/QF 可以通过光耦直接连接到标准
表上去,然后根据标准电能表的误差读数对RN8209 进行校正。详细参考芯片用户手册。
3 代码实现
本代码基于RN8209C通过串口进行通信,工作在ZGM130S和EFR32系列MCU,具体实现如下:
RN8209C模块接口:app_DriverRN8209C.h
/*
* app_DriverRN8209D.h
*
* Created on: 2009年8月10日
* Author: smartlabs
*/
#ifndef SRC_APP_DRIVERRN8209D_H_
#define SRC_APP_DRIVERRN8209D_H_
#define CALIBRATION_FLAG 0x88
/*
#define C_Standard_Power (1800)//1800 //校准功率
#define C_Standard_Current (15)//(15) //校准电流
#define C_Standard_Voltage (120) //校准电压
*/
#define Alarm_Power (2000000) //报警功率 后三位小数
typedef enum{
POWER_DATA_CURRENT, //电流
POWER_DATA_VOLTAGE, //电压
POWER_DATA_ACTIVE_POWER, //功率
POWER_DATA_ENEGRY, //电量
POWER_DATA_POWER_FACTOR,//功率因数
}power_data_type_e;
typedef enum
{
CALIBRABION_STATUS_WAITING = 1, //校准等待
CALIBRABION_STATUS_CALIBRATING = 2, //校准过程
CALIBRABION_STATUS_FINISHED = 3 //校准完成
}CALIBRATION_STATUS_ENUM;
typedef enum
{
WORK_MODE_CALIBRATE=1, //校准模式
WORK_MODE_NORMAL=2 //正常模式
}WORK_MODE_ENUM;
extern WORK_MODE_ENUM g_eWorkMode;//工作模式
extern CALIBRATION_STATUS_ENUM g_eCalibrationStatus; //当前校准状态
extern uint8_t g_cCalibrationTaskMode;
extern uint8_t g_bCalibrationFlag;
extern uint32_t g_wCalibrationCurrent; //校准电流
extern uint32_t g_wCalibrationVoltage; //校准电压
extern uint32_t g_wCalibrationPower; //校准功率
//RN8209C硬件初始化
void app_initRN8209HW(void );
//RN8209C软件初始化
void app_initRN8209SW(void );
//RN8209C复位
void app_resetRN8209(void );
//RN8209C计量
bool app_calculateRN8209(void);
//设置工作模式
void app_setWorkMode(WORK_MODE_ENUM mode);
//RN8209校准
void app_calibrateRN8209(void );
//获取当前电量,保留3位小数位数
uint32_t app_getEnergy(void );
//获取当前功率,保留3位小数位数
uint32_t app_getPower(void );
//获取当前电压,保留3位小数位数
uint32_t app_getVoltage(void );
//获取当前电流,保留3位小数位数
uint32_t app_getCurrent(void );
#endif /* SRC_APP_DRIVERRN8209D_H_ */
4 测试报告
经过简单的功率校准,读取到的功率实际精度可以达到99%以上。