|
发表于 2020-11-12 12:27:18
|
显示全部楼层
本帖最后由 435788A 于 2020-11-12 12:55 编辑
在程序里看到 #define SINE_OFFSET (2047) ,在603版本里是 #define SINE_OFFSET 900 ,这个应该就是中点电压,再看adc中断里面有
while(i++ < N/2 )
{
int dat = ( (*buf++) - SINE_OFFSET);
re += ((int)(*cos++)*dat);
im -= ((int)(*sin++)*dat);
}
这样,12位的ADC变成了32位有符号数
再到void measure(cplx * Z , int rounds)函数
在603版本:
while(rounds-- >0 )
{
runRound();
mAcc[0].Re += mData[0].Re;
mAcc[0].Im += mData[0].Im;
mAcc[1].Re += mData[1].Re;
mAcc[1].Im += mData[1].Im;
mAcc[2].Re += mData[2].Re;
mAcc[2].Im += mData[2].Im;
}
Z->Re = (mAcc[2].Re - mAcc[0].Re); // V
Z->Im = (mAcc[2].Im - mAcc[0].Im);
cplxMul(Z,&R);
I.Re = (mAcc[0].Re - mAcc[1].Re); // I
I.Im = (mAcc[0].Im - mAcc[1].Im);
cplxDiv(Z,&I);
在620B12版本:
while(r-- >0 )
{
runRound();
mAcc[0].Re += mData[0].Re;
mAcc[0].Im += mData[0].Im;
mAcc[1].Re += mData[1].Re;
mAcc[1].Im += mData[1].Im;
mAcc[2].Re += mData[2].Re;
mAcc[2].Im += mData[2].Im;
runRound();
mAcc[0].Re -= mData[0].Re;
mAcc[0].Im -= mData[0].Im;
mAcc[1].Re -= mData[1].Re;
mAcc[1].Im -= mData[1].Im;
mAcc[2].Re -= mData[2].Re;
mAcc[2].Im -= mData[2].Im;
}
ch[0].Re = mAcc[0].Re;
ch[0].Im = mAcc[0].Im;
ch[1].Re = mAcc[1].Re;
ch[1].Im = mAcc[1].Im;
ch[2].Re = mAcc[2].Re;
ch[2].Im = mAcc[2].Im;
cplxMul(&ch[0],&corr.shift0);
cplxMul(&ch[1],&corr.shift0);
cplxMul(&ch[2],&corr.shift0);
mAcc[0].Re -= ch[1].Re + ch[2].Re;
mAcc[0].Im -= ch[1].Im + ch[2].Im;
mAcc[1].Re -= ch[0].Re + ch[2].Re;
mAcc[1].Im -= ch[0].Im + ch[2].Im;
mAcc[2].Re -= ch[0].Re + ch[1].Re;
mAcc[2].Im -= ch[0].Im + ch[1].Im;
mdata.polar[0].Re= 0.5*vcc*1.4901161e-12*square(mAcc[0].Re*mAcc[0].Re + mAcc[0].Im*mAcc[0].Im);// 1/512/65536/20000
mdata.polar[1].Re= 0.5*vcc*1.4901161e-12*square(mAcc[1].Re*mAcc[1].Re + mAcc[1].Im*mAcc[1].Im);
mdata.polar[2].Re= 0.5*vcc*1.4901161e-12*square(mAcc[2].Re*mAcc[2].Re + mAcc[2].Im*mAcc[2].Im);
mdata.polar[0].Im= 180.0*atan2f(mAcc[0].Im,mAcc[0].Re)/M_PI;
mdata.polar[1].Im= 180.0*atan2f(mAcc[1].Im,mAcc[1].Re)/M_PI;
mdata.polar[2].Im= 180.0*atan2f(mAcc[2].Im,mAcc[2].Re)/M_PI;
cplxMul(&mAcc[0], &(corr.Corr0) );
cplxMul(&mAcc[2], &(corr.Corr2) );
Z->Re = (mAcc[2].Re - mAcc[0].Re); // V
Z->Im = (mAcc[2].Im - mAcc[0].Im);
cplxMul(Z,&R);
I.Re = (mAcc[0].Re - mAcc[1].Re); // I
I.Im = (mAcc[0].Im - mAcc[1].Im);
cplxDiv(Z,&I);
mAcc[0]就是PA1
mAcc[1]就是PA2
mAcc[2]就是PA7
这个计算过程没有R7x,620B12版本电路是对称的四线,程序里只有三线测量
昨天没传上的图片现在补传
如果用620B12_71图纸的二阶滤波把97KHZ滤成正弦,反而使测量不准 |
评分
-
1
查看全部评分
-
|