static inline void RMS_Value_CLA_Cal(struct RMS_CAL *RMS_Cal)
{
if(RMS_Cal->DataIn<1000)
{
RMS_Cal->DataInSqu=(RMS_Cal->DataIn)*(RMS_Cal->DataIn);
RMS_Cal->DataADD+=RMS_Cal->DataInSqu;
RMS_Cal->DataADD-=RMS_Cal->DATA_Record[RMS_Cal->Count];
RMS_Cal->DATA_Record[RMS_Cal->Count]=RMS_Cal->DataInSqu;
RMS_Cal->DataOut=CLAsqrt(RMS_Cal->DataADD*DATA_DIV);
RMS_Cal->Count++;
if(RMS_Cal->Count>=DATA_LONG)
{
RMS_Cal->Count=0;
}
}
}
上述这段代码是在CLA.h中定义的,然后在.cla文件中用于进行采样处理
CLA_AC_CHARGING_VOLTAGE=((AdcbResultRegs.ADCRESULT4+AdcbResultRegs.ADCRESULT5)*0.5*0.000244140625*3.2*1.5625-2.64)*205.5076*0.9946-4.2963;
CLA_RMS_AC_CHARGING_VOLTAGE.DataIn=CLA_AC_CHARGING_VOLTAGE;
RMS_Value_CLA_Cal(&CLA_RMS_AC_CHARGING_VOLTAGE);
AC_CHARGING_DATA_OUT=CLA_RMS_AC_CHARGING_VOLTAGE.DataOut;
处理完成后输出的DataADD、DataOut值在Task1第一次运行时正常但后面会越来越小,是由于cla处理精度的问题还是在进行加减乘除运算的问题?