首页 » 智能 » 交流旗子暗记-市电电流电压的真有效值测量算法_有用值_通道

交流旗子暗记-市电电流电压的真有效值测量算法_有用值_通道

南宫静远 2024-12-20 01:10:55 0

扫一扫用手机浏览

文章目录 [+]

有几个网页留言说可以计量芯片,就我设计的产品来说,其须要掌握的增氧泵数量多; 

如果用计量芯片,则每路增氧泵的掌握至少增加5元本钱。

交流旗子暗记-市电电流电压的真有效值测量算法_有用值_通道 智能

而且计量芯片还须要一些限流电阻、滤波电容、晶振等外围器件,会占用大量的PCB板面积。

以是,我所选用的是非常有竞争力的技能方案。

但是,须要非常深厚的软、硬件功底。

特殊是对付软件,须要办理:

1) MCU资源分配问题,怎么样有限的MCU的ROM、RAM以及算力在A/D转换、真有效值打算、故障判断及保护、4g通信上做合理的安排。

2) A/D转换,怎么样进行16路A/D的转换,如何触发,怎么分时采样,采样结果怎么存储。

3) 数据处理,转换得到的数据如何做真有效值打算,如何标定。

MCU资源分配

我选用了STM32F103RCT6处理器,该款MCU紧张有以下资源:

256Kbytes ROM空间,4K用于bootloader, 100K是运用程序区,100K用的固件升级时的固件存储;剩下的52K用于配置参数存储(比如标定参数,用户编写的程序等)。

64Kbytes RAM空间,4Kbytes用作与4G模块通信的吸收环形行列步队,1Kbytes通信吸收缓存。

2Kbytes为发送缓存。
2Kbytes用于MODBUS通信,2Kbytes用于ADC的DMA缓存。
RAM远用不完。

DMA用到3个通道,一个通道用于A/D转换,一个通道用于与4G模块的串口吸收,一个用于与4G模块的串口发送。

Timer用了多少,个中一个用于A/D转换的触发,一个用来产生2ms, 8ms, 100ms, 1s等时基。

ADC用了16个通道,采取"Regular group"功能进行转换。

中断方面,使能了100us旁边的中断,用于产生韶光,以前耗时时间短的须要立即处理的事宜。

比如modbus吸收和发送超时计时。

由于复用以前的RS485代码,RS485的通信没有用DMA,而是用发送和吸收中断处理。

但是发送和吸收中断只搬运数据,而没有任何逻辑处理,因此所有中断加一起耗时不到10us,担保了主程序的实时性。

A/D的实现

1) 市电周期为20ms,对付每一个通道,在一个周期内共采样64个点。

一次采样的韶光为:312.5us。

2) 将ADC设置为定时器触发,触发周期为312.5us,将全部16个通道设置为"Regular group“,使能"Regular group"转换功能。

这样定时器每隔312.5us触发启动A/D,A/D模块自动转换完所有16个通道。

3) 设置DMA,利用DMA模块将结果搬移到缓存。

4) 主程序实时查询DMA的缓存,判断是否有新的转换数据,如果有,则将数据取数,根据数据所在的指针位置判断所在的通道,再对该值做真有效值打算)。

真有效值的算法

真有效值均方根值,即每次转换出来的数值跟均匀值做运算,推导过程如下:

真有效值打算公式(少乘了N)

定义两个64位的变量,用于累加每一次转换的AD值,以及AD的平方值。

在一个周期64点转换完成之后,经由下述算式算出AD值的真有效值:

1) AD的平方值的累加值-AD值的累加值*AD值的累加值/N

2) 第1步算出的数值除以N

3) 第2步片出的数值开方;

真有效值打算程序

真实物理量的标定

上述步骤算出的是AD值的有效值,而非真实物理量的有效值,要得到物理量的有效值,还须要进行标定转换。

我一样平常采取线性标定进行转换,即物理量=kAD+b,为了避免耗时的浮点数运算,

我将k转为乘以整数除以另一个整数。

如果线性度比较差,我会采取分段线性化的方法,即根据AD范围分多段区间进行标定。

标定过程以及分段线性化由一个专门的软件模块完成,后面文章再详述。

相关文章