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

📄 main.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
📖 第 1 页 / 共 2 页
字号:
	int j,k;
	Valr=0;
  Vali=0;
  Value=0;
  k=0;
        
	for (j=0;j<36;j++)
	 {
	  Valr=Valr+(*(PP+j))*cs0[k];
    Vali=Vali+(*(PP+j))*cs1[k];
	  k=k+i;
	  if (k>=36) k=k-36;
   }
    Valr=Valr/FOUR_D;
    Vali=Vali/FOUR_D;
    Value=sqrt(Valr*Valr+Vali*Vali);  
    return(Value);
}        
//取反
float Not_D(float pp)
{
	float temp;
	if(pp<0)temp=-pp;
		else temp=pp;
	return(temp);
}
//计算函数
void Measure(void)
{
	uint i,j,p_time;
	float temp;
	Mea_Pq(samp6,samp7,0);   //计算A相电压电流有功无功功率因数
	Mea_Pq(samp8,samp9,1);   //计算A相电压电流有功无功功率因数
	Mea_Pq(samp10,samp11,2);   //计算A相电压电流有功无功功率因数
	
	p_time=one_second();
	if(p_time==1)
		{
//计算总有功,并累加电量
			p_yg+=(Not_D(p_abc[0][mea_count])+Not_D(p_abc[1][mea_count])+Not_D(p_abc[2][mea_count]))*500/ct_array[SET_CT];
  		if(p_yg>36000)
  			{
  				p_yg-=36000;
  				set_yg[0]++;
  				if(set_yg[0]>99){set_yg[1]++;set_yg[0]=0;}
  				if(set_yg[1]>99){set_yg[2]++;set_yg[1]=0;}
  				if(set_yg[2]>99){set_yg[3]++;set_yg[2]=0;}
  				if(set_yg[3]>99){set_yg[0]=0;set_yg[1]=0;set_yg[2]=0;set_yg[3]=0;}
  			}		
//计算总无功,并累加电量
  		p_wg+=(Not_D(q_abc[0][mea_count])+Not_D(q_abc[1][mea_count])+Not_D(q_abc[2][mea_count]))*500/ct_array[SET_CT];
  		if(p_wg>36000)
  			{
  				p_wg-=36000;
  				set_wg[0]++;
  				if(set_wg[0]>99){set_wg[1]++;set_wg[0]=0;}
  				if(set_wg[1]>99){set_wg[2]++;set_wg[1]=0;}
		  		if(set_wg[2]>99){set_wg[3]++;set_wg[2]=0;}
  				if(set_wg[3]>99){set_wg[0]=0;set_wg[1]=0;set_wg[2]=0;set_wg[3]=0;}
  			}		
          }  
	
	i=js_f();
	if(i>4490&&i<6550){up1_data.avr_f=i;f_abc[mea_count]=i;}
	
  mea_count++;
  if(mea_count>19)mea_count=0;
  	
    
  switch(xb_count1)
  {
  	case 0:
  		   for(i=0;i<4;i++)
  		   {  		   	 
  		   	 j=xb_count2*4+i+2;  		     
  		     xiebo[0][xb_count2*4+i]=xbu_xishu*Xiebo_Fft(samp6,j);
  		     temp=xiebo[0][xb_count2*4+i]/u_abc[0][0];
  		     up2_data.avr_xb[0][xb_count2*4+i]=temp*1000;   		     
  		   }
  		   if(up1_data.avr_u[0]<500)                   /*无电压*/
  		     	{
  		     		for(j=0;j<15;j++)up2_data.avr_xb[0][j]=0; 
  		     	} 		     
  		   break;
  	case 1:
  		   for(i=0;i<4;i++)
  		    {  		    	
  		    	xiebo[1][xb_count2*4+i]=xbu_xishu*Xiebo_Fft(samp8,xb_count2*4+i+2);  
  		    	temp=xiebo[1][xb_count2*4+i]/u_abc[1][0];		     
  		    	up2_data.avr_xb[1][xb_count2*4+i]=temp*1000;  		       		    	
  		    }
  		    if(up1_data.avr_u[1]<500)                  /*无电压*/
  		     	{
  		     		for(j=0;j<15;j++)up2_data.avr_xb[1][j]=0; 
  		     	} 		     
  		    break;
  	case 2:
  		   for(i=0;i<4;i++)
  		    {  		    	
  		    	xiebo[2][xb_count2*4+i]=xbu_xishu*Xiebo_Fft(samp10,xb_count2*4+i+2);  		     
  		    	temp=xiebo[2][xb_count2*4+i]/u_abc[2][0];
  		    	up2_data.avr_xb[2][xb_count2*4+i]=temp*1000;  		     
  		    }
  		    if(up1_data.avr_u[2]<500)                  /*无电压*/
  		     	{
  		     		for(j=0;j<15;j++)up2_data.avr_xb[2][j]=0; 
  		     	} 		     
  		    break;
  	case 3:
  		   for(i=0;i<4;i++)
  		    {  		    	
  		   // 	temp=xbi_xishu*Xiebo_Fft(samp7,xb_count2*4+i+2);  		     
  		   // 	xiebo[3][xb_count2*4+i]=temp*ct_array[SET_CT]/5;
  		   		xiebo[3][xb_count2*4+i]=xbi_xishu*Xiebo_Fft(samp7,xb_count2*4+i+2);
  		    	temp=xiebo[3][xb_count2*4+i]/i_abc[0][0];
  		    	up2_data.avr_xb[3][xb_count2*4+i]=temp*1000;  		       		    	
  		    }
  		    if(i_abc[0][0]<0.15)                  /*小电流*/
  		     	{
  		     		for(j=0;j<15;j++)up2_data.avr_xb[3][j]=0; 
  		     	} 		     
  		    break;	    
  	case 4:
  		   for(i=0;i<4;i++)
  		    {  		    	  		      
  		    	xiebo[4][xb_count2*4+i]=xbi_xishu*Xiebo_Fft(samp9,xb_count2*4+i+2);	     
  		    	temp=xiebo[4][xb_count2*4+i]/i_abc[1][0];
  		    	up2_data.avr_xb[4][xb_count2*4+i]=temp*1000;    		    	
  		    }
  		    if(i_abc[1][0]<0.15)                       /*小电流*/
  		     	{
  		     		for(j=0;j<15;j++)up2_data.avr_xb[4][j]=0; 
  		     	} 		     
  		    break;
  	case 5:
  		   for(i=0;i<4;i++)
  		    {  		    	  		    
  		    	xiebo[5][xb_count2*4+i]=xbi_xishu*Xiebo_Fft(samp11,xb_count2*4+i+2); 	     
  		    	temp=xiebo[5][xb_count2*4+i]/i_abc[2][0];
  		    	up2_data.avr_xb[5][xb_count2*4+i]=temp*1000;  		       		    	
  		    }
  		    if(i_abc[2][0]<0.15)                         /*小电流*/
  		     	{
  		     		for(j=0;j<15;j++)up2_data.avr_xb[5][j]=0; 
  		     	} 		     
  		    break;  	
  }
  xb_count1++;
  if(xb_count1>5)
  	{
  		xb_count1=0;
  		xb_count2++;
  		if(xb_count2>3)xb_count2=0;  		  
  	}  
}

float Average(float *addr,uint j)
{
	float value;
	uint i;
	value=0;
	for(i=0;i<j;i++)
	{
		value+=*(addr+i);
	}
	value/=j;
	return(value);
}

uint Average_U(uint *addr,uint j)
{
	ulong value;
	uint i,temp_value;
	value=0;
	for(i=0;i<j;i++)
	{
		value+=*(addr+i);
	}
	temp_value=value/j;
	return(temp_value);
}

void Pjing_Z(void)
{
	float temp1,temp2,temp;
	uint i,j;			
	int value,zfshu;
	for(j=0;j<3;j++)
	{
		temp1=0;
		temp2=0;
	  temp1=Average(&u_abc[j][0],20);
	  if(temp1<10)
	  	{
	  		for(i=0;i<16;i++)
	  		{
	  			xiebo[j][i]=0;
	  		}
	  		up2_data.avr_zxb[j]=0;
	  		up1_data.avr_u[j]=0;
	  	}	 
	  	else
	  		{
	  			for(i=0;i<16;i++)
	   			{
		  			temp2+=xiebo[j][i]*xiebo[j][i];		  
	   			}
	  			temp=sqrt(temp2);
	  			temp/=u_abc[j][0];
	  			up2_data.avr_zxb[j]=temp*1000;
	  			up1_data.avr_u[j]=sqrt(temp1*temp1+temp*temp)*100;	
	  			if(up1_data.avr_u[j]<1000){up1_data.avr_u[j]=0;up2_data.avr_zxb[j]=0;}			
	  		}	  
  }
  
  up1_data.avr_u[3]=up1_data.avr_u[0]/2+up1_data.avr_u[1]/2-up1_data.avr_u[2];
  up1_data.avr_u[3]=abs(up1_data.avr_u[3]);
  
  for(j=0;j<3;j++)
  {
  	temp1=0;
  	temp2=0;
  	temp=0;
  	temp1=Average(&i_abc[j][0],20);
  	if(temp1<0.15)temp1=0;
  		else temp1=temp1*ct_array[SET_CT]/5;
  	if(temp1>50)
  	{
  	 for(i=0;i<10;i++)
  	  {
  		temp2+=xiebo[j+3][i]*xiebo[j+3][i];  		
  	  }
  	  temp=sqrt(temp2);
  	  temp/=i_abc[j][0];
  	  up2_data.avr_zxb[j+3]=temp*1000;
  	}  
  	up1_data.avr_i[j]=sqrt(temp1*temp1+temp*temp)*10;
  	if(up1_data.avr_u[j]==0||up1_data.avr_i[j]<49){up1_data.avr_i[j]=0;up2_data.avr_zxb[j+3]=0;}
  }
	
	up1_data.avr_i[3]=up1_data.avr_i[0]/2+up1_data.avr_i[1]/2-up1_data.avr_i[2];
	up1_data.avr_i[3]=abs(up1_data.avr_i[3]);
	
	for(j=0;j<3;j++)
	{			
		zfshu=Average(&c_abc[j][0],20)*1000;               
		if(zfshu<0)cos_flag[j]=1;
			else cos_flag[j]=0;
		up1_data.avr_c[j]=abs(zfshu);	
		if(up1_data.avr_i[j]==0||up1_data.avr_c[j]>998)
			{
				up1_data.avr_c[j]=1000;
				cos_flag[j]=0;	
			}
			
		zfshu=Average(&p_abc[j][0],20);
		if(zfshu<0)p_flag[j]=1;
			else p_flag[j]=0;	
		up1_data.avr_p[j]=abs(zfshu);
		
		zfshu=Average(&q_abc[j][0],20);
		if(zfshu<0)q_flag[j]=1;
			else q_flag[j]=0;	
		up1_data.avr_q[j]=abs(zfshu);	
		
		if(up1_data.avr_i[j]<20)
			{
				p_flag[j]=0;
				q_flag[j]=0;
				up1_data.avr_p[j]=0;
				up1_data.avr_q[j]=0;
			}
	}

	if(time_count>1800)
		{
		time_count=0;
		f_bak=Average_U(f_abc,20);
		per_bak=6944445/f_bak;
		value=*T2PER;
		value-=per_bak;
		if(abs(value)>20)*T2PER=per_bak;
	  }		  
}

main()
{	
			uint liuyong;
			uint cxl=0;
			Disable();
			Initial();           /*系统初始化*/
			Soft_Init();		 /*软件初始化*/
			Lcd_Init();
			Ad_Init();
			Time_Init();
			Read_Time();		
			T_Init();			       
			Read_Set();	         /*读设置参数*/ 
			Read_Blset();        /*读比例系数*/
			C_Cap();             /*计算电容容量*/
			Re_Tjshuju();        /*读起统计数据*/
			Read_Ram();
			if(start_int!=0x5555)
			{//上电初始化,保存停电数据
				start_int=0x5555;
				Save_Td();		
			}			
			Disp();
			Enable();		
			for(liuyong=0;liuyong<100;liuyong++)
			{
				for(cxl=0;cxl<20000;cxl++);
				Measure();
				Pjing_Z();
			}			
			p_mode=PAUTO;
			p_screen=SCR_AUTO_FIRST;
			screen_flag=1;
			Disp();
			
	while(1)
	{	
		Measure();
		Pjing_Z();
		Write_Ram();                /*保存电量*/
		if(time_count>1500)Disp();
		Key();
		Read_Time();			
		Wr_tdtime();
		Save_Data();	
		for(liuyong=0;liuyong<5;liuyong++)	
		uart();	
		if(p_mode==PAUTO)Tq();			
	}			
}
 

⌨️ 快捷键说明

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