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

📄 hgq.c

📁 我在公司做的基于430F206的互感器现场效验仪.有原理图印板图及源程序,已定型.
💻 C
📖 第 1 页 / 共 3 页
字号:
#include	<e:\lhybak\tyclh.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdio.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\math.h> 
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdlib.h> 
#include <e:\lhybak\f206.h>
/*interrupt void  c_int23();  */
#define pii	3.1415926535898
#define	sqrt_3	1.73205080756887729352744634150587  
#define Rcaiyang1	1.9146885751 /*1.911038611714;1.97856794752*/   /*2.0147856/1.015=1.98501044335*/
#define Dis_Max		1.0e10 
extern int	nTbSysTime,adt; 
extern struct StructKeyNode KeyNode;
extern Boolean bRefurbish; 

int 	N=256;
float 	pr[256],pi[256],fr[256],fi[256];  
extern	float 	PT_arr[13];
void 	PT_ctr(void);
void 	key_manage(void); 
void	CT_measure(void);
void	PT_measure(void); 
void	admitbfb(void);
void	errorbfb(void);
void 	init_dsp(void);
void 	bhd(void); 
void	VA_bhd(void);    
void 	gain_ctr(void);

void 	pga_set(int,int);
void 	kkfft(void);
float 	avg(float *);
float 	av(float *);
void 	jdq_ctr(int,int); 
void 	DC_ctr(void); 
void 	DC_R(void); 
void 	bb_adjust(void);
void 	ratio(void);
void 	direct_ratio(void);
float 	ratio_lb(float *);  
void 	adjust_volt(float);
void 	admit(void);  
void 	admit_pga(void);
void 	admit_ctr(float );
float	admit_ctr2(float);
void 	error(void);
void 	sample(int);
void 	sample_ctr(unsigned int);
void	CT_burden(void);
void	PT_burden(void);

float	avg_U(float *);  
float	max_I(float *);  
float	pow_p(float *,float *);
void	VA_measure(void);  
void	VA_ctr(void);
void	VA_ctr1(void);
void	init_dis(void);
void	putout(void);

float 	ua_xs,ub_xs;
int 	ua_set,ub_set;
volatile unsigned int *reg_p;   
int 	sa[261],sb[261];
float 	pga_xs[2];
int   	pga_u[2]; 
float 	ukr,uki,ikr,iki,uk,ik,angle1,angle2; 
extern float 	G[8],B[8],Y[8],Y_ang[8]; 
float 	r,x,z; 
extern float 	Rs,Z2; 
extern float 	ferr[8],perr[8],CT_test[24];
float 	ukr1[10],ang1[10],bak_uk[10],bak_ik[10];  
extern 	float 		bb,err,Dc,SR,Zb,Zb_cos,SVA;
int 	CT_jx=-1;
extern 	int 		CT1,CTI1;
extern 	float 		COS_ms,SDVA,CT_bi;  
extern 	unsigned 	CT_dj,CT_grade,CT2_mode,CTI2; 
extern 	float 		COS_mode;	
extern	unsigned 	PT_mode;
extern 	float	 	PT_bb,PT_bd,PT_VA,PT_cos,PT_SR,PT1_volt,PT2_volt,PT_error,PT_angle;
extern	float	 	PT_ang_err,PT_G,PT_B;	
extern	unsigned	PT1_mode;
extern  long int 	PT1_temp;
extern 	float 		CT_bd,CT_VA,CT_cos; 
extern	float		CT_bfb,CT_R,CT_X; 
extern	float		CT_ferr,CT_perr;
float 	R_caiyang;   
extern float 		XS_cos,XS_sin;
unsigned int 		admit_ctr_pga,sample_prd; 
float	out_fre;
int 	cd_flag[5];
int 	VA_jdq;  
int 	jdqa=0x0,jdqb=0x0;  
unsigned int mea_again=1;

extern int		nTbSysTime,adt; 
extern struct	StructKeyNode KeyNode;  
extern	float	Usav,Imax,Uav,Iav; 
int		VA_int=1;  
typedef	struct
	{
		float	U_CT;  
		float	I_CT;
/*		float	P_Fe;*/
	}VA_TX;
VA_TX	VA_arr[256]; 
VA_TX	err10_arr[256];
VA_TX	*VA_point;	

float n_Zl2[4];
int VA_wave[204]; 
int n_Zl[204];

int  err10_n;
int  err_no;
float err10_Zl;  
float BH_SVA;

int mea_flag=1;        

/*-----------init tbwrsystab---------*/
void init_dis(void)
{
	int i; 
	for(i=0;i<24;i++)	CT_test[i]=Dis_Max;
	for(i=0;i<4;i++)	n_Zl2[i]=Dis_Max;
	for(i=0;i<14;i++)	PT_arr[i]=Dis_Max;
	
	for(i=0;i<95;i++)
	{
		VA_arr[i].I_CT=Dis_Max;
		VA_arr[i].U_CT=Dis_Max;
		err10_arr[i].I_CT=Dis_Max;
		err10_arr[i].U_CT=Dis_Max;
	}
}

/*---------VA	wave------------*/
void	VA_bhd(void)
{
	int ii,jj,kk;
	float VA_MaxI,VA_MaxU;
	float tempI,tempU;
	VA_wave[0]=100;
	VA_wave[1]=100;
	VA_wave[2]=VA_int+1;
	VA_wave[3]=0; 
	VA_wave[4]=7;
	VA_wave[5]=0;
	VA_MaxI=VA_arr[0].I_CT;
	VA_MaxU=VA_arr[0].U_CT;

	/*-----------shell-----------*/
	for(ii=0;ii<(VA_int-1);ii++)
	{
		for(jj=ii+1;jj<VA_int;jj++)
		{
			if(VA_arr[ii].I_CT>VA_arr[jj].I_CT)
			{
				tempI=VA_arr[ii].I_CT;
				VA_arr[ii].I_CT=VA_arr[jj].I_CT;
				VA_arr[jj].I_CT=tempI;

				tempI=VA_arr[ii].U_CT;
				VA_arr[ii].U_CT=VA_arr[jj].U_CT;
				VA_arr[jj].U_CT=tempI;
			}
		}
	}

	for(ii=0;ii<VA_int;ii++)
	{
		if(VA_arr[ii].I_CT>VA_MaxI)	VA_MaxI=VA_arr[ii].I_CT;
		if(VA_arr[ii].U_CT>VA_MaxU)	VA_MaxU=VA_arr[ii].U_CT;
	}
	tempI=150.0/VA_MaxI;
	tempU=120.0/VA_MaxU;

	for(ii=0;ii<VA_int;ii++)
	{
		VA_wave[2*ii+6]=(int)(tempI*VA_arr[ii].I_CT)+7;
		VA_wave[2*ii+7]=(int)(tempU*VA_arr[ii].U_CT);
	}

	/*--------shell---------*/
	for(ii=0;ii<2*(VA_int-1);ii+=2)
	{
		for(jj=ii+2;jj<2*VA_int;jj+=2)
		{
			if(VA_wave[ii+6]>VA_wave[jj+6])
			{
				tempI=VA_wave[ii+6];
				VA_wave[ii+6]=VA_wave[jj+6];
				VA_wave[jj+6]=tempI;

				tempI=VA_wave[ii+7];
				VA_wave[ii+7]=VA_wave[jj+7];
				VA_wave[jj+7]=tempI;
			}
		}
	}
}

void	VA_10err(void)
{
	unsigned int i;
	int ii,jj,arr_no;
	float	I2e;
	float VA_MaxI,VA_MaxU;
	float tempI,tempU;
	float aaa;
	
	if(CT2_mode==0)
	{
		I2e=5.0;
	}
	else
	{
		I2e=1.0;		
	}
	err10_Zl=BH_SVA/(I2e*I2e);
	n_Zl[0]=100;
	n_Zl[1]=100;
	n_Zl[2]=VA_int-1;
	n_Zl[3]=0;
		
	if(err_no==0)
	{
		for(ii=0;ii<VA_int-1;ii++)
		{
			err10_arr[ii].I_CT=0.05263*VA_arr[ii].U_CT/VA_arr[ii].I_CT-1.05263*Z2;
			err10_arr[ii].U_CT=20.0*VA_arr[ii].I_CT/I2e;
		}
	}
	else if(err_no==1) 
	{
		for(ii=0;ii<VA_int-1;ii++)
		{
			err10_arr[ii].I_CT=0.11*VA_arr[ii].U_CT/VA_arr[ii].I_CT-1.1*Z2;
			err10_arr[ii].U_CT=10.0*VA_arr[ii].I_CT/I2e;
		}
	}

	aaa=20.0;
	for(ii=0;ii<VA_int-1;ii++)
	{
		if(fabs(err10_arr[ii].U_CT-err10_n)<aaa) 
		{
			aaa=fabs(err10_arr[ii].U_CT-err10_n);
			arr_no=ii;
		}
	}
	if((aaa/err10_n)<0.1)
	{
		 n_Zl2[0]=err10_arr[arr_no].U_CT;	
		 n_Zl2[1]=err10_arr[arr_no].I_CT;
	}
	
	aaa=20.0;
	for(ii=0;ii<VA_int-1;ii++)
	{
		if(fabs(err10_arr[ii].I_CT-err10_Zl)<aaa)
		{
			aaa=fabs(err10_arr[ii].I_CT-err10_Zl);
			arr_no=ii;
		}
	}
	if(aaa<0.1)
	{
  		 n_Zl2[2]=err10_arr[arr_no].I_CT;
		 n_Zl2[3]=err10_arr[arr_no].U_CT;
	}

	VA_MaxI=err10_arr[0].I_CT;
	VA_MaxU=err10_arr[0].U_CT;
	for(ii=0;ii<VA_int-1;ii++)
	{
		if(err10_arr[ii].I_CT>VA_MaxI)	VA_MaxI=err10_arr[ii].I_CT;
		if(err10_arr[ii].U_CT>VA_MaxU)	VA_MaxU=err10_arr[ii].U_CT;
	}
	tempI=150.0/VA_MaxI;
	tempU=120.0/VA_MaxU;
	for(ii=0;ii<VA_int-1;ii++)
	{
		n_Zl[2*ii+4]=(int)(tempI*err10_arr[ii].I_CT)+7;
		n_Zl[2*ii+5]=(int)(tempU*err10_arr[ii].U_CT);
	}
	
/*	PT_arr[9]=n_Zl2[0];
	PT_arr[11]=n_Zl2[1];*/
	for(i=0;i<4;i++) PT_arr[9+i]=n_Zl2[i];

	/*--------shell---------*/
	for(ii=0;ii<2*(VA_int-2);ii+=2)
	{
		for(jj=ii+2;jj<2*(VA_int-1);jj+=2)
		{
			if(n_Zl[ii+4]>n_Zl[jj+4])
			{
				tempI=n_Zl[ii+4];
				n_Zl[ii+4]=n_Zl[jj+4];
				n_Zl[jj+4]=tempI;

				tempI=n_Zl[ii+5];
				n_Zl[ii+5]=n_Zl[jj+5];
				n_Zl[jj+5]=tempI;
			}
		}
	}	
}	

/*-----------CT	VA	measure-----------*/
void VA_measure(void)
{
	int i,j,jj; 
	int begin_flag=0,end_flag=0;
	float	U_bak,Imax_bak,PFe_bak;
	float	Iav_bak,I0e;
	float	bf_xs,bx_xs;
	float temp;
	int lcd_x,lcd_y; 
	int err10_flag=1;
	bx_xs=1.11072; 
/*	for(i=0;i<100;i++)
	{
		VA_arr[i].I_CT=0.0;
		VA_arr[i].U_CT=0.0;
	}*/
	VA_int=1;
	VA_point=VA_arr;
	sample_prd=1;
	sample_ctr(256);
	jdq_ctr(2,0x00);	
	VA_jdq=0x20+0x40;
	VA_ctr();
	while(KeyNode.nPage==14150||KeyNode.nPage==14864||KeyNode.nPage==15507||KeyNode.nPage==16150||KeyNode.nPage==16942||KeyNode.nPage==17079||KeyNode.nPage==17722||KeyNode.nPage==18365)
	{
		if(begin_flag==0)
		{
			KeyNode.nkey=0;
			begin_flag=1;
		}

		VA_ctr1();
		gain_ctr();   
		sample(1); 

		Usav=avg_U(pr)/ua_xs/pga_xs[0]*10.0;
		Uav=av(pr)/ua_xs/pga_xs[0]*10.0;
		Iav=av(pi)/ub_xs/pga_xs[1]*20.01818; 
		PFe_bak=pow_p(pr,pi)/ua_xs/pga_xs[0]/ub_xs/pga_xs[1]*20.01818;
		bf_xs=Imax/1.4142/Iav;
		
		CT_test[20]=Usav;
		CT_test[21]=Imax;
		CT_test[22]=Uav;
		CT_test[23]=Iav;
		
	/*-------Imax measure----------*/
		for(i=0;i<5;i++)
		{
			sample(1);	
			Imax=max_I(pi)/ub_xs/pga_xs[1]*20.01818;
			fr[i]=Imax;
		}
		
		for(i=0;i<4;i++)
		{
			for(j=i+1;j<5;j++)
			{
				if(fr[i]>fr[j])
				{
					temp=fr[i];
					fr[i]=fr[j];
					fr[j]=temp;
				}
			}
		}
		temp=0;
		for(i=1;i<4;i++)
		{
			temp+=fr[i];
		}
		Imax=temp/3.0;
					
/*		I0e=sqrt((Imax/1.4142/bf_xs)*(Imax/1.4142/bf_xs)+(PFe_bak/bx_xs/Usav)*(PFe_bak/bx_xs/Usav));*/
		I0e=sqrt(((Imax*Imax)+2.0*(PFe_bak/bx_xs/Usav)*(PFe_bak/bx_xs/Usav))/2.0);
    	reg_prd=2500;
    	reg_tcr=0x0c27;
    	asm("	clrc	intm");
  		for(jj=0;jj<0xffff;jj++)
   		SysTb(&nTbSysTime,1500); 
  		if(KeyNode.nkey==13&&KeyNode.nPage==14150)
   		{
			VA_point->U_CT=Usav;
			VA_point->I_CT=Iav; 
	   		VA_point++;
			KeyNode.nkey=0; 
			VA_bhd();
			VA_int++;
			err10_flag=1;
		} 
		else if(KeyNode.nPage==16942||KeyNode.nPage==17079||KeyNode.nPage==17722||KeyNode.nPage==18365)
		{
			if(err10_flag==1)
			{
				VA_10err();
				err10_flag=0;
			}
		}
		
/*  		for(jj=0;jj<0xffff;jj++)
   		SysTb(&nTbSysTime,1500); */
  	}
}	

void	VA_ctr1(void)
{
    asm("	setc	intm");
	reg_tcr=0x0c20;
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);
	sample_prd=1;
	sample_ctr(256);	
	pga_set(0,0);
	pga_set(1,0); 
	pga=pga_u[0]+(pga_u[1]<<5);

	jdq_ctr(1,VA_jdq+jdqa+jdqb);
	sample(1);
	uk=max_I(pr);
	ik=max_I(pi);
	if(uk<0.7)
	{
		if(jdqa==0x04)
		{
			jdqa=0x08;
			ua_xs=124.0/624.0;
		}
		else if(jdqa==0x08)
		{
			jdqa=0xa;
			ua_xs=1.0;
		}
	}
	else if(uk>4.5)
	{
		if(jdqa==0x0a)
		{
			jdqa=0x08;
			ua_xs=124.0/624.0;
		}
		else if(jdqa=0x08)
		{
			jdqa=0x04;
			ua_xs=24.0/624.0;
		}
	}

	if(ik<0.4)
	{
		if(jdqb==0x00)
		{
			jdqb=0x10;
			ub_xs=12.0;
		}
	}
	else if(ik>4.5)
	{
		if(jdqb=0x10)
		{
			jdqb=0x00;
			ub_xs=1.00;
		}
	}
	jdq_ctr(1,VA_jdq+jdqa+jdqb);
}

void	VA_ctr(void)
{
	int i,j;
    asm("	setc	intm");
	reg_tcr=0x0c20;
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);	
	jdq_ctr(1,VA_jdq);
	ua_xs=2.0/624.0;
	ub_xs=1.0;
	pga_set(0,0);
	pga_set(1,0); 
	pga=pga_u[0]+(pga_u[1]<<5);
	sample(1);
	uk=max_I(pr);
	if(uk<0.3)
	{
		jdqa=0x04;
		jdq_ctr(1,VA_jdq+jdqa);
		ua_xs=24.0/624.0;
		sample(1);
		uk=max_I(pr);		
		if(uk<0.7)
		{
			jdqa=0x08;
			jdq_ctr(1,VA_jdq+jdqa);
			ua_xs=124.0/624.0;
			sample(1);
			uk=max_I(pr);
			if(uk<0.7)
			{
				jdqa=0xa;
				ua_xs=1.0;
			}
		}
	}
	sample(1);
	ik=max_I(pi);
	if(ik<0.4)
	{
		jdqb=0x10;
		ub_xs=12.0;
	}
	jdq_ctr(1,VA_jdq+jdqa+jdqb);
}

/*--------------ct measure------------*/
void CT_measure(void)
{  
	int i,jj;
	if(CT2_mode==0)
	{
		SR=CT1/5.0;
		Zb=SVA/25.0;
	}
	else
	{
		SR=CT1;
		Zb=SVA;
	} 
/*	if(COS_mode==0)
	{
	    XS_cos=1.0;
	}              
	else
	{   XS_cos=0.8;
} */

	if(COS_mode>1.0) XS_cos=1.0;
	else if(COS_mode<0.0) XS_cos=0.0;
	else	XS_cos=COS_mode;
    XS_sin=sqrt(1-XS_cos*XS_cos);
	DC_R();
	 reg_prd=2500;
         reg_tcr=0x0c27;
	asm("	clrc	intm");
	nTbSysTime=0;            
    for(jj=0;jj<0xffff;jj++)
    SysTb(&nTbSysTime,1000);
    bRefurbish=True;
    while(bRefurbish==True)
    {
     	SysTb(&nTbSysTime,1000);
    }
    if(KeyNode.nPage==13296||KeyNode.nPage==13750)
	{
		asm("	setc	intm");
		ratio();
		 reg_prd=2500;
            	reg_tcr=0x0c27;
		asm("	clrc	intm");
		nTbSysTime=0;          
    	for(jj=0;jj<0xffff;jj++)
    	SysTb(&nTbSysTime,1000);
    	bRefurbish=True;
    	{
    		SysTb(&nTbSysTime,1000);
    	}     	
		if(KeyNode.nPage==13296)
		{
			asm("	setc	intm");
			admit(); 
			error(); 
		}
    	else	if(KeyNode.nPage==13750)
    	{
    		asm("	setc	intm");
    		admitbfb();
    	  	errorbfb();
    	}
	}
    
    CT_test[5]=ferr[0];	
    CT_test[6]=ferr[1];
    CT_test[7]=ferr[2];
    CT_test[8]=ferr[3];
    CT_test[9]=perr[0];
    CT_test[10]=perr[1];
    CT_test[11]=perr[2];
    CT_test[12]=perr[3];
    CT_test[13]=CT_ferr;
    CT_test[14]=CT_perr;
    init_dsp();
}	

/*---------CT burden measure------------*/
void CT_burden(void)
{
	unsigned int i,j,k; 
	reg_tcr=0x0c20; 
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);
	

⌨️ 快捷键说明

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