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.

[参考译文] CCS/TMS320F28377S:TMS320F28377S

Guru**** 2482105 points
Other Parts Discussed in Thread: TMS320F28377S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/627182/ccs-tms320f28377s-tms320f28377s

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

我使用的器件是 TMS320F28377S、ADC 模块具有以下校准功能。 ADC 转换误差非常大、大于+5%。 我不知道问题在哪里?

空 CalAdcINL (UINT16 ADC)
{switch (ADC){
ADC_ADCA 案例:
if (0xFFFF!=*((UINT16*) CalAdcaINL)(* CalAdcaINL)();//trimp 函数被编程到 OTP 中、所以将其调用
中断;
ADC_ADCB 案例:
if (0xFFFF!=*((UINT16*) CalAdcbINL)(* CalAdcbINL)();//trimp 函数被编程到 OTP 中、所以将其调用
中断;
ADC_ADCD 案例:
if (0xFFFF!=*((UINT16*) CalAdcdINL)(* CalAdcdINL)();//trim 函数被编程到 OTP 中、所以调用它
中断;


void AdcSetMode (UINT16 ADC、UINT16分辨率、UINT16 signalmode)
{uint16 adcOffsetTrimOTPIndex;//索引到 ADC 偏移调整的 OTP 表中
uint16 adcOffsetTrim;//临时 ADC 失调电压修整
CalAdcINL (ADC);//重新填充 INL 修整
if (0xFFFF!=*((UINT16*) GetAdcOffsetTrimOTP)){//offset 调整函数被编程到 OTP 中、所以将其调用
adcOffsetTrimOTPIndex = 4*ADC + 2*resolution + 1*signalmode;//计算 OTP 偏移调整和调用表中的索引
adcOffsetTrim =(* GetAdcOffsetTrimOTP)(adcOffsetTrimOTPIndex);//函数返回正确的失调电压修整

否则 adcOffsetTrim = 0;//offset 修整函数未填充、因此将 offset 修整设置为0
//将分辨率和 signalmode 应用于指定的 ADC。
//还应用偏移修整和线性修整(如果需要)。
switch (ADC){
ADC_ADCA 案例:
AdcaRegs.ADCCTL2.bit.resolution =分辨率;
AdcaRegs.ADCCTL2.bit.SGNALMODE = signalmode;
AdcRegs.ADCOFFTRIM。ALL = adcOffsetTrim;
if (adc_resolution_12bit = resolution){//12位线性修整权变措施
AdcaRegs.ADCINLTRIM1 &= 0xFFFFFF0000;
AdcaRegs.ADCINLTRIM2 &= 0xFFFFFF0000;
AdcaRegs.ADCINLTRIM4 &= 0xFFFFFF0000;
AdcaRegs.ADCINLTRIM5 &= 0xFFFFFF0000;

中断;
ADC_ADCB 案例:
AdcbRegs.ADCCTL2.bit.resolution =分辨率;
AdcbRegs.ADCCTL2.bit.SGNALMODE = SIGNALMODE;
AdcbRegs.ADCOFFTRIM。ALL = adcOffsetTrim;
if (adc_resolution_12bit = resolution){//12位线性修整权变措施
AdcbRegs.ADCINLTRIM1 &= 0xFFFFFF0000;
AdcbRegs.ADCINLTRIM2 &= 0xFFFFFF0000;
AdcbRegs.ADCINLTRIM4 &= 0xFFFFFF0000;
AdcbRegs.ADCINLTRIM5 &= 0xFFFFFF0000;

中断;
ADC_ADCD 案例:
AdcdRegs.ADCCTL2.bit.resolution =分辨率;
AdcdRegs.ADCCTL2.bit.SIGNALMODE = SIGNALMODE;
AdcdRegs.ADCOFFTRIM。ALL = adcOffsetTrim;
if (adc_resolution_12bit = resolution){//12位线性修整权变措施
AdcdRegs.ADCINLTRIM1 &= 0xFFFFFF0000;
AdcdRegs.ADCINLTRIM2 &= 0xFFFFFF0000;
AdcdRegs.ADCINLTRIM4 &= 0xFFFFFF0000;
AdcdRegs.ADCINLTRIM5 &= 0xFFFFFF0000;

中断;


AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCD、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);

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

    您好!

    快速浏览一下、"CalAdcINL"和"AdcSetMode"这两个函数看起来是经过修改的。 您是直接从"F2837xS_ADC.c"调用这些函数、还是无论如何修改它们?

    您能否提供有关信号源、ADC 配置设置等的更多信息? 在几乎所有情况下、如果转换后的值与预期值大相径庭、则通常会指向信号源不够强、无法在采集窗口内为 S/H 电容器充分充电。