1 芯片介绍
1.1 芯片特性
1.1.1 计量
1.1.2. 软件校表
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%以上。
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」