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.

[参考译文] ADS1247:ADS1247每次我复位/上电时、输出数据都会变化

Guru**** 2511985 points
Other Parts Discussed in Thread: ADS1247

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/679056/ads1247-ads1247-output-data-is-varying-every-time-i-reset-power-on

器件型号:ADS1247

尊敬的 TI 团队:

我正在使用 ATMHz 128与 ADS1247通信(SPI 模式1、1MHz 时钟、MSB 优先)。

我根据数据表使用了3线设计示例、也按照数据表进行了寄存器配置。

我只获得7FFF (发送 RDATA、NOP 并在循环中读取数据)。 此外、RREF (R100)两端的电压为820mV。

我尝试更改增益和采样率、SPI 时钟速率设置。 但结果是相同的:(

然后、我通过检查 DRDY 状态(针对 DOUT/DRDY 进行配置)开始读取数据。 现在我获得的是恒定值(不正确)、但在每次加电/复位后会有所变化。

820ohm 上的基准电压仍为820mA。

谢谢、

Sushma

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


    您得到的值是什么、每次上电/复位都会有多大变化? 这些值是否接近预期值、或者与您认为应该得到的值非常远? 产生的值可能是由电路中的某些趋稳引起的。 如果您有输出数据、我想查看来自 ADC 的原始数据、我将需要有关设置的更多信息。

    根据您显示的原理图上的标签、您似乎正在进行3线 RTD 测量。 ADC 输入设置为 AIN1和 AIN2、而在 AIN0和 AIN3处使用两个电流源来驱动 RTD。 两个电流源被汇总到基准电阻器(R10、820Ω)中、基准电阻器是基准电压。 原理图看起来基本上是正确的、但让我知道是否有任何更改或未组装的组件。

    如果错误非常大、则需要验证设置。 您似乎已经使用万用表在电路上进行了测量、但如果没有、请验证1。 VREFOUT 至 VREFCOM 为2.048V、以启用 IDAC 电流;2. 您在基准电阻器上具有适当的电压(如果 IDAC 为500uA、则为0.82V;如果 IDAC 为1mA、则为1.64V);3. RTD 两端的电压正确(如果是 PT100 RTD、则 IDAC 电流 x ~100Ω μ A -您可以在 C43两端测量该电压并将其报告回来);4. 基准电阻器上的电压是正确的。 我还会检查/RESET 和 START 是否均为高电平、电源电压是否正确。

    之后、如何配置 ADC? 我需要知道输入引脚的设置、数据速率、PGA 值、IDAC 设置、IDAC 输出、 VBIAS 设置和烧毁电流源。 读回所有 ADC 配置寄存器非常重要。 通过读回 ADC 配置寄存器、可以显示您是否已正确写入器件。

    如果误差较小、则可能是电路中的某种趋稳。 从开始时间到器件配置的时间是多少、从器件配置到首次读取数据的时间是多少。 当 IDAC 电流打开且外部电路稳定时、将会出现稳定。 VREFOUT 将有一段时间稳定下来。 当 IDAC 电流打开时、电容还需要时间从输入滤波和基准稳定。 这将来自 C43和 C50。 对于大型串联电阻器(R83/R86和 R98/R101)、您可能需要几毫秒的时间才能稳定。


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

     您好、Joseph、

    我将获得7FFFF (大多数时间)、0、FFFFF、FFFFE 等随机值、...

    为了进行测试、我在 AI_RTD_IN 和 SI_RTD_OUT 之间连接了一个120欧姆的固定电阻器

    是的、我使用万用表测量了电压。
    VREFOUT 至 VREFCOM 为2.048V
    基准电阻器上的电压= 821.4mV (IDAC 设置为1mA)

    120欧姆的电压(用于测试)= 0


    ADS1247配置:-
    CS\低电平、5us 延迟
    复位、0.6ms 延迟
    SDATAC、210ms 延迟
    复用_1:0x20
    SYS_CONTROL:0x22
    复用_0:0x0A
    IDAC_0:0x06
    IDAC_1:0x03
    10us 延迟
    CS\高电平

    SPI 设置:- RTDSettings (1000000、MSBFIRST、SPI_MODE1)


    要读取数据:-
    CS\低电平、5us 延迟
    RDATA
    RTDvalue |= SPI.transfer (NOP);
    RTDvalue <= 8;//第一个字节是 MSB,所以向左移动8个位置
    RTDvalue |= SPI.transfer (NOP);
    RTDvalue <<= 8;
    RTDvalue |= SPI.transfer (NOP);

    串行(RTDvalue)

    5us 延迟

    CS\=高电平


    我将调用具有500ms 延迟的循环 ReadData 函数。

    我读取每个寄存器(使用 RREG)并获得正确的值(我设置的值)。


    谢谢、
    Sushma

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


    在您的上一篇帖子中、我想指出一些问题。

    首先、7FFFFF 不是随机输出。 该值是正满量程测量值。 这可能意味着几个不同的因素(输入比预期大得多、增益过高、输入断开连接并浮动到较大值、或者可能意味着基准为0或远低于预期)。

    其次、如果您已经从 ADS1247数据表中复制了该设计、则基准电阻器上的电压应为1.64V、而不是0.82V。 公式26中显示了这一点。 有两个 IDAC 电流源、其中一个进入 RTD 的第一个引线、另一个进入 RTD 的第二个引线。 将两个电流相加并使 RTD 通过第三根导线、两者均驱动基准电阻器。 其原理如图116所示。

    我认为您在第二个 IDAC 电流的 RTD 测试中连接不良、因为您的编号有点偏。 如果您获得一些0数据、那么我认为您的其他 RTD 连接可能会损坏。 但是、从第一个数据开始、您将得到499BE0。

    499BE0h = 4824032d

    如果忽略第二个 IDAC 电流、并且只有来自 IDAC1的电流进入 RTD、则基本上具有正确的值。 RTD 电阻的计算公式如下:

    RRTD = 4824032 * RREF /(增益* 2^23)= 4824032 * 820Ω/(4 * 2^23)= 117.89Ω Ω

    该值接近您的预期值120Ω。 但是、该测量包括 RTD 的一些引线电阻。 如前所述、您将有两个 IDAC 电流驱动 RTD 的不同引线、因此计算方法为:

    RRTD =输出代码* RREF /(2 *增益* 2^23)

    这是因为基准电压是两倍大、因为有两个 IDAC 电流。 我将注意到、您的测量结果与预期结果稍有不同。 这可能是因为您的测试 RTD 测量从120Ω Ω 断开、或者基准电阻从820Ω Ω 断开。 如果您希望进行精密测量、则两个值都需要误差较低。 此外、如果您希望通过此3线测量进行非常精确的测量、则需要交换 IDAC 的输出并进行第二次测量以求平均值。 这将消除 IDAC 电流不匹配产生的误差。

    仔细阅读数据表中的这些注释和应用设计。 然后检查 RTD 和电路板的连接。 您应该能够从 ADC 获得正确的输出。


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

    e2e.ti.com/.../RTD-TESTING.pdf

    您好、Joseph、

    感谢你的答复。

    是的、我仅从 ADS1247数据表中获取了设计和寄存器设置。

    现在、我使用 RRTD =输出代码* RREF /(2 *增益* 2^23)在代码中进行电阻计算。

    我已配置2个 IDAC 电流为1mA、但基准电压仍然减半(0.82V)。  我无法解码此行为。

    如果我单独配置 AIN3作为第二个 IDAC 源、那么也会获得相同的结果。

    如果我将 AIN3/AIN0配置为第一个 IDAC 源并断开第二个源、那么我将获得随机值。 请找到所附文件。

    现在、我对第一个 IDAC 源配置有疑问。  

    我想知道、

    1) 20sps 采样率的 SPI 时钟频率是多少?

    2)我是否只需要驱动一个 IDAC 电源?  

    3)我是否可以使用固定电阻器代替 RTD 进行测试(我也使用过电位计,但结果相同)?

    4) 4)我是否必须在任何 SPI 命令之间提供任何特定的延迟量?

    谢谢、

    Sushma

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


    如果您能够读回寄存器且寄存器正确、则没有理由 IDAC 电流不会同时出现在正确的引脚输出上。 如果可以、您可以移除基准电阻器和 RTD 连接、并在 AIN0和 AIN3之间接地1kΩ Ω 电阻器、以查看电流是否流出。 我想这是一个不良的连接或焊点。 但是、我无法查看和评估您的电路。

    至于可变输出数据值、这可能与我刚才提到的问题相同、因为连接不良、也可能是转换或通信的时序问题。

    您是否设置了配置寄存器、然后在器件持续转换时进行多个读数? 或者、您是否使用 START 引脚启动单次转换、然后使用 START 引脚进行后续单次转换。 此外、当您读取数据时、您是否在 SDATAC 模式下使用器件并使用 RDATA 获取转换数据、或者您是否将器件置于 RDATAC 模式、而只需使用 SCLK 即可获取数据。 重点是、当您获取数据时、您不希望新转换中断使用新转换数据读取的数据。

    可能值得使用示波器或逻辑分析仪来检查 ADC 输出的数据、并查看/CS、DOUT、SCLK 和 DIN 线(也可能是/DRDY)。 我会检查数据是否在新转换过程中不间断地输出(通过检查/DRDY)。

    仔细查看我的评论。 以下是您的问题的答案:

    SPI 时钟频率规格链接到器件使用的主时钟。 假设主时钟为4.096MHz、则最小 SCLK 周期为488ns。 这相当于2.049MHz。 如果使用内部振荡器、则会有大约±5%的变化、因此最大值大约为1.497MHz。 如果您使用的是1MHz 的 SCLK、则这不会成为问题。

    2.您可以使用单个 IDAC 驱动 RTD、但通过设置电路、您无法消除 RTD 引线电阻作为误差源。 有多种替代拓扑可用于使用单个 IDAC 测量三线 RTD、但需要测量 RTD+引线电阻、然后测量第二引线电阻以抵消。 遗憾的是、使用此电路配置、我认为您无法进行第二次测量。

    当然可以使用固定电阻器而不是电位计。 本示例设计中的数据来自使用一组像3线 RTD 那样连接的精密电阻器。

    4.对于您的情况、数据表第11和12页列出了唯一必需的时序信息。 如果您以2kSPS 的数据速率运行、SCLK 还需要其他时序要求才能实现单周期稳定。 如果您关心通信时序、我建议您读取振荡器/逻辑分析仪读数并发布我在上一节中提到的结果。


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

    您好、Joseph、

    很抱歉耽误你的时间。

    >读取数据时,是否在 SDATAC 模式下使用设备并使用 RDATA 获取转换数据

    是的。 在配置 ADS1247之前、先发送 SDATAC、然后再调用 RDATA、再循环中跟随3个 NOP。

    我读回寄存器和寄存器是正确的。  

    串行打印的原始数据:

    IDAC_0 = 0x96、因为它还包含器件 ID。

    ADC 值(温度值)为0x7FFF。  

    我验证了当前值、并且分别在 AIN0&AIN3处获得了两个电流(IDAC0&IDAC1)。 但在120欧姆(用于测试)范围内没有得到0.12mV (IR=1mA*120欧姆)电压。

    DRDY\引脚未连接到微控制器。 我在示波器中捕获了/CS、DOUT、SCLK 和 DIN 线。 CS\仅保持低电平。

    然后,我修改了代码以只读温度数据(RDATA&NOP),删除了 RREG 部件。 我调用函数以以1秒延迟读出循环温度。

    谢谢、

    Sushma

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

    Sushma、

    我已经浏览过您的上一篇文章、您能够读回的寄存器值看起来是正确的。 MUX0为0A 要将 AIN1和 AIN2用作输入、MUX1为20、始终启用内部基准、将基准设置为 REFP0/REFN0、器件处于正常工作状态。 SYS0为22将 PGA=4设置为20SPS 数据速率、IDAC0为06将 IDAC 电流设置为1mA、IDAC1为03将电流路由到 AIN0和 AIN3。

    此时、我仍然认为您的某个位置连接不良。 这就是我认为的样子。

    如果您测量的测试电阻在红色 x 的位置断开、您将获得与所获得的结果类似的结果。 IDAC1尝试将1mA 电流路由到 RTD 电阻、但没有到达该电阻、将 AIN1上拉至接近 AVDD。 IDAC2将电流正确路由到 AIN3、但由于 IDAC1未达到 RREF、因此 AIN2的电压仅为0.82V。 当 AIN1接近 AVDD 时、从 AIN1到 AIN2的电压远高于满量程。 这将得出一个7FFFFFh 的 ADC 读数。 同时、如果您测量 RRTD 两端的电压、则会得到0V 的电压、因为两端没有电流。

    您可以执行多项操作来调试电路。 您可以尝试从不同的位置进行 ADC 测量。 测量 AIN0至 AIN1或 AIN2至 AIN3、以查看它们是否仍处于连接状态。 您还可以将 IDAC 电流重新路由至不同引脚、以查看来自 IDAC1的电流是否从其他位置流出。 使用电压表或欧姆计检查电路肯定会有所帮助。

    无论如何、您能否发布您的电路和前端的特写图片 我可能会看到您可以检查的内容。

    吴约瑟

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


    我刚才注意到的一件事是电源的电感滤波器。 这是连接到 AVDD 的 FBMH1608HL601-T。 我认为您应该删除此内容并将其替换为简短内容。 由于 ADC 具有数字电流(以及模拟电源的其他开关电流)、因此浪涌电流可能很大。 由于 L (di/dt)、这将导致较大的纹波电压。 在这种情况下、由于滤波器具有600Ω Ω 串联电阻、这也很复杂。

    该电感可能会导致器件复位。 当首次为其加电并启用基准时、浪涌电流可能很大。 这可能会导致上电复位、因为电源电压可能会下降到低于允许的电源电压。

    无论如何、我会移除电感器并使引线短路。


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


    我有一段时间没有听到您的声音、我想知道您是否检查了您的电路并根据我之前的两篇文章进行了调整。 我认为模拟电源线中的电感是一个潜在的问题。

    如果您已经解决了您的问题、很好。 如果没有、请发帖、我们可以进一步讨论您的电路。 无论如何、我将关闭此帖子。 如果您有更多问题、您应该能够发布回此主题。


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

    非常感谢您的帮助。
    我没有检查电阻(120欧姆)引脚连接、这是我的缺点。 它是焊接错误。 之后、我将获得输出。
    很抱歉出现问题。

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

    Sushma、


    我很高兴您能够使电路正常工作。 根据您的数据、我认为电路板上的连接可能有问题。 数据似乎表明、存在输入完全断开的间歇点、输入工作但缺少第一个 IDAC 电流、以及电路板似乎工作的情况。 所有这些都指向电路板连接中的一些问题。

    如果您有任何其他问题、请随时将问题发布回论坛。


    吴约瑟