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

📄 hgq.c

📁 我在公司做的基于430F206的互感器现场效验仪.有原理图印板图及源程序,已定型.
💻 C
📖 第 1 页 / 共 3 页
字号:
	/*bb=uk/ik;*/
	ukr1[i]=bb; 
	ang1[i]=angle1;
	}
	bb=ratio_lb(ukr1);
	ad7538=0x00;
	for(i=0;i<0xffff;i++);
} 

/*-----------ratio lvbo---------------*/ 
float ratio_lb(float *ap)
{
	float temp;
	int i,j;
	float *ap1; 
	ap1=ap;
	for(i=0;i<9;i++)
	{
		for(j=i+1;j<10;j++)
		{
			if((*ap1)>(*(ap1+1)))
			{
				temp=*ap1;
				*ap1=*(ap1+1);
				*(ap1+1)=temp;
			}
			ap1++;
		}
		ap1=ap;
	}  
	return(((*(ap+3))+(*(ap+4))+(*(ap+5))+(*(ap+6)))/4.0);
}  

/*------------ad526	set-------------*/
void pga_set(int pga_no,int x)
{   
	float y;
	int i;
	y=1.00;
	switch(x)
	{
		case	0:pga_u[pga_no]=0;y=1.00;break;
		case	1:pga_u[pga_no]=1;break;	
		case	2:pga_u[pga_no]=2;break;
		case	3:pga_u[pga_no]=3;break;  
	}
	for(i=1;i<=x;i++)
	{
		y=y*2.0;
	}
	pga_xs[pga_no]=y;
}

/*-------------gain	ctr-------------*/	
void gain_ctr(void)	
{    
	int i;                     
	int pga1_ok,pga2_ok;
	pga1_ok=0;
	pga2_ok=0;
	pga_set(0,0);
	pga_set(1,0); 
	pga=pga_u[0]+(pga_u[1]<<5);
do 
{
	sample(1);
	for(i=0;i<N;i++)
	{
		if((fabs(pr[i])>2.4)||pga_u[0]==3){ pga1_ok=1;break;}
	}
	if(pga1_ok==0)pga_u[0]++;

	pga2_ok=0;
	for(i=0;i<N;i++)
	{
		if((fabs(pi[i])>2.4)||pga_u[1]==3){pga2_ok=1; break;}
	}   
	if(pga2_ok==0)pga_u[1]++; 
	pga_set(0,pga_u[0]);
	pga_set(1,pga_u[1]);
	pga=pga_u[0]+(pga_u[1]<<5);  
}while(!((pga1_ok==1)&&(pga2_ok==1)));
}    
   
/*---------admit measure ctr-------------*/
/*void admit_ctr(void)
{        
	int i;
	jdq_ctr(2,0x8+0x00);
	R_caiyang=2200.0;
	set_DA(0x310);
	for(i=0;i<0xffff;i++);
	ua_xs=5.00;
	sample(5);
	uk=av(pr)/ua_xs;
	if(uk>=0.1*0x310/256.0/2.0) return;

	jdq_ctr(2,0x8+0x10);
	R_caiyang=220.0;
	for(i=0;i<0xffff;i++);
	sample(5);
	uk=av(pr)/ua_xs;
	if(uk>=0.1*0x310/256.0/2.0) return;
	
	jdq_ctr(2,0x8+0x4);
	R_caiyang=22.0;
	for(i=0;i<0xffff;i++);
	sample(5);
	uk=av(pr)/ua_xs;
	if(uk>=0.1*0x310/256.0/2.0) return;
}*/
void admit_ctr(float ss)
{   
	unsigned int i,j; 
/*	jdq_ctr(2,0x8+0x84+0x1);*/
	jdq_ctr(2,0x8+0x40+0x1+0x20);
	jdq_ctr(1,0x01);
	ua_xs=0.30;
	ub_xs=6.0;					
	for(i=0;i<0x3eff;i=i+0x50)
	{
		ad7538=i;
		for(j=0;j<0xffff;j++);
		sample(5); 	
		uk=av(pr)/ua_xs;
		ik=av(pi)/ub_xs;
		if(uk>ss) break;
		if(ik>0.4){mea_again=0;break;}		
	}	                              
if(mea_again==1)
{	
	admit_ctr_pga=0x8+0x40;
	R_caiyang=Rcaiyang1; 
	admit_pga();
	for(i=0;i<0xffff;i++)
	for(j=0;j<0x10;j++);		
	sample(5);
	uk=av(pr)/ua_xs;
	ik=av(pi)/ub_xs;
	if(ik>0.2) return; 

	admit_ctr_pga=0x8+0x4;
	R_caiyang=20.0;
	admit_pga();
	for(i=0;i<0xffff;i++);
	sample(5);
	uk=av(pr)/ua_xs;
	ik=av(pi)/ub_xs;
	if(ik>0.2) return;
	
	admit_ctr_pga=0x8+0x10;
	R_caiyang=200.0; 
	admit_pga();
	for(i=0;i<0xffff;i++);
	sample(5);
	uk=av(pr)/ua_xs;
	ik=av(pi)/ub_xs;
	if(ik>0.2) return;     

	admit_ctr_pga=0x8+0x1;
	R_caiyang=2000.0;     
	admit_pga();
	for(i=0;i<0xffff;i++);
	sample(5);
	uk=av(pr)/ua_xs;
	ik=av(pi)/ub_xs;
	return;
}
}

float admit_ctr2(float x)
{             
	int i,j,k;         
		jdq_ctr(1,0x01);
		jdq_ctr(2,admit_ctr_pga+0x1);
		ua_xs=0.30;
		
	for(i=0x100;i<0x2fff;i=i+0x50)
	{
		ad7538=i;
		for(j=0;j<0xffff;j++)
		for(k=0;k<0x2;k++);		
		sample(5); 
		uk=av(pr)/ua_xs;
		ik=av(pi);
		if(uk>x) break;
	}
	sample(5);
	kkfft();
	if(uk>x)
	{
		for(k=i-0x10;k>0x10;k=k-0x10)
		{                    
			ad7538=k;
			for(j=0;j<0xffff;j++);
			sample(5);
			kkfft();
			if(uk<x) return;
		}
	}                        
	else
	{
		for(k=i+0x10;k<0x3eff;k=k+0x10)
		{                    
			ad7538=k;
			for(j=0;j<0xffff;j++);
			sample(5);
			kkfft();
			if(uk>x) return;
		}
	}      		
}		

void admit_pga(void)
{       
	unsigned int i,j;            
	unsigned int jdq_bak;
	jdq_bak=admit_ctr_pga+0x1;
	jdq_ctr(1,0x1);
	jdq_ctr(2,jdq_bak);
	ua_xs=0.30;
	ub_xs=1.0;	
	for(i=0;i<0xffff;i++);
	sample(5);
	uk=av(pr);  
	ik=av(pi);     
	if(uk<0.3) 
	{
		jdq_bak=admit_ctr_pga+0x0;
		ua_xs=3.0;
	}
	if(ik<0.5)
	{
		jdq_bak=jdq_bak+0x20;
		ub_xs=6.00;
	} 
	jdq_ctr(2,jdq_bak);
	if((jdq_bak==admit_ctr_pga+0x1)||(jdq_bak==admit_ctr_pga+0x1+0x20))return;   
	for(i=0;i<0xffff;i++);
	sample(5);  
	uk=av(pr);
	ik=av(pi);
	if(uk<0.3)
	{
		jdq_ctr(1,0x80+0x1);
		ua_xs=30.0;
	} 
}			

/*----------bfb	admit	measure----------*/
void admitbfb(void)
{
	unsigned int i,j,k; 
	float bdz,bdz1;
	float tp;
	float ad_temp;  
	reg_tcr=0x0c20;
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);	
	ad_temp=sqrt((Zb*XS_cos+Rs)*(Zb*XS_cos+Rs)+(Zb*XS_sin)*(Zb*XS_sin));
	if(CT_bfb>=120.0)CT_bfb=120.0;
	if(CT_bfb<=5.0)	CT_bfb=5.0;
if(CT2_mode==0)
{	
	bdz=ad_temp*CT_bfb/100.0*5.0;
	bdz1=bdz;	
	if(bdz1<=ad_temp*1.20*5)bdz1=ad_temp*1.20*5;
	if(bdz1>7.8) bdz1=7.8;
	admit_ctr(bdz1);
	if(bdz>7.8) bdz=7.8/1.2*CT_bfb/100.0;
}
else if(CT2_mode==1)
{	
	bdz=ad_temp*CT_bfb/100.0;
	bdz1=bdz;	
	if(bdz1<=ad_temp*1.20)bdz1=ad_temp*1.20;
	if(bdz1>7.8) bdz1=7.8;
	admit_ctr(bdz1);
	if(bdz>7.8) bdz=7.8/1.2*CT_bfb/100.0;
}
if(mea_again==1)
{
	tp=admit_ctr2(bdz); 
	admit_pga();
	for(i=0;i<0xffff;i++)
	for(j=0;j<0x20;j++);
	sample(5);
	kkfft();
	Y[7]=ik/R_caiyang/uk*1000000.00;
	G[7]=fabs(Y[7]*cos(angle1*pii/180.00));
	B[7]=fabs(Y[7]*sin(angle1*pii/180.00)); 
	Y_ang[7]=360.0-angle1;
}
}
		 
/*-----------admitance measure----------*/
void admit(void)
{ 
	unsigned int i,j,k; 
	float bdz;
	float tp;
	float ad_temp,jack_temp;  
	reg_tcr=0x0c20;
	out_fre=50.0;
	reg_prd=(int)(15625.0/out_fre-1.0);  
	sample_prd=1;
	sample_ctr(256);	
	ad_temp=sqrt((Zb*XS_cos+Rs)*(Zb*XS_cos+Rs)+(Zb*XS_sin)*(Zb*XS_sin));
if(CT2_mode==0)
{
	jack_temp=1.20*5*ad_temp;
	if(jack_temp>7.8) jack_temp=7.8;

	admit_ctr(jack_temp); 
if(mea_again==1)
{	
	for(k=0;k<4;k++)
	{
	switch(k)
	{
		case 0:
			bdz=0.05*5*ad_temp;
			if(bdz>7.8)bdz=7.8/1.2*0.05;
			break;
		case 1:
			bdz=0.20*5*ad_temp;
			if(bdz>7.8)bdz=7.8/1.2*0.2;
			break;
		case 2:
			bdz=1.00*5*ad_temp;
			if(bdz>7.8)bdz=7.8/1.2;
			break;
		case 3:
			bdz=1.20*5*ad_temp;
			if(bdz>7.8)bdz=7.8;
			break;
	}
	tp=admit_ctr2(bdz); 
	admit_pga();
	for(i=0;i<0xffff;i++)
	for(j=0;j<0x10;j++);
	sample(5);
	uk=av(pr)/ua_xs;
	ik=av(pi)/ub_xs;
	kkfft();
	z=uk/(ik/R_caiyang);
	r=z*cos(angle1*pii/180.00);
	x=z*sin(angle1*pii/180.00);
	
	Y[k]=ik/R_caiyang/uk*1000000.00;
	G[k]=fabs(Y[k]*cos(angle1*pii/180.00));
	B[k]=fabs(Y[k]*sin(angle1*pii/180.00)); 
	Y_ang[k]=360.0-angle1;
    }
}
}
else if(CT2_mode==1)
{
	jack_temp=1.20*ad_temp;
	if(jack_temp>7.8) jack_temp=7.8;

	admit_ctr(jack_temp);
if(mea_again==1)
{
	for(k=0;k<4;k++)
	{
	switch(k)
	{
		case 0:
			bdz=0.05*ad_temp;
			if(bdz>7.8)bdz=7.8/1.2*0.05;
			break;
		case 1:
			bdz=0.20*ad_temp;
			if(bdz>7.8)bdz=7.8/1.2*0.2;
			break;
		case 2:
			bdz=1.00*ad_temp;
			if(bdz>7.8)bdz=7.8/1.2;
			break;
		case 3:
			bdz=1.20*ad_temp;
			if(bdz>7.8)bdz=7.8;
			break;
	}
	tp=admit_ctr2(bdz); 
	admit_pga();
	for(i=0;i<0xffff;i++)
	for(j=0;j<0x10;j++);
	sample(5);
	uk=av(pr)/ua_xs;
	ik=av(pi)/ub_xs;
	kkfft();
	z=uk/(ik/R_caiyang);
	r=z*cos(angle1*pii/180.00);
	x=z*sin(angle1*pii/180.00);
	
	Y[k]=ik/R_caiyang/uk*1000000.00;
	G[k]=fabs(Y[k]*cos(angle1*pii/180.00));
	B[k]=fabs(Y[k]*sin(angle1*pii/180.00)); 
	Y_ang[k]=360.0-angle1;
    }
}
}
}  

/*---------------bfb	error------------*/
void	errorbfb(void)
{
	CT_ferr=-(G[7]*(Rs+Zb*XS_cos)+B[7]*Zb*XS_sin)/10000.00+100.00*(SR/bb-1.00);	
	CT_perr=(B[7]*(Rs+Zb*XS_cos)-G[7]*Zb*XS_sin)/1000000.00*3438.0;
}

/*---------------f and pha error------------*/
void error(void)
{                  
	int i;
	for(i=0;i<4;i++)
	{
		ferr[i]=-(G[i]*(Rs+Zb*XS_cos)+B[i]*Zb*XS_sin)/10000.00+100.00*(SR/bb-1.00);	
		perr[i]=(B[i]*(Rs+Zb*XS_cos)-G[i]*Zb*XS_sin)/1000000.00*3438.0; 
	}
}
	              
/*--------------A/D sample--------------*/
void	sample(int ch_no)	/*1-cha,5-chb*/
{   
	int i;
	max125=ch_no;         					    	
	for(i=0;i<0x3fff;i++);	
		while(((reg_iosr)&0x1)==0x0){;} 
		while(((reg_iosr)&0x1)==0x1){;}   	
	for(i=0;i<N+5;i++)
	{
	while(((reg_iosr)&0x2)==0x2){;}   
	sa[i]=max125;   
	sb[i]=max125;
	};  

	for(i=0;i<N+5;i++)
	{
		sa[i]=(sa[i]&(0x3fff))<<2;
		sb[i]=(sb[i]&(0x3fff))<<2;
	}  
	for(i=0;i<N;i++)
	{
		pr[i]=sa[i+2]*5.0/32768.0;
		pi[i]=sb[i+2]*5.0/32768,0;
	}         	
}

/*-----------avg---------------*/
float avg(float *ap)
{ 
	float sum;
	int i;
	sum=0.0;
	for(i=0;i<N;i++)
	{
		sum=sum+(*ap);
		ap++;
	}
	return(sum/N);		
}  

float	avg_U(float	*ap)
{
	float	sum;
	int i;
	sum=0.0;
	for(i=0;i<N;i++)
	{
		sum=sum+fabs(*ap);
		ap++;
	}
	return(sum/(float)N);
}

float	max_I(float	*ap)
{
	float max;
	float	min;
	int i;
	max=*ap;
	min=*ap;
	for(i=0;i<N-1;i++)
	{
		ap++;
		if(*ap>max)	max=*ap;
		if(*ap<min)	min=*ap;
	}
	return((fabs(max)+fabs(min))/2.0);
}

float	pow_p(float	*ar,float	*ai)
{
	float	sum=0.0;
	int i;
	for(i=0;i<N-1;i++)
	{
		sum+=(*ar)*(*ai);
		ar++;ai++;
	}
	return(sum/N);
}

float av(float *ff)
{
	float ss;
	int i;
	ss=0;
	for(i=0;i<N;i++)
	{
		ss+=(*ff)*(*ff);
		ff++;
	}
	return(sqrt(ss/N));
}

/*-----------fft------------------*/  
void kkfft(void)
  {
	int k,lp,il,f;
	int it,m,is,i,j,nv,l0;
	float p,q,s,vr,vi,poddr,poddi;
	f=N;
	for(k=1;(f=f/2)!=1;k++){;}
	for (it=0; it<=N-1; it++)
	  { m=it; is=0;
		for (i=0; i<=k-1; i++)
		  { j=m/2; is=2*is+(m-2*j); m=j;}
		fr[it]=pr[is]; fi[it]=pi[is];
	  }
	pr[0]=1.0; pi[0]=0.0;
	p=2.0*pii/(1.0*N);
	pr[1]=cos(p); pi[1]=-sin(p);
/*	pr[1]=0.999699;pi[1]=-0.024512;*/
	for (i=2; i<=N-1; i++)
	  { p=pr[i-1]*pr[1]; q=pi[i-1]*pi[1];
		s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
		pr[i]=p-q; pi[i]=s-p-q;
	  }
	for (it=0; it<=N-2; it=it+2)
	  { vr=fr[it]; vi=fi[it];
		fr[it]=vr+fr[it+1]; fi[it]=vi+fi[it+1];
		fr[it+1]=vr-fr[it+1]; fi[it+1]=vi-fi[it+1];
	  }
	m=N/2; nv=2;
	for (l0=k-2; l0>=0; l0--)
	  { m=m/2; nv=2*nv;
		for (it=0; it<=(m-1)*nv; it=it+nv)
		  for (j=0; j<=(nv/2)-1; j++)
			{ p=pr[m*j]*fr[it+j+nv/2];
			  q=pi[m*j]*fi[it+j+nv/2];
			  s=pr[m*j]+pi[m*j];
			  s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
			  poddr=p-q; poddi=s-p-q;
			  fr[it+j+nv/2]=fr[it+j]-poddr;
			  fi[it+j+nv/2]=fi[it+j]-poddi;
			  fr[it+j]=fr[it+j]+poddr;
			  fi[it+j]=fi[it+j]+poddi;
			}
	  } 
 	i=sample_prd; 
 	ukr=(fr[i]+fr[N-i])/2.000;
 	uki=(fi[i]-fi[N-i])/2.000;
 	ikr=(fi[i]+fi[N-i])/2.000;
 	iki=(fr[N-i]-fr[i])/2.000;
	uk=sqrt(ukr*ukr+uki*uki)/(float)N*1.41421356237;
 	ik=sqrt(ikr*ikr+iki*iki)/(float)N*1.41421356237; 
 	uk=uk/ua_xs;
 	ik=ik/ub_xs;
 	
	angle1=180.00/pii*atan(fabs(ukr/uki));
	if((ukr>0.00)&&(uki>0.00))angle1=180.00-angle1;
	else
		if((ukr<0.00)&&(uki>0.00))angle1=180.00+angle1;
		else 
			if((ukr<0.00)&&(uki<0.00))angle1=360.00-angle1;  
	angle2=180.00/pii*atan(fabs(ikr/iki));
	if((ikr>0.00)&&(iki>0.00))angle2=180.00-angle2;
	else
		if((ikr<0.00)&&(iki>0.00))angle2=180.00+angle2;
		else 
			if((ikr<0.00)&&(iki<0.00))angle2=360.00-angle2;  
	angle1=angle1-angle2;
	if(angle1<0.0)	angle1=angle1+360.00;	  
    return; 
	 }
	 
	 
	 
/*---------------------------------------*/
void	putout(void) 
{   
	    CT_dj=CT_grade;
		CTI1=CT1;
	    CTI2=CT2_mode;
        COS_ms=COS_mode;
        SDVA=SVA;
        CT_bi=CT_bfb;
        
    	CT_test[2]=SDVA;
		CT_test[3]=COS_ms;
		CT_test[4]=CT_bi; 
}
	
	
	

⌨️ 快捷键说明

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