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.

[参考译文] MSPM0C1103:当 ADC 配置为 10 位时如何管理 ADC 偏移校正 (MSPM0C1103)

Guru**** 2693225 points

Other Parts Discussed in Thread: MSPM0C1103, MSPM0C1104

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1597823/mspm0c1103-how-to-manage-the-adc-offset-correction-when-the-adc-is-configured-at-10-bit-mspm0c1103

器件型号: MSPM0C1103
主题中讨论的其他器件: MSPM0C1104

TI 团队下午好

我将使用以下 UC 开发一个新设计:MSPM0C1103

在 TI 的 SDK\LP_MSPM0C1104 (ADC12_single_conversion) 示例中、可以看到关于 ADC 结果的偏移校正:

 

gADCOffset = DL_ADC12_getADCOffsetCalibration (ADC12_0_ADCMEM_0_REF_VOLTAGE_V);  //读取 ADC 偏移

……μ s。

gAdcResult = DL_ADC12_getMemResult (ADC12_0_INST、DL_ADC12_MEM_IDX_0);         //读取 ADC 值

adcRaw =(int16_t) gAdcResult + gADCOffset;         //固定 ADC 值

……μ s。

 gAdcResult =(uint16_t) adcRaw;           // gAdcResult 是要在代码中使用的 ADC 值。

 

“DL_ADC12_getADCOffsetCalibration ()“是允许读取存储到 MSPM0C1103 中的 ADC 偏移的 TI 例程。 如果我在 12 位配置中使用 ADC、这个代码会很清晰。  

我认为已经在 12 位模式下为 ADC 写入了“DL_ADC12_getADCOffsetCalibration ()“。

在我的工程中、我使用配置为 10 位的 ADC。 是否有必要将 gADCOffset 除以 (4) 才能使用校正后的值? 如果我是对的、应以这种方式修复上述代码:

 

gADCOffset = DL_ADC12_getADCOffsetCalibration (ADC12_0_ADCMEM_0_REF_VOLTAGE_V);  //读取 ADC 偏移

gADCOffset =(gADCOffset>>2) ;   //或使用“gADCOffset =(gADCOffset/4)“  - 修复 ADC 偏移

……μ s。

gAdcResult = DL_ADC12_getMemResult (ADC12_0_INST、DL_ADC12_MEM_IDX_0);  //读取 ADC 值

adcRaw =(int16_t) gAdcResult + gADCOffset;         //固定 ADC 值

……μ s。

 gAdcResult =(uint16_t) adcRaw;        // gAdcResult 是要在代码中使用的 ADC 值。

 

如果 ADC 配置为 10 位、gADCOffset 除以 4 是否正确? gADCOffset 值表示 ADC 计数上的数字。 我认为如果 ADC 位配置发生变化、它的值会发生变化。 否则、我将有可能高估失调电压和过度校正。

感谢您的支持。

周末愉快!

Michele

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

    您好、Michele:

    我必须与团队一起深入研究这一点。 我得到答案后将采取后续行动。

    此致、

    Owen

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

    您好、Michele:

    在与团队进行调查后、我相信您是正确的。 返回类型为 uint16_t、它返回一个 12 位值。 当使用 10 位分辨率时、您可以将校准值左移 2、或将 ADC 结果右移 2。

    此致、

    Owen

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

    更正后的步骤是将校准/偏移值 (gADCOffset) 除以 4、因为 我必须从 12 位传递到 10 位 ADC​。
    除以 4 就像将两个位置向右(而不是向左)移动。

    在本例中、校准值是有符号数:int16_t(函数“DL_ADC12_getADCOffsetCalibration"的“的返回的返回值)。
    因此、我更喜欢使用:

    gADCOffset =(gADCOffset/4)

    而不是

    gADCOffset =(gADCOffset>>2)

    这样 ​ 您就可以在其他计算机上拥有更可移植的 C 代码。 不过、我已通过调试器验证(通过调试器)、即使 MSPM0C1103 中 gADCOffset<0、指令 gADCOffset =(gADCOffset>>2) 也能提供正确的结果。

    Nb:由于 ADC 配置为 10 位、因此 ADC 转换器的结果始终为 10 位。 我无法更改它。  我只能 使用最佳值 gADCOffset 以最佳方式解决该问题。

     

    感谢您的支持。

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

    您好、Michele:

    是的、您回答正确。 抱歉、我上一个回答中的拼写错误。

    此致、

    Owen