求教ADE7878A的AVRMS参数对应计算公式?

参考网络上的代码,有如下两种测试式子,但测试过后感觉都不是很合理。

式一:

phase_a_vrms = (a_vrms / 4191910.0) * (0.5 / sqrt(2.0));    //V

式二:

phase_a_vrms = (a_vrms / 5928256.0) * 0.5;                       //mv

其中a_vrms是寄存器值,phase_a_vrms是计算后的有效值,但算出来的结果和示波器读数对不上,求教应该怎么计算才对。

  • Gary,您好!

         我是在IRQ产生后才进行读取寄存器的操作的,每次IRQ之后读取的值都是随机的。目前在未接入Va、Vb、Vc、Vn端时电压寄存器读回的值随机跳动,代码如下,寄存器地址查验过没错。初始配置参考官方ADE7878Test示例代码,未做变动。CT未接入时AIRMS、BIRMS、CIRMS读回的值也会随机跳动,不知道是何故。

    ade78xx_state_t ade78xx_vrms_calc (ade78xx_handle_t ade78xx_handle, ade78xx_phase_t phase, float *p_phase_vrms)

    {

        uint32_t reg_vrms = 0;

        /* 入参判空 */

        if (NULL == ade78xx_handle) {

            return ADE78XX_INVAL;

        }

        /* 象限判断 */

        switch (phase) {

        case PHASE_A:

            ade78xx_spi_read_4bytes(ade78xx_handle, AVRMS, &reg_vrms);

            break;

        case PHASE_B:

            ade78xx_spi_read_4bytes(ade78xx_handle, BVRMS, &reg_vrms);

            break;

        case PHASE_C:

            ade78xx_spi_read_4bytes(ade78xx_handle, CVRMS, &reg_vrms);

            break;

        /* 象限有误 */

        default:

            return ADE78XX_EPHASE;

        }

        //计算公式由文档来:

        //采用0.5 V(交流峰值)的额定满量程模拟输入信号时,满量程正弦波信号的等效

        //有效值为4,191,910 (0x3FF6A6),该值与线路频率无关。

        *p_phase_vrms = (reg_vrms / 4191910.0) * (0.5 / sqrt(2.0)) * ade78xx_handle->voltage_rate; //V

        return ADE78XX_OK;

    }

    祝好,

    Yew

  • 0
    •  Analog Employees 
    on May 24, 2018 1:37 PM

    您好,

         请给我们电路的原理图,这样可以查看电路有没有问题。如果电路没问题,我们再看SPI的通信问题。谢谢。

    祝好,

    Gary

  • 0
    •  Analog Employees 
    on May 24, 2018 1:41 PM

    您好,

         看您的代码,通过phase来进行相的切换,并且每次都将结果存储到reg_vrms,建议您分开读,每一次都可以读三个相的值,并存储到不同的变量里。如果未接入传感器有值的跳动,有可能是噪声引起的,跳动的数据是怎么样的?谢谢。

    祝好,

    Gary

  • Gary,您好!

         如前代码所示,每次读取前均对reg_vrms进行清0,应该不会对读取结果造成影响。跳动的数据很随机,有点像普通MCU浮空时随机跳动的那种感觉。

          已按照您的建议尝试一次性读取三个寄存器,结果未接入的相值仍然在跳动。

         请问除了官网的示例代码ADE7878Test,是否还有更为详尽的示例呢。比如有功无功/功率计算、电能计算等。

    祝好,

    Yew

  • 0
    •  Analog Employees 
    on May 30, 2018 10:55 AM

    您好,

         除了官网的示例代码,其他的代码也都是些简单的建立通信的代码,并没有具体的计算示例。听您的描述,rms值如果有跳动,看起来像是噪声,您可以用示波器观看芯片相关相输入引脚信号的波形,看看是否有噪声影响。在电能累积环节,有NOLOAD寄存器来使器件不累积该相的电能。谢谢。

    祝好,

    Gary