真实的c语言算法,真有效值的定义及其C语言算法推导

一、什么是真有效值

对于用电设备、其用电量是最为关注的电气参数,因为它与电费直接相关。

我们测量电信号的电流、电压大小时,需要能快速从测试结果中计算得到消耗的电量。

根据焦耳定律,阻值为R的电器在一个周期T内所消耗的电压,也即一个周期的平均功率:

如果直流测量出电压的均方根值U,以及电流的均方根值I,

所谓均方根值即将瞬间数值平方之后、计算一个周期的平均,再开方,

也被称为真有效值,表示有效产生电量的数值,从而:

得到真有效值U和I,我们只需要通过简单的乘法运算得到功率:

因此,在我看来,真有效值是为了便于计算电量而定义的数值。

二、怎么测量真有效值

为什么是真有效值,而不是有效值,难道还有假的有效值?

还真是如此。

从真有效值的定义,为了计算出交流电流、电压的真有效值,

我们需要在一个周期内,等间隔采样,

计算采样得到的数值u(i)平方值,再进行累加,

累加到N个数据之后,再除以总采样次数,得到结果做开方运算,

再进行标定,公式如下:

其中,k、b是标定系数;

因为,真有效值需要对信号在一个周期内进行等间隔采样,

为了保证精度,需要在20ms周期内采样128个数值。

即每隔156.26us做一次A/D采样,再做平方和加法运算。

计算周期结束之后,还需要计算除法和开方。

在8位单片机的时代,需要非常昂贵的处理器才能做这样复杂的运算。

因而,真有效值的计算只是一些高端仪表才有的功能。

更多的是将信号做绝对值处理并滤成直流之后,计算平均值,

由平均值换算得到假的有效值。

真实的c语言算法,真有效值的定义及其C语言算法推导(1)

不含高次谐波的交流市电及其取绝对值之后的波形

真实的c语言算法,真有效值的定义及其C语言算法推导(2)

十四年前,在一款马达保护器上使用的精密绝对值电路,用于测平均电流

对于峰值为A的正弦信号u(t),可以表示为:

其真有效值为:

由二倍角公式,得到:

而取绝对值之后,得到的平均值为:

进一步计算,得到:

所以,对于标准正弦信号,真有效值和平均值满足以下关系:

计算得到电流、电压的平均值之后,再乘以1.11即可以得到有效值。

1.11又被称为波形系数。

对于真有效值为220V的交流市电,其峰值为311V,平均值为198V;

当含有高次谐波成份成,通过平均值换算出有效值不再准确。

三、C语言算法推导

当处理器在一个周期内对交流信号进行等间隔采样,比如以156.25us的时间间隔进行采样。

每一次采样得到的数据表示为Ui,一个周期内采样N个点;

因为处理器不能输入负信号,因为我们需要采用下图的电路在交流信号上叠加直流信号,

真实的c语言算法,真有效值的定义及其C语言算法推导(3)

采用真有效值算法的信号处理电路

这样,采样得到的信号既有直流分量,也有交流分量,

表示为Ui=U1i U2i,其中U1i为直流分量,U2i为交流分量;

直流分量在一个周期内的平均值即为瞬间值,交流分量在一个周期内的平均值为0,表示为:

交流信号的真有效值表示为:

最终得到:

可见,对每一次采样的数据,我们只需要计算其和以及平方和即可,

代码如下:

真实的c语言算法,真有效值的定义及其C语言算法推导(4)

真有效值计算算法

四、处理器资源情况

采用定时器作为A/D采样的触发源,每隔156.25us触发A/D启动采样。

采用处理器的regular group的采样功能,将三相电流和电压作为一个组,让A/D模块被触发之后,自动完成一组输入的采样。

采用DMA自动将采样得到的结果搬移到缓存。

程序在主循环中判断缓存是否有数据,有数据由调用真有效值处理函数进行处理。

调用math库的开方函数sqrt,大概耗时为几个us,忽略不计。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页