使用单片机和电流互感器测定非正弦周期电流的有效值

前言:使用单片机加电流互感器测量交流电路的电流,是非常常见的手段。最简单的方案就是直接使用采样电阻,整流滤波,再进入MCU的ADC进行转换,再通过软件滤波得到一个代表着电流大小的数值。对于电流保护功能来说,这是行之有效的方法,只需要测量出电流在保护阈值情况下,MCU计算出数值即可。
对于采集正弦交流电流有效值,也可以使用峰值检波法,通过采集峰值电压的方法,再进行计算,也可得到。
而对于非正弦周期交流电流,想使用电流互感器采集其有效值,变得不那么简单了。

下面介绍一下我使用的一种高速采样的方法来进行有效值测定。

一、首先是理论分析


这是一个非正弦周期交流电流图形。我们想要得到它的有效值。根据有效值定义:

当交流电通过一个电阻时,如果在一定的周期内产生的热量与某个直流电在相同时间内通过同一电阻产生的热量相等,那么这个直流电的大小就被定义为交流电的有效值。

直流电流I通过电阻R,经过时间t产生的热量为:

根据微积分的思想,将交流电流进行分割得到了无数时刻的瞬时电流i(t),计算其通过电阻R产生的热量,在进行积分。得到一个周期内产生的热量为:

离散化处理后得到近似的计算公式:

根据有效值定义,将二者相等

换算后得到:

其实这也就是均方根值,其中

t=N*△t
i(n)代表着第n次采集到的电流值,N是采样的总次数,△t是采样间隔

t可以是信号整周期,也可以选择半周期(因为正负半周对称),N的数量越多则△t越小,精度越高,但是计算量也越大。

二、接下来是电路上的处理

1、通过电流互感器及采样电阻将电流信号转换为电压信号

2、经过精密整流电路将交流电压信号整流成直流
3、进行幅值运算放大,选取适当的放大倍数可以大幅减少后续计算量

4、经缓冲器进入单片机,对信号进行高速采样

因为高速采样最好使用DSP芯片,但是在产品方案中往往使用的还是单片机,最好使用带DMA的芯片,这样不会过多占用CPU的资源。并且计算过程中需要大量的32位平方运算,以及浮点运算。可以权衡一下精度与计算资源,选择恰当的采样数量。

三、软件处理

经过电路的处理,之前的公式也会相应做出变化
设电流互感器电流比为1:β
流过采样电阻电流i
采样电阻压降v
电路放大倍数为α
采样电阻RL
进入单片机ADC的电压为VADC=α*v

电流有效值:

其中

上面说过,如果放大倍数α取值得当,将会大幅度简化计算,如此,将I(n)的系数求平方之后如果恰好等于N,那么所有系数将会约掉,达到了简化后续软件计算的目的。

由于一下子处理N个数的平方和,再进行除法及开方运算,势必会造成程序阻塞,所以如果没有操作系统,裸奔情况下,只能一次处理少量数据,然后利用主循环进行多次数据处理,直至所有数据平方和结束,再进行取平均及开方运算。事实证明,这种方案是可行的。我所使用的芯片是没有DMA的,只能通过TIMER中断进行数据采集。好在产品功能并不复杂,完全可以应付过来。
另外在处理平方计算时,是选择浮点数平方还是32位变量平方,我曾经纠结了挺长时间,最后还是使用TIMER测试,实际测算出32位变量平方的用时略短一些。至于为什么使用32位变量而不是16位(ADC结果是12位,存放在16位单元中),是因为如果变量设计为16位,进行乘法之后,结果仍然是16位,会导致数据溢出。索性用32位变量计算。

四、误差

这种方法的误差主要在数据采集量,采集越多肯定越精确。另外电路中线性元器件的误差,二极管漏电流,运放的失调电压,以及电源误差,都会造成最终的结果存在误差。另外,不推荐使用二极管直接全波整流,使用运放精密整流会大幅降低误差。实际测量后,误差在0.3A左右,至少可以满足我的产品需求。

五、值得注意的地方

1、运放选取时,由于使用LM324,考虑的是廉价及供货比较稳定,产品也不需要太高的精度,但是LM324不是轨到轨运放,所以放大倍数不能太大,否则会导致后续信号失真,尽量使输出信号最大值小于3V(±5V供电下)
2、当被测电流较大时,电流互感器二次侧电流过大,会导致运放输出电流超过额定值,使运放无法正常工作。如果发现小功率时电路工作正常,大功率时工作不正常。
一种方法是增加电流互感器匝数比,将电流互感器二次侧电流降到运放电流输出范围内。
另一种办法就是运放扩流,利用三级管的放大作用,增加运放反馈网络电流。需要注意的是后续电路放大时注意不要超过运放最大输出电压范围。

作者:爱你越久越被动

物联沃分享整理
物联沃-IOTWORD物联网 » 使用单片机和电流互感器测定非正弦周期电流的有效值

发表评论