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

📄 compute_power.c

📁 基于8051F实现导纳分析仪,键盘,液晶,功能都全有,其中包含测频,测相,测高电平,测低电平,测幅.等多种算法思想.用C语言实现.绝对原创!
💻 C
字号:
/*===============================================================*/
/*函数名称: Compute_Power.c                                     */
/*函数功能: 计算平均功率,无功功率,功率因素                    */
/*入口参数: 无                                                  */
/*出口参数: 无                                                  */
/*参数说明: reactive_power--------------------------------无功功率
       		 average_power-----------------------有功功率(平均功率)
			 theta-----------------------------------------功率因素
                                                                 */
/*修改记录: 无修改记录                                          */
/*编写作者: t483-4-19chenyong                                   */
/*编写日期: 2007-4-14                                           */
/*===============================================================*/
#include"common.h"
#include"ad9851.h"
#include<math.h> 
#define  Command_Time	 0.48		  //1/25MHz(系统时钟为25MHz)

extern float Current,Voltage;
extern float Y_Real, Y_Image;
extern float Y_Abs,  Y_Phase;
extern float theta;
extern float reactive_power;
extern float average_power;
extern unsigned long Pulse_Number;    //所测量的脉冲个数   
//unsigned long  Frequncy;
extern unsigned long  FrequencyLong_HZ; 

void  Compute_Power(void)
{

      float Angle_Frequncy=0.0;  
	  float t=0.0,error_duty=0.0; 

//	  ad9851();

//	  FrequencyLong_HZ = FrequencyLong_HZ*5.99;
      Angle_Frequncy = 2*3.1415926;
	  Pulse_Number = Pulse_Number*1.06358;
	  Pulse_Number = Pulse_Number-6.35466;		  //直线拟和后的值

	  t = (float)0.48*Pulse_Number;               //计算相位
	  t = (float)t/100;
	  t = (float)t*FrequencyLong_HZ*6;
	  t = (float)t/10;


	  Y_Phase = (float)t*Angle_Frequncy;
	  Y_Phase = (float)Y_Phase/1000;              //单位变成秒 
	  error_duty = Y_Phase*0.12292701;
	  error_duty = error_duty-0.030691098;		  //误差直线拟和后的参数值
	  Y_Phase = Y_Phase+0.0306876;	              //静态误差为0.403832733
	  Y_Phase = Y_Phase-error_duty;
	  Y_Phase = (float)Y_Phase;

	  if(Y_Phase<=3.1415926) 
	  {
	        Y_Phase = Y_Phase;	       	          //化成弧度	
	  	     
	  }
	  else
	  {	  
	  	    Y_Phase=6.283185-Y_Phase;  	  	  
	  }
	       
	  average_power = Voltage*Current;
	  average_power = average_power*cos(Y_Phase);	  //计算有功功率

	  reactive_power = Voltage*Current;
	  reactive_power = reactive_power*sin(Y_Phase);	  //计算无功功率

	  theta = cos(Y_Phase);							  //计算功率因素

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -