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.

[参考译文] ADS8900BEVM-PDK:快速 ADC (>1MSPS),低错误(<0.5mV)

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1066238/ads8900bevm-pdk-fast-adc-1msps-with-low-error-0-5mv

部件号:ADS8900BEVM-PDK
“线程:测试”, “ADS8900B”, “THS4551”中讨论的其它部件

我想在没有 PHI 的情况下测试 EVM 板,这意味着与 STM32 MCU 直接通信的 ADC 芯片。

我在这里(https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1056122/ads1675ref-fast-adc-1msps-with-low-error-0-5mv/3913091?tisearch=e2e-sitesearch&keymatch=%20user%3A223776#3913091)被告知 ,我需要为 DVDD 和 LDO 输入供电。

  1. 根据原理图,两个功率级别都应为5.3V。 正确吗?
  2. LDO 输入电源是否有任何要求? 我想知道 从 STM32 G431主板的电源输出针脚中获取电源是否正常。
  3. 在电源示意图中,有 TP12,13,14,15和16等 ping 命令。 板上没有标记。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    是的,当不使用 PHI 数据采集板时,您需要为 DVDD 和 LDO_In 测试板供电。

    LDO 输入是线性稳压器的输入,输出电压设置为5.3V,用于为板载放大器和 ADS8900B 的模拟部分供电。  输入电压 LDO 输入电压应设置为5.5V 至6.0V,以便调节器可以正常工作。

    DVDD 是逻辑电平电压,直接连接到 ADS8900B。  此电压最大可为2.35V 至5.5V。  由于此电压设置了逻辑电平,因此最好使用 STM32板提供的相同电源,前提是它符合 ADS8900B 的电压范围。  其余 IO 信号可在收割台 J4上使用。

    根据原理图,两个功率级别都应为5.3V。 正确吗?

    DVDD 应设置为与 STM32板上使用的 IO 电平相同的电压,电压范围为2.35V 至5.5V。

    为了正确操作电脑控制器,LDO 输入应设置为5.5V 至6.0V。

    LDO 输入电源是否有任何要求? 我想知道 从 STM32 G431主板的电源输出针脚中获取电源是否正常。

    LDO 输入电流将消耗约20mA 的电流,可由外部实验室电源提供,或由 STM32板提供,只要电压在5.5V 至6.0V 范围内。

    在电源示意图中,有 TP12,13,14,15和16等 ping 命令。 板上没有标记。

    主板上的标签与以下 TPX 参考指示符相对应:

    TP13:LDO 输入(网络名称 LDO 输入_5V5)

    TP12:AGND (或系统接地)

    TP14:5.3V (线性稳压器的调节输出,用于为放大器和 ADC 模拟部分供电。  请勿将外部电源连接到此测试点。)

    TP15:DVDD (逻辑电平的数字电源,网络名称 EVM-DVDD)

    TP16:ID 电源(板载 EEPROM 的电源,在没有 PHI 的情况下使用时不需要。  请勿将外部电源连接到此测试点。)

    此致,
    基思·尼古拉斯
    精密 ADC 应用

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

    感谢 Keith 的明确和彻底的回答。

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

    您好,Keith,

    我们尝试读取 DIE_ID_REG (0x00)以查看 SPI 是否正常工作。

    下面是我根据数据表中表2支持的命令编写的代码。

    	/*
    	 * B[21:17] | B[16:8]         | B[7:0]       | CMD ACRONYM |  COMMAND DESCRIPTION
    	 * 10001    | <9-bit address> | 00000000     | RD_REG      | Read contents from the <9-bit address>
    	 * 10010    | <9-bit address> | <8-bit data> | WR_REG      | Write <8-bit data> to the <9-bit address>
    	 *
    	 * We try to read DIE_ID_REG 0x00 to see if SPI works.
    	 */
      //uint8_t wr_cmd = 0B10010;  // write command
      uint8_t rd_cmd = 0B10001;  // read command
      uint8_t reg_addr = 0B0; // register address. DIE_ID_REG 0x0 default value is 0x8
      uint8_t data = 0B0;
      aTxBuffer[2] = rd_cmd << 1;
      aTxBuffer[1] = reg_addr;
      aTxBuffer[0] = data;
    

    总的来说,要发送3个字节,我想我应该先发送 B[21:17],或者先发送 B[7:0]。  

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

    您好,

    向 ADS8900B 发送命令时,先发送 MSB,最后发送 LSB。  在您的情况下, 您应该先发送 B[21:17],然后发送 B[16:8],最后发送 B[7:0]。

    假设您使用的是默认 SPI-00-S 协议(通电或重置状态),图52显示了更多详细信息。

    此致,
    基思

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

    您好,Keith,

    我明白了你的观点。  

    我还有另一个问题:我的 SPI 驱动程序的传输单元是字节。 这里对于8900,该命令只有22位。 我想知道如何构建命令。

    例如,如果我要从寄存器0读取值(4字节),我猜我需要至少6字节的时钟周期:前2字节用于命令类型 B[21:17]和寄存器地址 B[16:8],其余4字节用于数据。 正确吗?  

    您有什么工作代码可供我参考吗?

    哪一个寄存器存储 ADC 结果? 注册表中未提及此问题。 或者我错过了这一机会吗?

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

    您好,

    为了从寄存器0读取,您需要发送两个 SPI 帧。  由于您使用的是8b 传输单元,因此每个 SPI 帧的总帧数可以设置为24b。  由于该命令只有22b,因此应该在帧的开头加上两个0,然后执行22b 命令。  数据表第7.5.2节概述了详细信息。

    为了阅读寄存器的结果,下面是2帧序列的样子。

    以下是每个框架的建议内容:

    框架1
    MOSI:0x00 10001 000000000 00000000b (读取注册命令,注册地址0x00h
    错误:以前的转换结果

    框架2.
    MOSI:0x00000000 00000000 000000000000 b (无操作命令,可用于读取下一帧的转换结果)
    错误:0x0000 1000 0000 0000 0000 00000000 b (前8位是寄存器0的内容,后接0)

    除非前一帧发出了读取寄存器命令,否则 ADC 始终输出最新的转换结果。  没有可从中读取结果的寄存器,它只是存储在作为 SPI 端口一部分的输出数据寄存器(ODR)中。

    很抱歉,我们没有任何示例代码。

    此致,
    基思

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

    您好,Keith,

    非常感谢您的详细解释。 我几乎到了那里。

    基于7.5.1,仅限错误帧2的某些部分包含所选寄存器的内容。

    我听从了你的2帧建议,就2帧而言,我得到了

    错误:0x1000 1000 0000 0000 0000 0000   

    不确定为什么位23为1。 根据7.5.1,寄存器0值应为 00 1000 00,而不是0x08。 ??

    根据您的解释,如果我只想检索 ADC 结果,传输一个帧将会:

    框架1
    MOSI:0b0000 0000 0000 0000 00000000  
    错误:以前的 ADC 转换结果  

    我是对的吗?

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

    您好,

    是的,你是对的。  假设在前一帧中 MOSI 保持较低,则当前帧将提供转换结果。

    寄存器0x00h 中读取的值可以从设备更改为设备,这就是为什么我们不在数据表中的可用寄存器中列出它。   

    请记住,数据表假定框架宽度为22b。  如果您的帧大小为24b,则设备的第一个超频位(MSB)仍被视为 D21,即使在您的24位帧中,它在技术上是 D23。

    此致,
    基思

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

    因此 ,读取寄存器值 存储在3字节帧的前8位中。

    ADC 结果保留在该3字节帧的前20位,尽管数据字为22位,但最后2位用于奇偶校验。

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

    您好,

    是的,这是正确的。  ADC 的结果将始终是设备的前20位计时,然后是2位以进行奇偶校验。  其余2位(当计时总共24位时)将为零。

    对寄存器值相同。  前8位将是寄存器值,当每个帧的时钟频率总计为24位时,后跟16个零。

    此致,
    基思

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

    您好,Keith,

    现在,我在 ADC 读数方面遇到了问题。 请查看以下简单电路:有一个非常好的电压源和两个电阻器:

    (1)如果我使用8900 Eva 板直接测量 A 和 C 之间的电压,读数非常准确。

    (2)如果我测量 A 和 B 之间的电压,读数误差可能为几十 mV。

    我想知道哪些因素会导致读取错误,以及我可以采取哪些措施来减少错误。

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

    您好,

    ADS8900BEVM-PDK 的输入电阻不高。  每个输入都是1千欧电阻器,用于设置放大器级的整体差分增益,标称增益=1。  添加外部源电阻将改变此增益,从而导致相当多的误差。

    如果要测量电阻器网络上的电压,需要添加额外的缓冲放大器以提供高输入阻抗。  以下应用说明显示了在 THS4551差分放大器输入上添加缓冲区的示例。

    https://www.ti.com/lit/an/sbaa243/sbaa243.pdf

    此致,
    基思

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

    您好,Keith,

    此处还有3个问题:

    (1)对于 Eva 应用程序“ADS8900B EVM-exe”,导出的 bin 文件的格式是什么?

    (2)如果我单击“捕获或日志”,现有文件将被附加或覆盖? 它似乎被覆盖了,不是吗?

    (3)根据数据表第7.4部分,芯片在 CONVST 引脚 上升边缘进入 CNV 状态,转换结束后进入 ACQ 状态。

    这意味着如果我想使用 MCU 来持续进行转换并获得结果,我的 MCU 需要执行以下步骤:

    1. 拉 CONVST 高
    2. 等待足够长(Tconv_max)或 RVS 从低到高过渡
    3. SPI 读取
    4. 转至步骤1

    我的问题是,在 SPI 读取过程中,如果我想节省时间, 是否可以安全地将 CONVST 拉高? 它会破坏上一读吗?

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

    您好,

    (1)对于 Eva 应用程序“ADS8900B EVM-exe”,导出的 bin 文件的格式是什么?

     输出数据是以小 Endian 格式表示的32位带符号整数。 Windows 标准格式。  您需要一个工具(如 MATLAB)来打开和绘制数据图解。

    您也可以将数据直接导出到 Excel (如果已安装在 PC 上)或剪贴板。  为此,您可以在“时间域显示”中“右键单击”绘制的数据,然后选择“导出到...” ”

    (2)如果我单击“捕获或日志”,现有文件将被附加或覆盖? 它似乎被覆盖了,不是吗?

    是的,如果您保存到相同的目录和文件名,该文件将被覆盖。  如果要保留多个文件,则需要使用不同的文件夹和/或不同的文件名。

    (3)根据数据表第7.4部分,芯片在 CONVST 引脚 上升边缘进入 CNV 状态,转换结束后进入 ACQ 状态。

    我的问题是,在 SPI 读取过程中,如果我想节省时间, 是否可以安全地将 CONVST 拉高? 它会破坏上一读吗?

    有两种方法可用于检索数据,即区域1 (图47)或区域2 (图48)。  最好不要在数据传输过程中将 CONVST 拉高。  如果数据速率较低或需要最短的响应时间,则最好选择区域1。  区域2提供了更多的时间来传输转换结果,这需要更低的 SCLK 频率。  请遵循第1区或第2区的时间安排建议,您将不会遇到任何数据损坏问题。

    此致,
    基思

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

    您好,Keith,

    如果可以进行多个 ADC 扫描,比如10,那么我可以一次读取 SPI 30字节来检索10个读数吗?

    这似乎是不可能的,是吗? 在图45中,只有一个输出数据寄存器(ODR)缓冲区。 如果我没有读取它,它将被下一次 ADC 扫描覆盖。  

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

    您好,

    这很不可能。  ADS8900B 没有内部内存缓冲器或 FIFO。  对于每个转换结果,必须检索数据。  如果您没有检索当前的转换结果,则数据将被下一个转换结果覆盖。

    此致,
    基思

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

    您好,Keith,

    很抱歉让你再次遇到麻烦。  

    在上图中,线路 D3为 CONVST 信号,而 D4为 RVS。

    我要做的是:MCU 将 CONVST 拉高以启动 ADC 转换,我监控 CONVST 和 RVS 信号。

    1. 当 CONVST 被拉高时,RVS 本身就会变低。 MCU 无需执行任何操作。 是吗?
    2. 转换完成后,RVS 会变高,MCU 可以使用 RVS 上升边缘来启动 SPI 读取以检索最新的 ADC 结果。 是吗?
    3. 根据数据表第9页,ADC 转换需要600~670 ns。 从以上情况看,RSV 高低之间的差距约为2us。
    4.  要执行异步重置,RST 必须保持在低位至少100 ns。 没有提到最长时间,我想任何长度都应该是可以的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,他,

    1. 当 CONVST 被拉高时,RVS 本身就会变低。 MCU 无需执行任何操作。 是吗?  是的,这是正确的。
    2. 转换完成后,RVS 会变高,MCU 可以使用 RVS 上升边缘来启动 SPI 读取以检索最新的 ADC 结果。 是吗? 是的,当 RVS 从低到高过渡时,转换过程完成,转换结果可以从设备读取。
    3. 根据数据表第9页,ADC 转换需要600~670 ns。 从以上情况看,RSV 高低之间的差距约为2us。  ADS8900B 的最大转换时间为670ns。  RVS 可能会有一小段额外的延迟,但它永远不应读为2usec。  您的逻辑分析仪是否可能出现测量错误?  您可以尝试在模拟视图(示波器)模式下直接测量吗?
    4.  要执行异步重置,RST 必须保持在低位至少100 ns。 没有提到最长时间,我想任何长度都应该是可以的?  是的,RST 可以无限期保持在低位。

    此致,
    基思