📄 power_calculation.c
字号:
//**************************************************************************
// This routine takes an average power input, add all the scalling factors to
// turn this into watts. This part is done in floating point.
//
//
// Vincent Chan
// Texas Instruments Hong Kong Ltd
// Date Comments
// =====================
// 01/09/19 Code Starts
// 01/10/07 First cut testing done
//**************************************************************************
#include "emeter_3phase.h"
//--------------------------------------------------------------------------
// This is how the scaling is done.
//
// Max current is 15A -> 2V pk-pk at ADC input
// Max Voltage is 270V -> 2V pk-pk at ADC input
// POWER = 15A*270V = 4050W
//
// Irms at I max = (2V pk-pk/2)*(1/Root2)*(1/2.5Vref)*4096
// Vrms at Vmax = (2V pk-pk/2)*(1/Root2)*(1/2.5Vref)*4096
//
// Average power reading at Vmax and Imax = ((2V pk-pk/2)*(1/Root2)*(1/2.5Vref)*4096)^2
// = 147AE1 HEX
// = 1342177.28
// Power = Average Power Reading * 4050/147AE1
// * 4050/1342177.28
// This routine provides a one TAP FIR which gives a fractional delay. The gain is compensated
//Scale factor = 4050*10/0x147AE1 to give 1/10th of watt
//Example1:
// Use full scale sinne gen which is +/- 0.625V, UPF
// Power = (0.625/1)^2 * 15 *270 = 1582.0W
//
//Example2:
// Use full scale sinne gen which is +/- 0.625V + 60 degrees Current lead
// Power = (0.625/1)^2 * 15 *270 *cos(60) = 791.0W
//
//Example3:
// Use full scale sinne gen which is +/- 0.625V + 62 degrees Current lead
// Power = (0.625/1)^2 * 15 *270 *cos(62) = 742.7W
//
//Example4:
// Use full scale sinne gen which is +/- 0.625V + 58 degrees Current lead
// Power = (0.625/1)^2 * 15 *270 *cos(58) = 838.3W
//
//#define conversion_factor 1.551007104311e-3
#define conversion_factor 3.017485141754e-2
// Transducer particulars
// Transducer type: I Hall sensor: 0.492 Vrms input at 10A/V
// V Resistor network
// Calibration point:
// V 217.6 Vrms input
// I 4.92 Arms input 0.495 Vrms at 10A/V (on paper)
// Calculated power = 221.2 * 4.95 = 1094.94 W
// Actual measured = 1486 W
// Adjustment factor = 1090.94/1486
#define scale_factor1 1090.94/1486
int power_conversion(long total_power, float scale_factor)
{
float scaled_power;
scaled_power = (float) total_power;
scaled_power = scaled_power * scale_factor;
//scaled_power = scaled_power * conversion_factor;
//scaled_power = scaled_power * scale_factor1;
return((int) scaled_power);
}
// power * scale_factor1 * conversion_factor = P/10 WATT
// each pulse = P/10 * 10/32768 JOULE = P/32768 JOULE
// 1 JOULE = 32768 * power * scale_factor1 * conversion_factor
// We want 1000 pulse per KILOWATT HOUR or 1pulse per WATT HOUR
// Each WATT HOUR = 3600 JOULE
// Each WATT HOUR = 3600 *32768 /(scale_factor1 * conversion_factor)
// = 5325068992
// Since this number is too big, we need to divide each by 16 to scale properly
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -