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.

[参考译文] TMS320F280049C:ADC 精度问题

Guru**** 1966425 points
Other Parts Discussed in Thread: TMS320F280049C
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1444438/tms320f280049c-adc-accuracy-issue

器件型号:TMS320F280049C

工具与软件:

您好!

我们正在将直流转换为交流、因此我们将 TMS320F280049C 微控制器用于逆变器应用。 但输出电流不稳定、在我们在无负载(空载)的情况下启动逆变器后、它会随输入电压的变化而变化。 当我们在无负载条件下启动逆变器且输入电压范围在350 - 450范围内变化时、值介于1000mA - 4000ma 之间、施加负载后得到1A 的 差值。 代码如下   

INT IFB_V;
内部 IFB_U;
整型 IFB_V_REAL;
整型 IFB_U_REAL;
长 ISqrtSum_U;
长 ISqrtSum_V;
内部 IFB_V_rms;
内部 IFB_U_rms;
int IFb_V_rms_f;
int ifb_u_rms_f;
float32_t ifb_v_real、ifb_u_real、ifb_total;


/********* 这部分代码位于主循环中 /

sum2 += AdcbResultRegs。 ADCRESULT4;
sum2 += AdcbResultRegs。 ADCRESULT5;
sum2 += AdcbResultRegs。 ADCRESULT6;
sum2 += AdcbResultRegs。 ADCRESULT7;

//计算 IAC_U 的中点
Sum3 += AdcaResultRegs。 ADCRESULT0;
Sum3 += AdcaResultRegs。 ADCRESULT1;
Sum3 += AdcaResultRegs。 ADCRESULT2;
Sum3 += AdcaResultRegs。 ADCRESULT3;

IFB_V_ref = Sum2 >> 2;//获得 IFB_V 通道的基准值
IFB_U_ref = Sum3 >> 2;//获得 IFB_U 通道的基准值


中断 void epwm1_ISR (void)

IFB_V = AdcbResultRegs。 ADCRESULT2;
IFB_U = AdcaResultRegs。 ADCRESULT1;

IFB_V =(int) IFB_V_ref - IFB_V;//-30
IFB_U = IFB_U - IFB_U_ref;//+30

IFB_V_REAL =(int)(((long) IFB_V * 85)>> 9);//34.158*1499/512 =10、0.01A 为1
IFB_U_REAL =(int)(((long) IFB_U * 85)>> 9);//34.158*1499/512 =10、0.01A 为1

IFb_v_real =(float32_t) IFb_V_real;
IFb_u_real =(float32_t) IFb_U_real;
ifb_total = ifb_v_real - ifb_u_real;//不需要


如果(abs (IFB_V_REAL)> IFB_REAL_max)

IFb_Real_max = Abs (IFB_V_REAL);
}
如果(abs (IFB_U_REAL)> IFB_REAL_max)

IFb_Real_max = Abs (IFB_U_Real);
}


ISqrtSum_U +=(长整型)(IFB_U_REAL)*(IFB_U_REAL);
ISqrtSum_V +=(长整型)(IFB_V_REAL)*(IFB_V_REAL);


tempI1 =(ISqrtSum_U * 41)>> 12;
IFB_U_rms =_IQ1sqrt (tempI1);
IFB_U_rms =(IFB_U_rms >> 1);
IFB_U_rms_f +=(((IFB_U_rms - IFB_U_rms_f)>> 2);

tempI2 =(ISqrtSum_V * 41)>> 12;
IFB_V_rms =_IQ1sqrt (tempI2);
IFB_V_rms =(IFB_V_rms >> 1);
IFB_V_rms_f +=((IFB_V_rms - IFB_V_rms_f)>> 2);

}

/***** 这是另一个函数、我们在其中计算当前值 /
CURR_rms_print =(int)(_IQ1int (((IFB_V_rms_f + IFB_U_rms_f)>> 1));
CURR_RMS_PRINT *= 1000;//将电流转换为 mA

void initGlobalVariables (void)

ISqrtSum_U = 0;
ISqrtSum_V = 0;
IFB_V_rms = 0;
IFB_U_rms = 0;
IFb_V_rms_f = 0;
IFb_U_rms_f = 0;
IFb_v_real = 0.0f;
ifb_u_real = 0.0f;
IFB_TOTAL = 0.0f;

}

此致、

Swaminadhan  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    请允许我花几天时间给您回复。

    此致、

    Ben Collier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉出现此延迟、您仍然遇到此问题?  

    谢谢!

    Ben Collier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ben Collier:

    是的,我仍然面临着这个问题。 当我们在无负载连接的情况下启动逆变器时、电流读数将在不同的电压下得到不同的值、这些电压也介于340-450Vdc 之间。 逆变器启动后、我们施加负载、它将显示与实际电流值不同的1A。  

    此致、

    Swaminadhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    为什么您认为这是 ADC 精度方面的问题? 您是否以其他方式测量电压?

    谢谢!

    Ben Collier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    电力电子装置中导致噪声和 EMI 的开关瞬态。  噪声可能会耦合到 ADC 输入线路中、导致读数不准确。 实际上、我们观察到、当逆变器在没有负载的情况下开启时、连接负载时我们获得的值不同、我们得到的值也不同。 我们还观察到了输出电流波形中的。

    谢谢!

    Swaminadhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我理解、这听起来像是一个系统问题、而不是 ADC 本身的问题。 这正是我所尝试的、因此我可以请求合适的人员提供帮助。