有同学问我如何计算交流信号的有效值?

这是非常基础的问题。之前的文章傅里叶变换就提到了可以使用傅里叶变换计算有效值,这里再简单地说一说使用方均根法计算有效值。

均方根值 有效值 方均根法快速计算有效值(1)

图一方均根计算公式

均方根值 有效值 方均根法快速计算有效值(2)

图二三相交流信号

三相交流信号通过信号调理和采样电路之后,调整到AD的采样范围之内,确保信号不会饱和,也不会因为信号太小导致采样数值小影响计算。

信号通过AD采样之后得到采样值,可以选择缓存起来,等到采集满一个信号周期之后通过按照方均根公式计算即可。也可以在得到采样之后之后直接将采样值平方,再累加起来,这样在采样周期到了之后,计算出均值并且开方就得到了结果。

下面上伪代码,假设采样中断为 void isr_AD(void)

WORD square[3]{0,0,0};

WORD Vrms[3]{0,0,0};

WORD factor[3]={100,101,99};//根据实际校正结果初始化校正系数,这里举例随便初始化的值

BYTE sample_cnt=0;

void isr_AD(void)

{

WORD sample_temp=0;

WORD adc_buffer[3]={0,0,0}; // 三相电压采样

adc_buffer[0] = AD_RG0;

adc_buffer[1] = AD_RG1;

adc_buffer[2] = AD_RG2;

sample_cnt ;

for (BYTE i = 0; i < 3; i )

{

sample_temp = adc_buffer[i];

square[i] = sample_temp*sample_temp;

}

}

void get_rms(void)

{

INT32U corr_factor;

WORD res;

for (BYTE i = 0; i < 3; i )

{

res = square[i]/sample_cnt;

Vrms[i] = sqrt(res)*factor[i];

square[i]=0;

}

sample_cnt=0;

}

这样每个采样周期就能计算更新一次有效值了。这里有一个问题,假如使用这种方式计算有效值做故障检测的话,为了快速地检测出故障,除了使用滑窗每个采样点得到之后立即计算一次有效值之外,还有没有其他的方法,能达到快速计算出有效值的目的,毕竟等到一个采样周期结束之后一般至少一个周波或者至少半个周波也就是10-20ms过去了。

,