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.

[参考译文] ADS1259:ADC 转换返回重复的值。

Guru**** 2390965 points
Other Parts Discussed in Thread: ADS1259

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1458147/ads1259-adc-conversions-returning-duplicate-values

器件型号:ADS1259

工具与软件:

您好!

我们使用 ADS1259为我们的应用提供精确的 ADC 测量。 ADC 信号用于测量电路的电压稳定情况。 简而言之、我们向芯片发送启动命令、检查转换完成标志(寄存器2 = 0x10)、然后读出该值、我们等待250ms 并重复测量。 一旦差异处于容差范围内、我们就会认为电路稳定、并将其用于我们的测量。

我们已在几个月的原型上使用这种芯片、但在交付一些样片后、我们遇到了 ADC 测量偶尔会连续几次返回完全相同的值的问题。 这将导致我们认为测量是稳定的、因此检查将失败。 将示波器连接到该信号可以清楚地看到、信号仍然在稳定、因此对于完全相同的值没有意义、尤其是因为这是24位 ADC。

似乎芯片未执行测量而返回了之前的测量结果? 这是已知的吗?或者我们是否错误地使用了芯片?

感谢您的帮助!

我们的寄存器配置:

#define ADS1259_REG_0_VALUE (0x05U)//已启用 SPI 超时
#define ADS1259_REG_1_value (0x50U)//启用校验和、sinc2滤波器、禁用外部基准
#define ADS1259_REG_2_value                                     \
  (0x10U)// 10SPS (每秒采样数)(33.7ms 稳定时间)、脉冲控制模式
#define ADS1259_REG_3_VALUE            (0U)  //默认值
#define ADS1259_REG_4_VALUE            (0U)  //默认值
#define ADS1259_REG_5_value            (0U)  //默认值
#define ADS1259_REG_6_value            (0U)  //默认值
#define ADS1259_REG_7_value            (0U)  //默认值
#define ADS1259_REG_8_value            (0x40U)//默认值

我们的转换序列:

1.发送启动命令(0x08)

2.通过读取寄存器2直至其等于0x10来检查转换是否每50ms 完成一次

3.读取寄存器2约4倍后、它等于0x10

4.读取数据(0x12)

5.检查数据的校验和并存储完整的24位结果。

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

    尊敬的 Michael Kruger:

    造成这一问题的原因尚不清楚。 您是否可以使用逻辑分析仪探测 ADC 输出、以确保从 ADC 获取的数据实际上与前一个结果相同? 一般来说、您可以向我们发送逻辑分析仪图来展示发生此问题前后的通信、这会有所帮助。

    -Bryan

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

    尊敬的 Bryan:

    感谢您的答复。 我将尝试捕获一些轨迹、但这需要我花一些时间进行安排。 我会在拥有这些时发布它们。

    再次感谢您的帮助。

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

    尊敬的 Michael Kruger:

    已理解、请在您有更多信息时回复此帖子

    -Bryan

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

    尊敬的 Bryan:

    对于延迟、我们深表歉意。 我们成功捕获了初始化和测量序列的 SPI 跟踪。 我在下面添加了一些注释。 迹线显示 ADC 连续两次为测量返回相同的值、尽管这是在不稳定信号上、我们预计在稳定之前会有所不同。

    我还上传了 Sigrok/Pulseview 文件(扩展名从.sr 更改为.txt、以便能够在此论坛上载它、因此只需将其改回): e2e.ti.com/.../ADS1259-Initialization-and-Measurements.txt 您可以使用 https://sigrok.org/wiki/PulseView 打开它。

    SPI 传输发送停止命令:
    发送:0x11
    接收:0x00

    SPI 传输初始化寄存器:
    发送:0x40 0x08 0x05 0x50 0x10 0x00 0x00 0x00 0x00 0x40
    接收:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

    SPI 传输回读寄存器:
    发送:0x20 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    接收:0x00 0x00 0x25 0x50 0x10 0x00 0x00 0x00 0x00 0x00 0x40

    启动命令:
    发送:0x08
    接收:0x00

    检查转换已完成:
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x10 0x00

    读取数据:
    发送:0x12 0x00 0x00 0x00 0x00
    接收:0x00 0x3F 0xC7 0xA3 0x44

    启动命令:
    发送:0x08
    接收:0x3F

    检查转换已完成
    发送:0x22 0x00 0x00 0x00
    接收:0xC7 0xA3 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x10 0x00

    读取数据
    发送:0x12 0x00 0x00 0x00 0x00
    接收:0x00 0x3F 0xC7 0xA3 0x44

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

    尊敬的 Michael Kruger:

    很遗憾、由于公司限制、我无法下载 Sigrok 图表查看器

    您能将图表作为图片发送给我吗?  我很感激您能尽可能描述您展示的内容、因为我无法放大或做任何类似的事情

    -Bryan

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

    尊敬的 Bryan:

    我试图在下面的图片中尽可能描述:

    格式化会混乱、但顺序如下:

    第一次测量

    检查数据就绪状态(每50ms 读取一次)

    最后检查并检索数据

    第二次测量开始

    检查数据就绪的状态

    最后检查并检索数据

    您可以看到、ADC 会为两次测量返回相同的值。

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/first_5F00_measurement_5F00_command.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/first_5F00_measurement_5F00_read_5F00_busy_5F00_first.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/first_5F00_measurement_5F00_read_5F00_busy_5F00_second.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/first_5F00_measurement_5F00_read_5F00_ready_5F00_and_5F00_get_5F00_measurement.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/second_5F00_measurement_5F00_command.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/second_5F00_measurement_5F00_read_5F00_busy_5F00_first.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/second_5F00_measurement_5F00_read_5F00_busy_5F00_second.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/second_5F00_measurement_5F00_read_5F00_busy_5F00_third.png

    /resized-image/__size/320x240/__key/communityserver-discussions-components-files/73/second_5F00_measurement_5F00_read_5F00_ready_5F00_and_5F00_get_5F00_measurement.png

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

    尊敬的 Michael Kruger:

    不幸的是,我仍然无法真正看到图像。 当我单击链接时、图像非常小、这对于解释逻辑分析仪图而言并不理想

    您可以将图像直接粘贴到帖子中(这通常允许我们单击图像、使其看起来更大)、还是将图像粘贴到 Excel / Word / PPT 等文件中以便我们可以处理图像?

    -Bryan

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

    也许这些更具可读性?

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

    尊敬的 Michael Kruger:

    谢谢、这里最终成功了。

    为了澄清、在所有图像中、蓝色/紫色信号为 DIN (传输至 ADC)、黄色/绿色信号为 DOUT (来自 ADC)、正确吗?

    如果我从左到右、从上到下读取所有图像、这就是我看到的结果。 请说明我提出的任何意见:

    • 发送启动命令
    • CONFIG2的 RREG、DRDY 为高电平、内部 CLK、SYNCOUT 禁用、脉冲控制模式
    • 针对 CONFIG2的 RREG、DRDY 为低电平、 内部 CLK、SYNCOUT 被禁用、脉冲控制模式
    • ?? 无有效命令0x32 - 是否确定在正确的 SCLK 边缘启动/采集数据? DIN 在 SCLK 下降沿被锁存到 ADC
    • CONFIG2的 RREG、DRDY 为低电平、 内部 CLK、SYNCOUT 禁用、脉冲控制模式--> RDATA 命令、DATA = 0x3FE77F、校验和= 0x20
    • 等待>3ms、然后发出另一个启动命令
    • RREG 用于 CONFIG2、DRDY 为高电平、外部 CLK、SYNCOUT 禁用、栅极控制模式--> 为什么时钟现在是外部的、并且您处于栅极控制模式?
    • CONFIG2的 RREG、DRDY 为高电平、内部 CLK、SYNCOUT 禁用、脉冲控制模式
    • RREG 用于 CONFIG2、DRDY 为高电平、 外部  CLK、SYNCOUT 禁用、脉冲控制模式 -->  为什么时钟又是外部时钟?
    • CONFIG2的 RREG、DRDY 为低电平、 内部 CLK、SYNCOUT 禁用、脉冲控制模式 --> RDATA 命令、DATA = 0x3FE77F、校验和= 0x20

    它似乎有一些混乱的东西在你的通信,因为设置似乎在变化,而你实际上做任何事情(除非你正在执行额外的行动,只是不捕获它们在这里)。 此外、我为 0x3FE77F 计算出的校验和为0x40、而不是0x20

    请确保您的控制器正在相应的 SCLK 边沿将数据发送到 DIN、并且您的分析仪正在相应的 SCLK 边沿上从 DOUT 采集数据

    -Bryan

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

    尊敬的 Bryan:

    是的、遗憾的是、我看到逻辑分析仪在正确捕获迹线时出现问题。 因此、我认为设置完全不会发生变化。 我将尝试重新捕获它。

    在微控制器对原始消息进行解释时、原始消息是通过 SPI 发送和接收的通信:

    SPI 传输发送停止命令:
    发送:0x11
    接收:0x00

    SPI 传输初始化寄存器:
    发送:0x40 0x08 0x05 0x50 0x10 0x00 0x00 0x00 0x00 0x40
    接收:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

    SPI 传输回读寄存器:
    发送:0x20 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    接收:0x00 0x00 0x25 0x50 0x10 0x00 0x00 0x00 0x00 0x00 0x40

    启动命令:
    发送:0x08
    接收:0x00

    检查转换已完成:
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x10 0x00

    读取数据:
    发送:0x12 0x00 0x00 0x00 0x00
    接收:0x00 0x3F 0xC7 0xA3 0x44

    启动命令:
    发送:0x08
    接收:0x3F

    检查转换已完成
    发送:0x22 0x00 0x00 0x00
    接收:0xC7 0xA3 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x90 0x00
    发送:0x22 0x00 0x00 0x00
    接收:0x00 0x00 0x10 0x00

    读取数据
    发送:0x12 0x00 0x00 0x00 0x00
    接收:0x00 0x3F 0xC7 0xA3 0x44

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

    尊敬的 Michael Kruger:

    感谢您的澄清

    ADC 读回相同数据的原因不明确、除非转换实际上并未重新启动(尽管这与 DRDY 行为不一致)

    • 您能否探测 DRDY 引脚以查看此引脚是否遵循与 CONFIG2中 DRDY 位相同的行为?
    • 您能否尝试使用 START 引脚而不是 START 命令控制转换、以查看这是否会改变行为?
    • 您使用的 SCLK 和 CLK 速度是多少?
    • 我假设 START 连接至低电平、并且 RESET/PWDN 被拉至高电平?
    • 复制的新数据之后是否需要下一次读取? 您说这可能会"连续出现几次"、那么这是否意味着您可以多读取一次相同的值? 您能否更明确地说明每读操作重复的频率(是否仅重复某些读取操作?) 这里有多少重复的数据?
    • 您能否在终端上重现此问题? 您似乎已经 从有此问题的字段中恢复了系统、但您是否很幸运地在实验室中将其复制到已知良好的系统上?
    • 这一问题是随机发生的、还是有什么明显的模式?

    该问题的另一种解决方案是在此稳定期间忽略相同的数据点、即只要差值= 0、就会出现问题

    -Bryan

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

    尊敬的 Bryan:

    再次感谢您的答复和建议。

    • 您能否探测 DRDY 引脚以查看此引脚是否遵循与 CONFIG2中 DRDY 位相同的行为?
      • 我会尝试对此进行探讨。
    • 您能否尝试使用 START 引脚而不是 START 命令控制转换、以查看这是否会改变行为?
      • 遗憾的是、我们在 MCU 和该引脚之间没有连接。
    • 您使用的 SCLK 和 CLK 速度是多少?
      • 我们使用的 SPI 时钟速度为200kHz
    • 我假设 START 连接至低电平、并且 RESET/PWDN 被拉至高电平?
      • 是的。
    • 复制的新数据之后是否需要下一次读取? 您说这可能会"连续出现几次"、那么这是否意味着您可以多读取一次相同的值? 您能否更明确地说明每读操作重复的频率(是否仅重复某些读取操作?) 这里有多少重复的数据?
      • 并非总是如此、有时我们会连续多次获得相同的值。 我不能更明确,因为它真的是随机的。
    • 您能否在终端上重现此问题? 您似乎已经 从有此问题的字段中恢复了系统、但您是否很幸运地在实验室中将其复制到已知良好的系统上?
      • 我们已经能够再现它,但它是非常零星的。
    • 这一问题是随机发生的、还是有什么明显的模式?
      • 也就是随机值。

    我们的解决方案确实是忽略相同的数据点并重新开始测量。 这确实会延迟我们的启动序列、但我们应用了其他优化、因此这对我们来说不再是大问题。 现在、我们将停止该问题。 我现在就解决它。

    再次感谢您的帮助。