This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LAUNCHXL-F28379D: 有关有效值计算(RMS值)的相关疑问

Part Number: LAUNCHXL-F28379D

ti的工程师们你们好!

我想请问一下就是launchxl-f28379d的哪一个库中有没有写好的RMS函数可以使用?我使用launchxl-f28379d对一个正弦波电压进行了采样频率5000Hz的采样(最终得到一个100个数据点的数组),我利用RMS的公式对这个数组进行RMS计算,但是RMS值波动比较大(因为实际电压比较大,是通过缩放才将电压缩放到可以采样的范围内,反推回去后波动比较大),所以我想问问看是不是ti库里面有现成的rms函数,计算起来的rms数值波动不会太大一点

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 好的,我看到这个链接了,这个有效值计算比较适用于电机方面的有效值计算,有需要的朋友可以看看,我把例程找到的函数放上来

    void calculateRMSData(MOTOR_Handle handle)
    {
    MOTOR_Vars_t *obj = (MOTOR_Vars_t *)handle;

    float32_t IrmsMax_A, IrmsMin_A, VIrmsIsrSet;

    if(obj->flagVIrmsCal == true)
    {
    obj->flagVIrmsCal = false;

    obj->Irms_A[0] =
    sqrtf(obj->IrmsPrdSum[0] * obj->IrmsCalSF);

    obj->Irms_A[1] =
    sqrtf(obj->IrmsPrdSum[1] * obj->IrmsCalSF);

    obj->Irms_A[2] =
    sqrtf(obj->IrmsPrdSum[2] * obj->IrmsCalSF);

    if(obj->Irms_A[0] > obj->Irms_A[1])
    {
    IrmsMax_A = obj->Irms_A[0];
    IrmsMin_A = obj->Irms_A[1];
    }
    else
    {
    IrmsMax_A = obj->Irms_A[0];
    IrmsMin_A = obj->Irms_A[1];
    }

    IrmsMax_A = (obj->Irms_A[2] > IrmsMax_A) ? obj->Irms_A[2] : IrmsMax_A;
    IrmsMin_A = (obj->Irms_A[2] < IrmsMin_A) ? obj->Irms_A[2] : IrmsMin_A;

    if(obj->speedAbs_Hz != 0.0f)
    {
    VIrmsIsrSet = obj->VIrmsIsrScale / obj->speedAbs_Hz;

    VIrmsIsrSet = (VIrmsIsrSet > obj->VIrmsIsrScale) ?
    obj->VIrmsIsrScale : VIrmsIsrSet;

    VIrmsIsrSet = (VIrmsIsrSet != 0) ?
    VIrmsIsrSet: obj->VIrmsIsrScale;
    }
    else
    {
    VIrmsIsrSet = obj->VIrmsIsrScale;
    }

    obj->IrmsCalSF = 1.0f / VIrmsIsrSet;
    obj->VIrmsIsrSet = (uint16_t)(VIrmsIsrSet);

    obj->unbalanceRatio =
    (IrmsMax_A - IrmsMin_A) / (IrmsMax_A + IrmsMin_A);
    }
    }