摘要
本运用笔记介绍了依据C2000内核和片内12位ADC完成软件电能计量的计划。C2000是德州仪器半导体有限公司出产的32位高功用实时微操控器,广泛运用于比如马达驱动,数字电源等各种和功率操控相关的实时操控范畴,而电能和功率的核算在以上运用中往往作为反应操控的输入信号存在。因而,将软件电能计量算法集成到C2000渠道上是完成各种实时操控SOC计划的要害。本文介绍了在C2000上完成软件计量算法的详细办法以及TI依据C2000的软件计量库的运用办法,一起给出了测验成果。
1 C2000 计量库介绍
1.1 运用布景
节能环保的倡议和推行使大部分家用电器都有对能耗核算的需求,关于这个巨大的运用商场,将C2000芯片在家电电机电源上的运用优势在最小硬件本钱增加价值下兼容拓宽能耗核算功用是本次规划的意图。
C2000芯片专心于电机电源操控,其优异的功用已被业界遍及认可。本次规划是依据C2000 Piccolo 系列芯片树立的软件测验渠道,完成一套满意智能家居能耗计量的软件库,运用最小的硬件价值完成对C2000运用范畴的丰厚。
1.2 硬件渠道及软件库介绍
本次参阅规划硬件渠道运用C2000 Piccolo Entry Line Control Pad, 这是TI供给的一套低本钱C2000开发板,依据此渠道树立的电路进行计量库开发能够运用户在逐渐学C2000开发编程的一起完成一套能耗计量软件。
此参阅规划完成一个单相电能计量计划。参阅规划的意图旨在完成一个完好的单相计量库。运用户在这个参阅规划的基础上快速树立自己的单相计量计划。代码库供给有功功率,无功功率,视在功率,有功用量以及无功用量,一起还能丈量回路电流有效值,电压有效值,功率因数,频率等参数,满意单相电能计量的需求,软件支撑数字校表。
2 第二部分 计量电路及功用描绘
2.1 计量代码库
调用计量库时,只需要将 emeter 目录下的一切文件都增加进来,就能够运用计量功用了。其间文件emeter-interface.h 中声明晰一切对外调用接口,供程序调用,以完成校表和计量数据读取等功用。
算法库默许装备ADC转化率为3200点/秒,转化数据为12bit,数据规模0—4096,完成单相计量。函数adc_interrupt()完成对原始转化数据的运算,measurement_callback()担任进一步处理adc_interrupt()中预处理的数据。因而能够在ADC每个中止中调用adc_interrupt(adc_raw[2]),也能够缓存多个点然后再循环调用此函数,函数入参adc_raw为信号输入,adc_raw[0]为电压转化数据,adc_raw[1]为电流转化数据。
adc_interrupt(),measurement_callback()完成流程如图1所示:
图 1 计量软件流程图
计量前端电路由电压信号调度电路和电流信号调度电路组成。电压信号调度电路运用电阻器对输入工频信号分压,并经过运算扩大器缓冲后送至MCU ADC输入引脚。电流互感器输出电流信号经过负载电阻转化成电压信号,经过运算扩大器扩大后送至MCU ADC输入引脚。引荐电路如图2所示:
图 2 CT计量前端参阅电路
上图电压输入剖析如下:
市电220V沟通输入,经10k和15k并联再串联2M电阻分压,输入沟通电压为 220V*(6/(2000+6)) = 0.66V,直流电压3.3*10/25=1.32V. 总的输入电压幅值 0.66*1.414+1.32= 2.25V, 输入信号3.3V以内。
电流互感器输入5A/2.5mA(依据互感器详细型号定),取样电阻电压2.5*10=25mV,经运放20倍扩大(详细扩大倍数调整R9,R10),输入沟通信号25*20=0.5V, 总的输入电流幅值(10A) 1*1.414+1.6= 3.014 V, 输入信号3.3V以内。
当运用锰铜电阻取得电流信号时,电流信号调度电路方式如下:
图 3 锰铜计量前端参阅电路
2.2 函数阐明
emeter-interface.h 文件中声明的首要函数和宏界说如下:
int32_t get_parameter(int address)
介绍:获取各种计量参数从地址address。
入参:16位整型address 地址
出参:回来该地址上的数据。
可中止重入,可中止中运用。
uint8_t set_parameter(int address, int32_t value)介绍:设置各种校表参数和表参数到地址address。
入参:16位整型,address地址 32位有符号整型 value 值
出参:回来1 表明操作成功,回来0表明操作失利.
不行中止重入,不行中止中运用。
void measurement_setup (void)
介绍:代码库初始化,在上电之初调用。
入参:无
出参:无
void measurement_callback (void)
介绍:此函数周期性(1s)调用,以更新实时数据。
入参:无
出参:无
不行中止重入,不行中止中运用。
void adc_interrupt(int16_t * adc_raw)
Application Report
ZHCA501 – Jan 2013
介绍:能够在ADC每个中止中调用adc_interrupt(adc_raw[2]),也能够缓存多个点然后再循环调用此函数,
函数入参adc_raw为信号输入,adc_raw[0]为电压转化数据,adc_raw[1]为电流转化数据
入参:电压电流输入ADC值数值,adc_raw [0] 电压,adc_raw [1] 电流。
出参:无
2.3 地址及相应功用介绍
考虑到代码将来的改动或扩展,地址不详细界说。运用枚举变量让编译器主动生成。用户能够include的这个变量界说,运用枚举地址设置和获取数据。
int32_t get_parameter(int address)函数地址枚举变量界说如下:
获取实时数据结构
enum get_parameter_table
{
AFE_BASE_A = 0x0000,
AFE_GET_ACTIVE_POWER,
AFE_GET_REACTIVE_POWER,
AFE_GET_APPARENT_POWER,
AFE_GET_ACTIVE_ENERGY,
AFE_GET_REACTIVE_ENERGY,
AFE_GET_VRMS,
AFE_GET_IRMS,
AFE_GET_POWER_FACTOR,
AFE_GET_FREQUENCY,
AFE_GET_ENERGY_MODE,
AFE_GET_STARTUP_I,
AFE_GET_PULSE_CONST,
AFE_GET_POWER_GAINA0,
AFE_GET_PHASEOFFSET_A0,
AFE_GET_VGAINA,
AFE_GET_IGAINA,
AFE_GET_IOFFSETA,
};
以下对每个地址进行解析:
AFE_GET_ACTIVE_POWER
描绘:有功功率
单位:10mW
AFE_GET_REACTIVE_POWER
描绘:无功功率
单位:10mVar
AFE_GET_APPARENT_POWER
描绘:视在功率
单位:10mVA
AFE_GET_VRMS
描绘:电压有效值
单位:10mV
AFE_GET_IRMS
描绘:电流有效值
单位:1mA
AFE_GET_POWER_FACTOR
描绘:功率因数
单位:0.0001
AFE_GET_ACTIVE_ENERGY
描绘:两回路中较大有功电能脉冲数
单位:依靠脉冲常数
AFE_GET_REACTIVE_ENERGY
描绘:两回路中较大无功电能脉冲数
单位:依靠脉冲常数
AFE_GET_FREQUENCY
描绘:体系频率
单位:0.01Hz
AFE_GET_POWER_GAINA0
描绘:功率增益
AFE_GET_PHASEOFFSET_A0
描绘:电压电流角差补偿
AFE_GET_VGAINA
描绘:电压增益
AFE_GET_IGAINA
描绘:电流增益
AFE_GET_IOFFSETA
描绘:电流偏置
单位:1mA
AFE_GET_POFFSETA
描绘:功率偏置
单位:10mW
AFE_GET_ENERGY_MODE
描绘:能量累计形式
单位:0 绝对值累计 1 正能量累计
ZHCA501 – Jan 2013
描绘:发动电流
单位:1mA
AFE_SET_PULSE_CONST
描绘:脉冲常数
获取实时数据结构
enum set_parameter_table
{
AFE_SET_BASE = 0x00,
AFE_SET_POWER_GAINA0,
AFE_SET_PHASEOFFSET_A0,
AFE_SET_VGAINA,
AFE_SET_STARTUP_I,
AFE_SET_FREQUENCY,
AFE_SET_SAMPLES_10S,
AFE_SET_IGAINA,
AFE_SET_IOFFSETA,
AFE_SET_POFFSETA,
AFE_SET_ENERGY_MODE,
AFE_SET_PULSE_CONST,
AFE_SET_CAL_INIT,
};
AFE_SET_POWER_GAINA0
描绘:功率增益
AFE_SET_PHASEOFFSET_A0
描绘:电压电流角差补偿
AFE_SET_VGAINA
描绘:电压增益
AFE_SET_STARTUP_I
描绘:发动电流
单位:1mA
AFE_SET_IGAINA
描绘:电流增益
AFE_SET_IOFFSETA
描绘:电流偏置
单位:1mA
AFE_SET_POFFSETA
描绘:功率偏置
单位:10mW
AFE_SET_PULSE_CONST
描绘:脉冲常数
AFE_SET_CAL_INIT
描绘:校表初始化
AFE_SET_CAL_END
描绘:校表结束
AFE_SET_SAVE_FUNC描绘:用户设置校表数据保存函数
3 校表介绍
3.1 校表寄存器
校表寄存器在前方零线同等对待。
功率增益寄存器
电压电流角差补偿寄存器
有功偏置寄存器
电流增益寄存器
电流偏置寄存器
电压增益寄存器
3.2 校表办法
本计量库供给了专门的接口对计量参数进行校准。校表软件在pc端运转,经过串口通讯,进行参数设置。
详细操作可参阅示例代码。
3.2.1 功率增益及偏置校准
功率增益校准能够进行单点和两点校准。当单点校按时,功率偏置默许为0. 当两点校按时,功率偏置为功率相对0点的截距。校表能够经过脉冲也能够经过屡次读取功率值求均匀进行。两点校表公式如下:(最好取100%Ib 和 5% Ib两点)
功率增益校验公式:
EH 和 EL 为大电流和小电流时功率的差错。(如 100%Ib 和 5% Ib两点功率的差错)NH2L 为大电流和小电流的比差。(如 NH2L=100%Ib / 5%Ib = 20)
功率偏置校验公式:
PGEN 是在小电流时的规范功率值。
无功的增益和偏置类似于有功,可参阅有功校准。以下是一个单点校表的比如,阐明怎么编写校表软件:
1. EH =0.5%
2. 原始的P1_GAINn = 10000
3. 新的 P1_GAINn+1 =10000/(1+0.5%)=9950
3.2.2 电压电流角差校准
电压电流的视点补偿运用的是软件同步。
角差补偿运用下面公式
fM是电网频率. 假如 fM = 50Hz, fm = 256×4096=1MHz, 每个步长是 0.017°,
当功率增益和偏置都校准结束后,才对角差进行校准。过程如下:
1. 在100%Ib点,设置功率因数为0.5L。
2. 获取当时脉冲的差错E。并将E带入下面公式
公式核算如下例:
1. E =0.3%
2. 原始的 P1_PHASEn = 6
3. 新的 P1_PHASEn+1 =10+6=16
3.2.3 电压增益校准
电压增益校准过程如下:
1. 将电压设置成固定的电压值,如:220V
2. 如下公式
3. 设置VRMS_FACTORn+1 到功率增益寄存器,过程如下:
1) VRMSGEN = 220V and VRMSmeasure = 219V
2) 原始的 VRMS_FACTORn = 2000
3) 新的 VRMS_FACTORn+1 =2000*220/219=2009
3.2.4 电流增益校准
此校准类同电压增益校准。
3.3 校表软件运用
3.3.1 校表软件界面介绍
图 4 校表软件界面
图4的校表软件界面分为5个模块:1,串口衔接模块;2,实时数据模块;3,校对数据设置模块;4,校对数据读出模块;5、通讯数