无源滤波器通用程序设计
一、设计任务:
按照一般设计无源滤波器原理,编写一个滤波器设计的通用程序。
二、程序描述:
给定电网的基本参数、谐波电源各次谐波电流的大小、谐次、电压含有率、
等设计所需参数,能够输出所需要的滤波器各元件的参数,为工程进一步选择合适的滤波器元件提供指导。
三、设计算例:
电网运行线电压35kV,相电压U1==20kV,电网运行最高相电压U1M= 21.2kV ,相电压基波角频率W1=2*Pi*50=314.16 ,奇次谐波电压含有率Hurh=2..4%,I3h=60A, I5h= 50A,I7h=40A, I9h= 30A,I11 h=20A, I13h= 40A,I15h=10A, I17h=10A ,I19h=8A,截止频率h0=8,主要滤波频率hm=13, 单调滤波器品质因数q都取为40,供电点总的无功补偿需求Q=0.5Mvar。
在程序输入电流的时候单位是千安。
四、程序内容:
#include<stdio.h>
#include<math.h>
#include<string.h>
voidmain() /*滤波器设计主程序*/
{ doubledanlvbo(float U1 ,float U1m ,floatW1 ,int k);
/*单调滤波器设计程序函数声明*/
void gtlvbo(float U1 ,float U1m ,float W1,float Q,float sum);/*高通滤波器设计程序函数声明*/
floatU1,U1m,Q,W1;
floatQ1h,sum=0;
int flag=1;
int k=0;
printf(“请输入电网原始参数:\n\n母线电压U1,母线运行最高电压U1m,电网基准角频率W1,设计点总的基波无功补偿需求Q\n”); /*输入电网原始参数*/
scanf_s(“%f%f%f%f”,&U1,&U1m,&W1,&Q);
while(flag==1)
{ Q1h=danlvbo(U1,U1m,W1,k);
sum=Q1h sum; /*求取单调滤波器补偿的总的无功*/
k=k 1;
printf(“\n已设完第%d次谐波器\n是否要继续1=YES,0=NO(1/0)?\n”,k);
scanf_s(“%d”,&flag);
}
gtlvbo(U1,U1m,W1,Q,sum);
}
float danlvbo(floatU1,float U1m,floatW1,int k)/*单调滤波器设计子程序*/
{ float Ih,Hurh,q;
floatUc1,Uch,QL,QR,Ucn,Ucns,Q1h,Qcn,Qcn1,Qcn2,Qcn3;
float max,C,R;
double L;
int h;
printf(“请输入第%d单调谐波设计参数:\n谐波电流大小Ih谐波次数h,电压含有率指标Hurh,滤波器品质因素q\n”,k 1);
scanf_s(“%f%d%f%f”,&Ih,&h,&Hurh,&q);
Uc1=h*h*U1m/(h*h-1);/*求取电容器额定电压Ucn*/
Uch=Hurh*U1*q;
Ucn=(Uc1 Uch)/1.1;
printf(“Ucn=%f,请根据实际电容器规格及串并联情况选择Ucn\n”,Ucn);
printf(“请输入选择的电容的额定电压Ucns\n”);
scanf_s(“%f”,&Ucns);
Qcn1=3*Ucns*Ucns*Ih/(Hurh*q*h*U1);/*按电压要求求取电容器额定容量Qcn*/
Qcn2=3*Ih*Ucns*Ucns/sqrt(h*(Ucns*Ucns-Uc1*Uc1));/*按容量平衡要求求取电容器额定容量Qcn*/
Qcn3=3*Ih*Ucns*Ucns/sqrt(1.69*Ucns*Ucns-Uc1*Uc1);/*按不过流要求求取电容器额定容量Qcn*/
max=Qcn1;
if(max<Qcn2)
max=Qcn2;/*find the max vualue of Qcn*/
if(max<Qcn3)
max=Qcn3;
Qcn=max;/*选取三者之间的最大值作为额定容量*/
C=Qcn*1000/(3*W1*Ucns*Ucns);/*以下求取所要参数 C R L 提供基波无功 Q,元件容量*/
L=Qcn*1000/(3*W1*h*h*Ucns*Ucns);
QL=W1*C*U1*W1*C*U1/(1000*(W1*C Ih*Ih*h*W1*L)); /*求取电抗器的容量,电压工频下主要降落在电容上*/
R=1000/(h*W1*C*q);
QR=(W1*C*U1)*(W1*C*U1)/1000000*R Ih*Ih*h*R;/*求取单调等值电阻容量*/
Q1h=3*h*h*U1*W1*C/(1000*(h*h-1)); /*求取其提供的基波无功*/
printf(“本次单调滤波器参数的设计参数如下;\n”); /*输出当次单调谐波设计结果*/
printf(“谐波次数h=%d次,电阻R=%f欧,电感L=%emH,电容C=%emF\n\n电容额定电压Ucn=%fkV,电容额定容量Qcn=%fMvar,电感容量QL=%fMvar”,h,R,L,C,Ucns,Qcn,QL);
return(Q1h);
}
voidgtlvbo(float U1 ,float U1m,float W1,float Q,float sum )
/*高通滤波器设计程序*/
{ floatUcn,Ucns,Ih,Hurh,Hurh1,Q1h,Qcn,Qr,Ql;
float a[15],g[15],H[15];
floatmax,Xc1,j,f,f1,x,x0,x1,x2,Xl1,R,L,C,Ir,Il,h0,hm,s,z;
inti,h,n,t,m=0,k=0,flag=1;
Q1h=Q-sum; /*以下为求取Q1h*/
printf(“需要高通滤波器提供的无功Q1h=%f\n”,Q1h);
printf(“请输入高通滤波器要滤掉的不同谐次电流的最小电压含有率\n”);
scanf_s(“%f”,&Hurh);
while(flag==1)
{printf(“输入高通谐波电流谐次h及其电流大小Ih\n”);
scanf_s(“%d%f”,&h,&Ih);
Hurh1=3*Ih*U1/(h*Q1h);
a[k]=Hurh1;/*数组a来存储电压含有率*/
g[k]=Ih; /*数组a来存储电压含有率*/
H[k]=h;
k=k 1;
printf(“谐波电流还有谐次h与Ih需要输入?请输入(1/0)\n”);
scanf_s(“%d”,&flag);
}
max=a[0];
for(i=0;i<k;i )
if(max<a[i])max=a[i];
if(Hurh>max)
{ Hurh=max;
Q1h=3*Ih*U1/(h*Hurh);
printf(“已将Q1h增大以满足设计要求\n”);
}
else
printf(“第一次计算所得的Q1h合理,满足设计要求\n”); /*得到合理的Q1h值*/
Xc1=3*U1*U1/Q1h; /*求取Xc1*/
for (n=0;n<k;n )
sum=sum g[n]*Xc1/H[n];
Ucn=(U1m sum)/1.1;
printf(“计算Ucn的结果是%f,请根据实际电容器规格及串并联情况就近选择电容的额定电压\n”,Ucn);
printf(“请输入选择的电容的额定电压Ucns\n”);
scanf_s(“%f”,&Ucns);
Qcn=Q1h*Ucns*Ucns/(U1*U1); /*得到Qcn与Ucn*/
printf(“请输入截止频率与主要滤波频率的谐次h0,hm\n”); /*以下为利用牛顿迭代法求取x即m的值*/
scanf_s(“%f%f”,&h0,&hm);
j=hm/h0;
printf(“j=%f\n”,j);
x1=1.0;
do
{x0=x1;
f=j*j*x0*(1 2*x0-x0*x0)-x0-sqrt(1 2*x0);
f1=j*j*(1 4*x0-3*x0*x0)-1-1/sqrt(1 2*x0);
x1=x0-f/f1;}while(fabs(x1-x0)>=1e-8);
printf(“m1=%f\n”,x1);
x2=1.5;
do
{x0=x2;
f=j*j*x0*(1 2*x0-x0*x0)-x0-sqrt(1 2*x0);
f1=j*j*(1 4*x0-3*x0*x0)-1-1/sqrt(1 2*x0);
x2=x0-f/f1;}while(fabs(x2-x0)>=1e-8);
printf(“m2=%f\n”,x2);
printf(“请根据实际情况选择m的值,请输入(1/2)选择,1=m1;2= m2。\n”);
scanf(“%d”,&flag);
if(flag==1)
x=x1;
else
x=x2;
printf(“m=%f”,x);
Xl1=x*Xc1/(h0*h0);
R=Xc1/h0;/*求取高通电阻R*/
C=1000/(W1*Xc1); /*求取高通电容C*/
L=Xl1/W1; /*求取高通电感L*/
s=1000*W1*L*U1/(Xc1*(W1*L R)); /*设基波电流分流大小为初值*/
s=s*s;
z=1000*R*U1/(Xc1*(W1*L R));
/*公式做这样处理,是为了修正非 float 的数据丢失问题*/
z=z*z;
for(t=0;t<k;t )/*以下为利用分流公式来求取电流及容量*/
{
s=s 1000000*g[t]*g[t]*H[t]*H[t]*x*x/(h0*h0 H[t]*H[t]*x*x);
z=z 1000000*g[t]*g[t]*h0*h0/(h0*h0 H[t]*H[t]*x*x);
}
Ir=sqrt(s);
Qr=Ir*Ir*R/1000000; /*求取等效电阻的功率*/
Il=sqrt(z);
Ql=Il*Il*W1*L/1000000; /*求取电感的容量*/
printf(“高通滤波器参数的设计参数如下:\n “); /*输出高通滤波器设计结果*/
printf(“\n电阻R=%f欧,电感L=%eL,电容C=%emF,\n电容额定电压Ucns=%fkV,电容额定容量Qcn=%fMvar,电感容量Ql=%fMvar,电阻容量Qr=%fMvar\n”,R,L,C,Ucns,Qcn,Ql,Qr);
}
五、算例设计结果:
滤波器类型
谐次h
等效电阻R
电感L
电容C
Ucn
Qc
电感容量Ql
电阻容量 Qr
单调
3
6.42欧
40kV
6.23Mvar
0.519Mvar
单调
5
4.42欧
38kV
4.90Mvar
0.452Mvar
单调
7
3.96欧
38kV
3.90Mvar
0.360Mvar
高通
9
523.4欧
58kV
2.4Mvar
0.062Mvar
0.437 Mvar
11
13
15
17
19