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.

[参考译文] TMS320F2.8379万D:何时将ADCPPBxOFFCAL写入负数?

Guru**** 2576195 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/642534/tms320f28379d-when-will-adcppbxoffcal-be-written-negative-number

部件号:TMS320F2.8379万D

您好,

例如,如果外部传感器将0A电流转换为-0.1V,将100A电流转换为2.0V,则偏移-0.1V无法通过 ADCPPBxOFFCAL补偿, 我们必须对外部电路进行一些修改,将输入电压提升到正电压,然后将其连接到ADC输入引脚(因为该引脚不能接受负电压),然后ADC输出始终为正,因此 ADCPPBxOFFCAL应该始终为正,对吗?

但 ADCPPBxOFFCAL可以设置为负值,何时将其设置为负值?

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

    PPB偏移校准仅限数字,因此不能校准低于VREFFLO或高于VREFHI的电压。

    校准已签名,因此,如果偏移误差为负值,则可针对VREFFLO至VREFHI范围内的所有输入电压校准信号。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Devin,
    所以你的意思是如果输入引脚上的电压是VREFLO,ADCRESULT可能不是0,而是负的? 假设-10,通过编写ADCPPBxOFFCAL=-10,我们可以补偿偏移错误吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Howard:

    假设外部通道的真正偏移误差为+10mV:

    • 当传感器理想输出123mV时,它实际上输出133mV。  
    • 当传感器理想输出1.200V电压时,它实际上输出1.210V电压。  
    • 当传感器理想输出2.155V电压时,它实际上输出2.165V电压。  
    • 等等

    因此,您需要使用PPB对信号进行数字修正。  如果VREFHI为2.5V,则您需要应用(-1)*(10mV/2.5V)*4096 =-16个数字校正计数。   

    如果将此值写入关联PPB通道的OFFCAL寄存器,则会出现以下行为:

    • 校正范围中间的代码(例如,将根据需要校正上面列出的所有电压)
    • 在低压侧,任何产生16或更低原始数字代码的输入电压将导致校正输出'0'(OFFCAL补偿在低压侧0饱和)。  这样做的总体效果是ADC范围缩小。
    • 在高压侧,一旦输入电压达到2.5V,原始输出将为4095,校正输出将为4095 - 16=  4079. 增加电压不会增加此结果,因此ADC再次失去了一点范围。   

    总的来说,补偿适用于ADC范围内的所有代码,但ADC范围已缩小。

    您可以使用OFFREF寄存器代替使用OFFCAL寄存器。  这不会饱和,并会产生负输出。  输出转至PPB结果而不是ADC结果。 在这种情况下:

    • 校正范围中间的代码(例如,将根据需要校正上面列出的所有电压)
    • 在低压侧,任何产生16或更少原始数字代码的输入电压将导致校正输出为0或更少。  在0V模拟输入时,校正的数字输出将为-16。   
    • 在高压侧,一旦输入电压达到2.5V,原始输出将为4095,校正输出将为4095 - 16=  4079. 增加电压不会增加此结果,因此ADC再次失去了一点范围。  这与OFFCAL范围没有什么不同。  

    选择使用哪种信号取决于信号是否接近导轨并可能饱和。  如果不是,则可能使用OFFCAL校准,因为常规ADC寄存器中的结果比PPB结果早1个周期可用。  如果是,则使用OFFREF可能是更好的选择,因为ADC范围丢失的较少(但下游算法需要能够处理负输入值)。   

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

    谢谢你。 解释是绝对清楚的。

    1.只有一件事需要确认。 ADCRESULTy=ADC输出- ADCPPBxOFFCAL,因此在您的示例中,OFFCAL应该设置为16,而不是-16,对吗?

    2.此外,ADCPPBxRESULT = ADCPPBxOFFREF - ADCRESULTy, NOT ADCRESULTy - ADCPPBxOFFREF,正确吗? 因此,如果我设置 了ADCPPBxOFFREF=0, ADCPPBxRESULT将是“- ADCRESULTy”,而不 是ADCRESULTy。

    但在技术参考手册OFFREF。9.2 部分,它说“将0写入9.1 寄存器有效地禁用了错误计算功能,将ADCRESULT值传递到ADCPPBxRESULT寄存器,而不更改。”

    我只想确保下面的技术参考手册是正确的。

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

    1)是的,您回答正确。

    2)此处的图表中的+/-看起来不正确。 OFFREF的工作方式和方向与OFFCAL相同,只是可以对结果进行签名,结果将进入PPB结果寄存器。