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.
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);
}
}