真有效值的定义及其C语言算法推导
一、什么是真有效值
对于用电设备、其用电量是最为关注的电气参数,因为它与电费直接相关。
我们测量电信号的电流、电压大小时,需要能快速从测试结果中计算得到消耗的电量。
根据焦耳定律,阻值为R的电器在一个周期T内所消耗的电压,也即一个周期的平均功率:
如果直流测量出电压的均方根值U,以及电流的均方根值I,
所谓均方根值即将瞬间数值平方之后、计算一个周期的平均,再开方,
也被称为真有效值,表示有效产生电量的数值,从而:
得到真有效值U和I,我们只需要通过简单的乘法运算得到功率:
因此,在我看来,真有效值是为了便于计算电量而定义的数值。
二、怎么测量真有效值
为什么是真有效值,而不是有效值,难道还有假的有效值?
还真是如此。
从真有效值的定义,为了计算出交流电流、电压的真有效值,
我们需要在一个周期内,等间隔采样,
计算采样得到的数值u(i)平方值,再进行累加,
累加到N个数据之后,再除以总采样次数,得到结果做开方运算,
再进行标定,公式如下:
其中,k、b是标定系数;
因为,真有效值需要对信号在一个周期内进行等间隔采样,
为了保证精度,需要在20ms周期内采样128个数值。
即每隔156.26us做一次A/D采样,再做平方和加法运算。
计算周期结束之后,还需要计算除法和开方。
在8位单片机的时代,需要非常昂贵的处理器才能做这样复杂的运算。
因而,真有效值的计算只是一些高端仪表才有的功能。
更多的是将信号做绝对值处理并滤成直流之后,计算平均值,
由平均值换算得到假的有效值。
不含高次谐波的交流市电及其取绝对值之后的波形
十四年前,在一款马达保护器上使用的精密绝对值电路,用于测平均电流
对于峰值为A的正弦信号u(t),可以表示为:
,
其真有效值为:
由二倍角公式,得到:
而取绝对值之后,得到的平均值为:
进一步计算,得到:
所以,对于标准正弦信号,真有效值和平均值满足以下关系:
计算得到电流、电压的平均值之后,再乘以1.11即可以得到有效值。
1.11又被称为波形系数。
对于真有效值为220V的交流市电,其峰值为311V,平均值为198V;
当含有高次谐波成份成,通过平均值换算出有效值不再准确。
三、C语言算法推导
当处理器在一个周期内对交流信号进行等间隔采样,比如以156.25us的时间间隔进行采样。
每一次采样得到的数据表示为Ui,一个周期内采样N个点;
因为处理器不能输入负信号,因为我们需要采用下图的电路在交流信号上叠加直流信号,
采用真有效值算法的信号处理电路
这样,采样得到的信号既有直流分量,也有交流分量,
表示为Ui=U1i U2i,其中U1i为直流分量,U2i为交流分量;
直流分量在一个周期内的平均值即为瞬间值,交流分量在一个周期内的平均值为0,表示为:
交流信号的真有效值表示为:
最终得到:
可见,对每一次采样的数据,我们只需要计算其和以及平方和即可,
代码如下:
真有效值计算算法
四、处理器资源情况
采用定时器作为A/D采样的触发源,每隔156.25us触发A/D启动采样。
采用处理器的regular group的采样功能,将三相电流和电压作为一个组,让A/D模块被触发之后,自动完成一组输入的采样。
采用DMA自动将采样得到的结果搬移到缓存。
程序在主循环中判断缓存是否有数据,有数据由调用真有效值处理函数进行处理。
调用math库的开方函数sqrt,大概耗时为几个us,忽略不计。