⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 power_calculation.c

📁 TI三相电能表源程序
💻 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 + -