📄 hgq.c
字号:
/*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 + -