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.

[参考译文] 将输出代码转换为电压

Guru**** 2774995 points

Other Parts Discussed in Thread: ADS1292

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/896080/converting-output-code-to-voltage

主题中讨论的其他器件:ADS1292

您好!

在一篇类似的文章中、我看到了将 ADS129X 的输出代码转换为电压的答案:

"将输出代码转换回输入电压的最简单方法是使用0x800000和数据、并测试 MSB (最高有效位)。 如果 MSB 等于0、只需将等效的十进制数乘以 LSB 大小。 如果 MSB = 1、必须首先从等效的十进制数中减去2^n、然后乘以 LSB 大小。 "


我有几个问题。  

那么、如果我的通道1的 ADS 输出代码是、假设为'0xD70A3D'。 我应该使用0x800000将此代码与以下代码进行编码:

A = 0xD70A3D & 0x800000

2.他说要测试 MSB、那我需要检查'A'的 MSB 对吗?

3、如果 MSB 为0、我必须将十进制等效值乘以 LSB

这里我的问题是、我应该将代码(0xD70A3D)或者和(A)的结果与 LSB 相乘以获得电压吗?

谢谢你

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

    Harikishore、您好!

    "AND"只测试 MSB 为1或0。  如果您采用0x800000 'ANA' 0xD70A3D、则最终为0x800000。  MSB 是符号位=>如果它为1、则为负数、如果不是、则为正数。

    使用0xD70A3D 数字、MSB 为1、因此您知道它是负值。  然后、您将从0xFFFFFFF 中减去0xD70A3D 以获得0x28F5C2、即十进制的2、684、354。  将该数字乘以 LSB 大小(在本示例中为74.506nV)、然后应用符号以从 Alex 提供的示例中获得-200mV。

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

    您好!

    除了 Tom 的回答很好之外、您可能还会发现模拟工程师计算器很有用。  在"数据转换器"部分、您将找到"电压代码"(反之亦然)计算工具。  单极选项假设是直接二进制输出、双极输出格式使用标准二进制补码、就像您的问题一样。

    http://www.ti.com/tool/ANALOGUE-ENG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这太棒了! 我对类似帖子中提到的 XOR 操作感到困惑。 是的、如果代码为负、AND 运算将提供0x800000、如果代码为正、则提供0。 然后、我必须按如下方式检查 MSB:
    if (a<<23=1)
    然后从代码的十进制等效值中减去(2^n-1)并乘以 LSB 大小
    如果 MSB 为0、我只需乘以 LSB 大小。 这给了我一个答案。  
    此外、我认为 ADS1292评估板使用3V 电源、因此 Vref 为2.42。 因此、LSB =(2 x 2.42)/增益/ 2^n
    我最初很难将代码转换为正确的十进制值。 我将输入代码存储为 unsigned long、稍后为了将代码转换回电压、代码更改了其十进制值。 然后、我将代码存储到一个有符号长整型变量中、在程序中进一步使用该变量进行转换、它起作用了! 这是因为 Arduino 没有24位变量。  
    我现在唯一的问题是传入代码中的代码。 我将每个代码的3个字节接收到一个指针中、然后将它们存储到8位变量中、如下所示:
    adcode1、adcode2和 adccode3。 然后使用 SHIFT 和 OR 运算符来返回代码。 如 adcode3<<16 | adcode2<<8 | adccode3。  
    我认为这是正确的。 但是在这里: https://e2e.ti.com/blogs_/archives/b/precisionhub/archive/2016/04/01/it-s-in-the-math-how-to-convert-adc-code-to-a-voltage-part-1、作者用0xFF 对每个8位段进行与运算。 这是我需要研究的吗?
    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Collin

    感谢您的观看。 但链接似乎无法正常工作。 如果我可以使用该计算器来验证转换、那将会大有帮助。 请帮我解决这个问题。

    谢谢你

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

    Harikishore、您好!

    尝试此模拟 工程师计算器链接、您不必使用0xFF 执行与每个字节进行与操作的额外步骤。  您仍应获得相同的结果。

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

    非常感谢! 感谢您的快速响应。  

    正如 Alex 所说、 VREF = 2.5V、N = 24位、增益= 4、我们可以计算出 LSB 大小为74.506nV。 输出代码0xD70A3D 对应于-200mV 的输入电压。  

    我随此帖子附上了模拟工程师计算器的屏幕截图。  

    在这里、LSB 的计算结果为298nV。 这是因为此处忽略了增益=4。 但是、我们得到的 ADC 输入电压为-0.8V。我发现、如果我将 ADC 输入电压除以增益、我得到-0.2V、这是正确的(=-200mV)。

    希望这是正确的。 谢谢你。

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

    您已经正确了!  计算器未实现 PGA 增益、因此如果将计算器中的298.023nV 和-0.8mV 数值除以4、则会得到预期结果。

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

    您好、谢谢。  

    在 Alex 的例子中、他采用 VREF= 2.5V、因此 FSR= 2x2.5= 5V。但是在上面的屏幕截图中、我采用了 FSR= 2.5。 是错误、还是软件识别出它是 VREF 并将其乘以2。  

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

    在双极模式下、计算器假设+/-Vref 是您的 FSR。

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

    谢谢你。 这很有帮助!