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

📄 hgq.c

📁 我在公司做的基于430F206的互感器现场效验仪.有原理图印板图及源程序,已定型.
💻 C
📖 第 1 页 / 共 3 页
字号:
	ad7538=0; 
	jdq_ctr(2,0x8+0x60+0x1);
	jdq_ctr(1,0x01);
	ub_xs=6.00;
	ua_xs=0.30;
	for(i=0x100;i<0x3eff;i=i+0x100)
	{
		ad7538=i;
		for(j=0;j<0xffff;j++)
		for(k=0;k<0x10;k++);
		sample(5);  
		kkfft();
		if(ik>0.4||uk>3.0) break;
	}
	sample(5);      
	kkfft();
	if(uk*ua_xs<0.3)
	{
		jdq_ctr(2,0x8+0x60);
		ua_xs=3.0;
		sample(5);
		kkfft();
		if(uk*ua_xs<0.3)
		{
			jdq_ctr(1,0x01+0x80);
			ua_xs=30.0;
		}
	}
	for(i=0;i<10;i++)
	{
		sample(5);      
		kkfft();
		ukr1[i]=uk/(ik/Rcaiyang1);
	}
	CT_bd=ratio_lb(ukr1);
	CT_cos=cos(angle1*pii/180.0);  
	CT_R=CT_bd*CT_cos;
	CT_X=CT_bd*sin(angle1*pii/180.0);
	if(CT2_mode ==0)
	{
		CT_VA=25.0*CT_bd;
	}
	else CT_VA=CT_bd;
	
	CT_test[15]=CT_R;
	CT_test[16]=CT_X;
	CT_test[17]=CT_bd;
	CT_test[18]=CT_cos;
	CT_test[19]=CT_VA;
	init_dsp();
}	
 
/*---------PT burden measure----------*/
void PT_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);
	
	ad7538=0;
	admit_ctr_pga=0x8+0x04;
	jdq_ctr(2,0x8+0x04+0x1);
	jdq_ctr(1,0x01);
	R_caiyang=20.00;
	ub_xs=1.00;
	ua_xs=0.30;
	for(i=0x100;i<0x3eff;i=i+0x100)
	{
		ad7538=i;
		for(j=0;j<0xffff;j++)
		for(k=0;k<0x10;k++);
		sample(5);  
		kkfft();
		if(uk>6.0||ik>3.0) break;
	}
	sample(5);
	kkfft();
	if(ik<0.3)
	{
		admit_ctr_pga=0x8+0x10;
		jdq_ctr(2,0x8+0x10+0x1);
		R_caiyang=200.0;
		for(j=0;j<0xffff;j++);
		sample(5);
		kkfft();
/*		if(ik<0.3)
		{
			admit_ctr_pga=0x8;
			jdq_ctr(2,0x8+0x1);
			R_caiyang=2000.0;
		}*/
	}
	admit_pga();
	for(i=0;i<10;i++)
	{
		sample(5);
		kkfft();
		ukr1[i]=(ik/R_caiyang)*1000.0/uk;
	}
	PT_bd=ratio_lb(ukr1);
	PT_cos=cos(angle1*pii/180.0); 
	PT_G=PT_bd*PT_cos-0.0016;
	PT_B=PT_bd*sin(-angle1*pii/180.0);
	PT_bd=sqrt(PT_G*PT_G+PT_B*PT_B);
	if(PT_mode==0)	PT_VA=10.0*PT_bd;
	else if(PT_mode==1)	PT_VA=10.0*PT_bd/3.0;
	else	PT_VA=10.0*PT_bd/9.0; 
	
	PT_arr[4]=PT_G;
	PT_arr[5]=PT_B;
	PT_arr[6]=PT_bd;
	PT_arr[7]=PT_cos;
	PT_arr[8]=PT_VA;
	init_dsp();
} 
 
/*----------PT	error	measure-----------*/
void	PT_err(void)
{
	PT_measure();
	if(PT1_mode==0)PT1_volt=PT1_temp*1.0;
	else	PT1_volt=PT1_temp/sqrt_3;
	if(PT_mode==0)PT2_volt=100.0;
	else if(PT_mode==1)PT2_volt=100.0/sqrt_3;
	else	PT2_volt=100.0/3.0;
	PT_SR=PT1_volt/PT2_volt;
	PT_error=(PT_bb-PT_SR)/PT_SR*100.0;     
	PT_ang_err=PT_angle;  
	PT_arr[2]=PT_error;
	PT_arr[3]=PT_ang_err;
}


/*-------------PT	measure------------*/
void PT_measure(void)
{    
	unsigned int i,j,k;
	float PT_bak[11];
	PT_ctr();
	gain_ctr();
	for(i=0;i<10;i++)
	{                 
		for(j=0;j<0xffff;j++)
		for(k=0;k<0x10;k++);	
		sample(1);
		kkfft();  
		uk=uk/pga_xs[0];
		ik=ik/pga_xs[1];
		PT_bak[i]=uk/ik;
	}   
	PT_bb=ratio_lb(PT_bak);
	if(angle1>180.0)	angle1-=360.0;
	PT_angle=angle1*60.0;
	PT_arr[0]=PT_bb;
	PT_arr[1]=PT_angle;
	ad7538=0;
	for(j=0;j<0xffff;j++)
	for(k=0;k<0x20;k++);	
	init_dsp(); 
}

/*
void PT_ctr(void)
{
	unsigned int i,j;  
	ad7538=0;
	jdq_ctr(2,0x2+0x40+0x84);
	jdq_ctr(1,0x00);
	out_fre=50.0;
	reg_tcr=0x0c20;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);
	ad7538=0x3fff;
	ua_xs=2.00/624.0;
	ub_xs=10.0/110.0;	
	for(i=0;i<0xffff;i++)
	for(j=0;j<0x10;j++);
	sample(1);
	kkfft();
    ik=ik*ub_xs;
	if(ik>0.28) return;
	jdq_ctr(1,0x40);
	ub_xs=1.0;
	sample(1);
	kkfft();    
    ik=ik*ub_xs;
	if(ik>0.25) return; 
	jdq_ctr(1,0x50);
	ub_xs=12.0;
}	
*/
void PT_ctr(void)
{
	unsigned int i,j;  
	unsigned int sy_flag=1;	
	ad7538=0;
/*	jdq_ctr(2,0x2+0x40+0x84+0x20);*/
	jdq_ctr(2,0x2+0x40+0x20);
	jdq_ctr(1,0x00);
	out_fre=50.0;
	reg_tcr=0x0c20;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);
	ua_xs=2.00/624.0;
	ub_xs=10.0/110.0;	
	for(i=0;i<0x100;i=i+0x10)
	{
		ad7538=i;
		sample(5);
		ik=av(pi);
		if(ik>0.6)
		{
			sy_flag=0;
			break;
		}
	}
if(sy_flag==1)
{
	for(i=0x100;i<0x3eff;i=i+0x100)
	{	
		ad7538=i;
		sample(5);
		ik=av(pi);
		if(ik>0.6)
		{
			sy_flag=0;
			break;
		}
	}
}
	if(sy_flag==1) ad7538=0x3fff;
	for(i=0;i<0xffff;i++)
	for(j=0;j<0x10;j++);
	sample(1);
	kkfft();
    ik=ik*ub_xs;
	if(ik>0.28) return;
	jdq_ctr(1,0x40);
	ub_xs=1.0;
	sample(1);
	kkfft();    
    ik=ik*ub_xs;
	if(ik>0.25) return; 
	jdq_ctr(1,0x50);
	ub_xs=12.0;
}	

/*-------------ratio adjust-------------*/
void bb_adjust(void)
{           
	unsigned int i,j;
	jdq_ctr(2,0x2+0x84);
	jdq_ctr(1,0x0+0x40);
	for(i=0x2000;;i=i)
	{   
		ua_xs=2.00/610.00;
		ub_xs=1.000;
		ad7538=i;
		for(j=0;j<0xffff;j++);
		gain_ctr();
		sample(1);
		kkfft(); 
		uk=uk/pga_xs[0];
		ik=ik/pga_xs[1];
		bb=uk/ik;  
		err=(100.000-bb)/100.00;
	}
} 

/*------------adjust voltage------------*/
void adjust_volt(float bdz)
{   
	unsigned int i,j,k,sy_flag=0;
	float I_er;
	jdq_ctr(2,0x8+0x40+0x20);
	if(bdz<=3.00)
	{        
		jdq_ctr(1,0xa+0x50);
		ua_xs=1.00;
	}
	else if(bdz<=15.1)
	{
		jdq_ctr(1,0x8+0x50);
		ua_xs=124.0/624.0; 
	}
	else
	{
		jdq_ctr(1,0x4+0x50);
		ua_xs=24.0/624.0;
	}                     
	ub_xs=12.00;
	for(i=0x100;i<0x3eff;i=i+0x100)
	{
		ad7538=i;
		for(j=0;j<0xffff;j++)
		for(k=0;k<0x10;k++);		
		sample(1); 
		uk=av(pr)/ua_xs;   
		if(uk>bdz)
		{
			sy_flag=1;
			 break;
		}
		sample(5);
		I_er=av(pi)/6.00/Rcaiyang1;
		if(I_er>0.20) break;
/*		if(uk>bdz) break;*/
	}    
if(sy_flag==1)
{	
	sample(1);
	kkfft();
	if(uk>bdz)
	{
		for(k=i-0x10;k>0x10;k=k-0x10)
		{                    
			ad7538=k;
			for(j=0;j<0xffff;j++);
			sample(1);
			kkfft();
			if(uk<bdz) return;
		}
	}                        
	else
	{
		for(k=i+0x10;k<0x3eff;k=k+0x10)
		{                    
			ad7538=k;
			for(j=0;j<0xffff;j++);
			sample(1);
			kkfft();
			if(uk>bdz) return;
		}
	}             	
}
}    
/*----------------------------*/
/*
interrupt void  c_int23()
{ 
	i++;
	reg_icr=0x0d;
	reg_p=(unsigned int *)reg_ifr;  
	*reg_p=0x2;
	s[i]=max125; 
}
*/	  

/*-----------init dsp-------------*/
void init_dsp(void)
{    
	reg_wsgr=0xffff;      
	ad7538=0x0;  
	jdq_ctr(2,0x01+0x8); 
	jdq_ctr(1,0x00);
	pga=0x00;
	reg_aspcr=0x2000;
	/*tout	control frequency*/  
	reg_tcr=0x0c20; 
	/*----------f=CLKOUT1/((TDDR+1)*(PRD+1))----------*/
	/*----------f=50Hz----1,0x0c23---2,0x004d---------*/
	/*----------f=1562Hz--1,0x0c21---2,0x0004---------*/
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
}

/*----------JDQ-CONTRAL--------*/
void 	jdq_ctr(int jdq_no,int a)
{  
	unsigned int i,j;
	if(jdq_no==1)
		pout1=a;
	else if(jdq_no==2)
		pout2=a;
	for(i=0;i<0x7fff;i++)
	for(j=0;j<10;j++);  
} 

/*----------sample	frequency control----------*/
void 	sample_ctr(unsigned int sample_fre)
{
	if(sample_fre==256)
		pout3=0x00;
		else if(sample_fre==128)
			pout3=0x10;
			else if(sample_fre==64)
				pout3=0x20;
				else if(sample_fre==32)
					pout3=0x30;
					else if(sample_fre==16)
					pout3=0x40;	
						else	
						pout3=0xf0;    /*close*/
	N=sample_fre*sample_prd;
}					
	
/*-----------DC resistant measure ctr----------*/
void DC_ctr(void)  
{
	int i;
	jdq_ctr(2,0x40+0x01);
	jdq_ctr(1,0x01); 
	sample(5);
	for(i=0;i<N;i++)
	{
		if(fabs(pr[i])>0.4) 
		{
			ua_xs=0.30;
			break;
		}
	}
	if(i<N) return; 
	jdq_ctr(2,0x40+0x00);
	sample(5);
	for(i=0;i<N;i++)
	{
		if(fabs(pr[i])>0.4) 
		{
			ua_xs=3.00;
			break;
		}
	}
	if(i<N) return; 
	jdq_ctr(2,0x40);
	jdq_ctr(1,0x80+0x1);  
	ua_xs=30.0;
/*	sample(5);
	for(i=0;i<N;i++)
	{
		if(fabs(pr[i])>0.4) 
		{
			ua_xs=33.0;
			break;
		}
	}               
	return;
*/
}
	
/*----------DC RESISTANT MEASURE--------*/
void DC_R(void)
{    
	int i,j;  
	reg_tcr=0x0c20;
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);	
	DC_ctr(); 
	for(i=0;i<0x7fff;i++)
	for(j=0;j<0x80;j++);
	sample(5); 
	ub_xs=1.00;
/*	
	kkfft(); 
	uk=fr[0]/ua_xs/256.0;  
	ik=-fi[0]/2.00/256.0; 
	Rs=uk/ik;
*/  
	uk=avg(pr)/ua_xs;        
	ik=1.250;
/*	ik=-avg(pi)/2.00/ub_xs;*/
	Rs=fabs(uk/ik);  
	ad7538=0;
	for(i=0;i<0x7fff;i++)
	for(j=0;j<0x80;j++);
	jdq_ctr(2,0x8+0x84); 	
}

/*--------------ratio ctr---------------*/
void bb_ctr(void)
{ 
	int U_ct,U1_jdq,U2_jdq; 
	unsigned int i,j;
	float U1,U2;
	pga=0x00;  
	U1=SR*0.100;
	adjust_volt(U1); 
}   

/*----------CT direct ratio measure----------*/
void direct_ratio(void)
{
	unsigned int i,j,k;
	int ik_flag=0; 
	init_dsp();  
	out_fre=100.0;    
	reg_tcr=0x0c20;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=2;
	sample_ctr(128);
	jdq_ctr(2,0x8+0x40+0x20);
	ua_xs=0.30;
	ub_xs=6.00;
	for(i=0x100;i<0x3eff;i=i+0x100)
	{
		ad7538=i;               	
		for(j=0;j<0xffff;j++);
		sample(5);
		kkfft();
		if(ik>0.10)	break;
	}
	jdq_ctr(1,0x4+0x40);
	ua_xs=24.0/624.0;
	ub_xs=1.00;
	sample(1);                          
	kkfft();
	if(uk*ua_xs<0.5)	
	{
		if(ik*ub_xs<0.25) 
		{
			ik_flag=1;
			jdq_ctr(1,0x8+0x50);
			ub_xs=12.00;
			ua_xs=124.0/624.0;
		}
		else
		{
			jdq_ctr(1,0x8+0x40);
		    ua_xs=124.0/624.0;
		    ub_xs=1.00;
		}
		sample(1); 
		kkfft();
		if(uk*ua_xs<0.5)
		{
			if(ik_flag==0)
			{
				jdq_ctr(1,0xa+0x40);
				ua_xs=1.00;
			}
			else
			{
				jdq_ctr(1,0xa+0x50);
				ua_xs=1.00;
			}
		}
	}              
	else
	{
		if(ik*ub_xs<0.25) 
		{
			jdq_ctr(1,0x4+0x50);
			ub_xs=12.00;
			ua_xs=24.0/624.0;
		}   
	}
	gain_ctr();
	for(i=0;i<10;i++)
	{
	sample(1);
	kkfft();
	uk=uk/pga_xs[0];
	ik=ik/pga_xs[1];
	bb=uk/ik;
	bak_uk[i]=uk;
	bak_ik[i]=ik;
	ukr1[i]=bb; 
	ang1[i]=angle1;
	}
	bb=ratio_lb(ukr1);
	angle1=ratio_lb(ang1); 
	if(angle1<10.0||angle1>350.0) CT_jx=0;
	else CT_jx=1;
	
	ad7538=0x00;
	for(i=0;i<0xffff;i++); 
	DC_R(); 
	
	CT_test[0]=bb;
	CT_test[1]=Rs;	
	init_dsp();
}

/*------------ratio measure--------------*/
void ratio(void)
{   
	int ua_pgaxs,ub_pgaxs; 
	float	I_er;
	unsigned int i,j,k; 
	reg_tcr=0x0c20;
	out_fre=100.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=2;
	sample_ctr(128);
	jdq_ctr(1,0x00);	
/*	jdq_ctr(2,0x8+0x84); */
	jdq_ctr(2,0x8+0x40+0x20);
	/*---pga ctr------7,6,5--ub    2,1,0--ua*/ 
/*	set_DA(0x800); 
	ua_xs=120.0/630.0; 
	ub_xs=6.00;*/
	bb_ctr(); 
	for(i=0;i<0xffff;i++);
	for(j=0;j<0x40;j++);
	gain_ctr();  
	for(i=0;i<10;i++)
	{
    for(j=0;j<0xffff;j++)
	for(k=0;k<0x10;k++);
	sample(5);
	kkfft();
	I_er=ik/6.00/Rcaiyang1*Rs*ub_xs;
	sample(1); 
	kkfft(); 
	uk=uk/pga_xs[0];
	ik=ik/pga_xs[1];
	bb=(uk-I_er)/ik;

⌨️ 快捷键说明

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