在线时间990 小时
UID3359265
注册时间2017-3-4
NXP金币2436
TA的每日心情 | 奋斗 3 天前 |
---|
签到天数: 2479 天 连续签到: 10 天 [LV.Master]伴坛终老
金牌会员
 
- 积分
- 11196
- 最后登录
- 2025-7-20
|
打开很久不上的QQ,猛然间看到七姐的催促,发现今天截止。。。赶紧总结一下交作业吧。。。
我从拿到开发板后,有空就学学看看。由于之前学的和工作做的都是强电方面的(虽说本科学过C51),每做一步都是摸索前进,不停的找资料看帖子照着例程练习。
三相电量采集:
一般配电板中交流电压互感器输出0-100V,电流互感器0-5A(或1A),首先需要采集模块转化互感器传来的电量,
参考设计了电压、电流采样电路,如图所示。
我看了大家发的很多ADC的程序,这里就不放上来了,
模拟量转化成数字量后,将采样值计入数组中,使用加窗插值法计算周期频率,通过傅里叶算法进行分析
Int16 UB_ABtemp[162]=0;
Int16 UABtemp[162]=0;
double amplitude_UAB=0;
double fre_UAB=0;
double alpha_UAB=0;
void windft(Int16 * UB_ABtemp, double * amplitude_UAB, double * fre_UAB, double * alpha_UAB)
{
Int32 XwwR[5]={0,0,0,0,0};
Int32 XwwI[5]={0,0,0,0,0};
Int32 XwwRans[5]={0,0,0,0,0};
Int32 XwwIans[5]={0,0,0,0,0};
double WXwwR[3]={0,0,0};
double WXwwI[3]={0,0,0};
double absWXww[3]={0,0,0};
double tempkk1=0;
double tempkk2=0;
double alpha=0;
double alphapow=0;
UInt16 ja=0;;
UInt16 kk1=0;;
for(ja=0;ja<5;ja++){ XwwR[ja]=0; XwwI[ja]=0; XwwRans[ja]=0; XwwIans[ja]=0;}
for(ja=0;ja<3;ja++){ WXwwR[ja]=0; WXwwI[ja]=0; absWXww[ja]=0;}
alpha=0; alphapow=0;
for(ja=0;ja<80;ja++)
{
XwwR[0]=XwwR[0]+(Int32)UABtemp[ja]*expcos1[ja];
XwwR[2]=XwwR[2]+(Int32)UABtemp[ja]*expcos3[ja];
XwwR[1]=XwwR[1]+(Int32)UABtemp[ja]*expcos2[ja];
XwwR[3]=XwwR[3]+(Int32)UABtemp[ja]*expcos4[ja];
XwwR[4]=XwwR[4]+(Int32)UABtemp[ja]*expcos5[ja];
XwwI[0]=XwwI[0]+(Int32)UABtemp[ja]*expsin1[ja];
XwwI[1]=XwwI[1]+(Int32)UABtemp[ja]*expsin2[ja];
XwwI[2]=XwwI[2]+(Int32)UABtemp[ja]*expsin3[ja];
XwwI[3]=XwwI[3]+(Int32)UABtemp[ja]*expsin4[ja];
XwwI[4]=XwwI[4]+(Int32)UABtemp[ja]*expsin5[ja];
}
for(ja=0;ja<5;ja++) { XwwRans[ja]= XwwR[ja]; XwwIans[ja]= XwwI[ja]; }
for(ja=0;ja<3;ja++)
{
WXwwR[ja]=((double)(XwwRans[ja+1]-XwwRans[ja]-XwwRans[ja+2]+XwwRans[ja+1]))/4/1000;
WXwwI[ja]=((double)(XwwIans[ja+1]-XwwIans[ja]-XwwIans[ja+2]+XwwIans[ja+1]))/4/1000;
}
for(ja=0;ja<3;ja++)
{
absWXww[ja]= sqrt(WXwwR[ja]*WXwwR[ja]+WXwwI[ja]*WXwwI[ja]);
}
if(absWXww[0]>absWXww[2]) { tempkk1=absWXww[0]; tempkk2=absWXww[1]; kk1=0;}
else { tempkk1=absWXww[1]; tempkk2=absWXww[2]; kk1=1; }
alpha=3*(tempkk2-tempkk1)/(tempkk2+tempkk1)/2;
alphapow=alpha*alpha;
amplitude_UAB= (tempkk2+tempkk1)*(2.35619403+(1.15543682+(0.32607873+0.07891461*alphapow)*alphapow)*alphapow)/80*2/20/sqrt(2)*3750/4096/10*38;
fre_UAB=(kk1+3+(alpha+0.5))*50/4;
alpha_UAB=(atan(WXwwI[kk1]/WXwwR[kk1])*180/3.1415926-180*alpha);
if((WXwwR[kk1]<0)&&(WXwwI[kk1]>0)) alpha_UAB=alpha_UAB+180;
if((WXwwR[kk1]<0)&&(WXwwI[kk1]<0)) alpha_UAB=alpha_UAB-180;
while((alpha_UAB<0)||(alpha_UAB>360)) {
if((alpha_UAB<0)) alpha_UAB+=360;
if((alpha_UAB>360)) alpha_UAB-=360;
}
}
三相电量的采集与分析对控制与监测来说非常重要,变频器使用越多,电量分析难度越大。后续将继续完善相关功能。
|
-
采样电路
|