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.

[参考译文] ADS1256:Ads1256:寄存器不更新

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/859187/ads1256-ads1256-registers-not-updating

器件型号:

尊敬的 Hall:

Christopher Hall (1528318)我的 ADC 工作正常、但我在寄存器中写入时遇到问题、但仍然能够获取转换后的数据。 请查看我之前的评论。 我有3个问题要解决。 请帮我处理同样的问题。 波形图 ADC

问题1:我在 STATUS、ADCON、DRATE 寄存器中写入的值与我在同一寄存器中100ms 后读取的值不匹配。

  但是、我在 MUX 寄存器中写入的值是匹配的、并且我通过动态变化对其进行了验证。 请帮我解决问题。

问题2: DRate 值默认为0xF0 (因为 DRate 值在我写它时不更新)、即30ksps、我已使用示波器中的 drdy 信号验证了该值。

  问题是、当我以频率为1Hz 的正弦信号(时间周期= 1sec)的形式给出输入时、我在一秒内仅获得2.8k 样本

  我的假设是、如果我设置为30ksps、那么对于时间周期为1sec 的正弦波、应该得到30k 样本、但当我读取样本时、我只得到2.8k 样本。 我已经设置了 SPI 时钟频率       2MHz。 如果我错了、请纠正我的问题。

  我应该怎么做才能获得至少10k 个样本?  

问题3: 如何使用 RDATAC 命令? 如果可能、请共享涉及 rdataac 命令的代码片段。 我应该立即检查延迟信号、还是自动更新?

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

    你好、Gokul、

    请参阅下面的我的回答。

    此致、

    Bob B

    [引用用户="Gokul Balasubramanian"]

    器件型号: ADS1256

    尊敬的 Hall:

    Christopher Hall (1528318)我的 ADC 工作正常、但我在寄存器中写入时遇到问题、但仍然能够获取转换后的数据。 请查看我之前的评论。 我有3个问题要解决。 请帮我处理同样的问题。 波形图 ADC

    问题1:我在 STATUS、ADCON、DRATE 寄存器中写入的值与我在同一寄存器中100ms 后读取的值不匹配。

      但是、我在 MUX 寄存器中写入的值是匹配的、并且我通过动态变化对其进行了验证。 请帮我解决问题。 [Bob B]请在中向我们提供详细信息、了解您正在编写的内容、正在读取的内容以及与之相关的4通道示波器或逻辑分析仪数据(CS、MISO、MOSI SCLK)。  如果单个 MUX 寄存器似乎正常工作、那么在设置和读回状态、adcon 和 drate 寄存器时、您会采取哪些不同的做法?  您是否以组的形式写入这些寄存器?  还是单独写入这些寄存器?  我们确实需要看到沟通能够提供任何进一步的帮助。

    问题2: DRate 值默认为0xF0 (因为 DRate 值在我写它时不更新)、即30ksps、我已使用示波器中的 drdy 信号验证了该值。

      问题是、当我以频率为1Hz 的正弦信号(时间周期= 1sec)的形式给出输入时、我在一秒内仅获得2.8k 样本

      我的假设是、如果我设置为30ksps、那么对于时间周期为1sec 的正弦波、应该得到30k 样本、但当我读取样本时、我只得到2.8k 样本。 我已经设置了 SPI 时钟频率       2MHz。 如果我错了、请纠正我的问题。

      我应该怎么做才能获得至少10k 个样本? [Bob B]在这里、再次查看您是否能够通过在逻辑分析仪输出示波器中显示 DRDY 信号和通信来捕获每个样本会有所帮助。  您捕获的频率取决于您的微控制器正在执行的其他操作。  如果您使用轮询循环、则很可能会丢弃数据。  最好将 DRDY 用作中断、以便捕获每次转换。

    问题3: 如何使用 RDATAC 命令? 如果可能、请共享涉及 rdataac 命令的代码片段。 我应该立即检查延迟信号、还是自动更新?  [Bob B] RDATAC 命令只需将转换数据放在输出总线上。  您仍需要发送具有虚拟传输数据的 SCLK 来捕获结果。  您仍需要监控 DRDY、以了解新转换数据何时可用。  RDATAC 的好处是无需发出 RDATA 命令(24位传输、而不是32位传输)。  但是、如果更新发生在前一次转换的读取过程中、则可以接收损坏的数据。  因此、在使用 RDATAC 之前、您需要考虑问题2。  

    [/报价]

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

    尊敬的 Bob:

    我正在使用(STM32F302R8 MCU 和 Waveshare ADC)进行连接。 原理图:https://www.waveshare.com/w/upload/2/29/High-Precision-AD-DA-board.pdf

    我将使用 wreg 命令来单独写入4个寄存器、然后将0x00作为第二个命令字节。 下面是我写的内容和接收的返回内容的表。 请核实。 我还连接了 SCLK MOSI 和 DRDY 信号以供您参考。 有关我的代码和其他规格的更多详细信息、请访问此链接。  http://e2e.ti.com/support/data-converters/f/73/p/855591/3177628#3177628 请阅读我之前的评论,以准确了解我的情况。 感谢您的快速回复。 我将设置2MHz 时钟。

    寄存器 写入值(十六进制) 500ms 后读取值(十六进制)
    状态 0x06 0x30
    Adcon 0x20 0x20
    速率 0x82 0xF0

    请注意:我的多路复用器寄存器正在更新、其他寄存器不会更新。 即使我使用另一个值、也将 ADCON 值常量设置为0x20。

    我正在使用轮询方法、但是当我设置为30k 个样本时、2800个样本会非常少。 请提出 一些改进 MCU 端数据收集的想法。

    问题1:如何验证 ADC 是否以30ksps 转换?   

    问题2:是否可以在信号的单个时间周期区域(连续)内读取10k 个样本? 如果是、请详细说明。

    问题3:是否可以从 ADC 输出确定信号频率(不使用 FFT)?

    请也解决寄存器问题。

    您能不能分享您的 RDATAC 代码片段。 很抱歉发帖太长了!

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

    你好、Gokul、

    遗憾的是、在查看4通道通信时、2通道示波器不是很有价值。  您是否可以或能否访问至少4通道示波器、以便我可以看到您对寄存器的通信写入和读取?  我们需要验证您是否没有代码问题、因此我们验证 ADS1256响应的唯一方法是查看实际通信。

    您显示的第一张图片似乎是对 MUX 寄存器的寄存器写入、其中 AIN0用于 AINp、AINCOM 用于 AINn。  由于这是您所说的正常通信、我不确定您发送此通信的原因是什么、而不是发送不起作用的通信。  不过、您说 SCLK 频率为2MHz。  根据示波器图、水平时基为每分段25us。  在每个分频之间、有少于3个时钟周期。  如果我们假设在25us 时间内有3个 SCLK 周期、则 SCLK 频率实际上为120kHz。  如果我们假设没有代码延迟、您可以捕获的最佳样本数为5ksps。  那么、这里是您的捕获问题的答案之一。

    问题1的答案见图2。  要确定输出速率、您需要测量2个 DRDY 脉冲之间的时间。  示波器增量显示为30kHz、这将是30ksps 的输出数据速率。

    问题2的答案是肯定的、但可能与您使用的系统或设置不符。  这不是 ADS1256的问题、而是您使用的系统的问题。  我不确定我们可以提供多大的进一步帮助、因为这是代码/系统问题。

    对于问题3、是的、可以通过连续捕获数据点(不缺少任何转换)并在时域中绘图来确定频率。  然后、您可以确定从一个周期开始到下一个周期开始的转换数。  频率为1/(样本数*一次转换的周期)。  您还需要考虑奈奎斯特定理以确定可确定的最大频率。

    对于寄存器读取、您必须确保遵循数据表第6页图1所示的 SPI 时序图的 T6时序要求。  如果发送命令、则必须允许其在发出任何其他 SCLK 之前解码和设置 DOUT。  RREG 命令是需要此延迟的命令之一。

    您的最后一个问题是有关 RDATAC 的问题。  RDATAC 是一个命令、作为一个字节进行传输。  我相信您真正需要的是在发出 RDATAC 命令后从器件读取数据的代码。  这是一个 SPI 函数调用、在使用 ST micro 时、TI 器件的代码片段实际上不会有所帮助。  当 DRDY 从高电平状态转换为低电平时、用法如下:

    • 将 CS 设置为低电平
    • 通过向 TX 缓冲器写入3个字节来发送24个 SCLK
    • 从 RX 缓冲区捕获数据
    • 将 CS 设置为高电平

    您必须在下一次 DRDY 转换之前完成整个通信、否则您将收到损坏的数据。  由于您已经遇到了时序问题、使用 RDATAC 只会使情况更糟、因此我强烈建议您在保证通信时序之前不要使用 RDATAC。

    此致、

    Bob B

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

    尊敬的 Bob:

      首先,我非常感谢你的迅速答复。 不幸的是、我没有一个能够捕获4个通道的示波器。 SCLK 映像可能是旧映像。 我已经验证了时钟、它大约是2.2MHz。 我已经尝试在 ADCON 和 DRATE 传输期间捕获 MOSI 和时钟信号。 我还给出了 T6延时时间、实际上比 T6本身略长。  

    我今天发现了另一个有趣的事实(即、在写入 STATUS、ADCON 和 DRate 寄存器值之前、我发现周期 DRDY 信号的突发频率为30kHz、我已附加该信号供您参考。 您能解释一下这种情况吗?

    关于频率计算、感谢您的帮助。 但问题是、在大多数情况下、我丢失了转换数据(例如、e)、而在大多数情况下、我没有 样本数量不正确。 如果不是、我的转换周期是1/ drate、请纠正我。

    算法以查找样本数:我将一个随机采样值转换为伏特、并向 其添加了±0.001v 的偏移量、并通过检查 if 语句中的条件来递增计数值。 if (sample > sample - 0.001 && sample < sample - 0.001)。  我的算法是否正常?  e2e.ti.com/.../WAVEFORMS.rar

    我将分享我的测试结果:我已在 ain0中连接1Hz 信号,并将 mux 设置为0x0F,同时 aincom = grnd。

    大多数情况下、我的样本数为2500至2900、频率约为10Hz

    我已经用我所有知道的方法校准了我的系统。 (一.e)

    MCU 时钟速度= 72MHz、

    SPI 时钟速度= 2.2MHz

    使用 DRDY 作为中断。

    使用 RDATAC  

    有关代码延迟、请查看我之前提到的 ADS1256:ADS1256线程中的评论。

    问题1:为了避免在频率计算过程中错过转换数据、我还可以做些什么来进行优化?

    问题2:即使在开始转换(SYNC 和 waveup 命令)之前、我也会发现 DRDY 处于低电平(在上面的 waveforms.rar 文件中共享突发信号)。 这是可能的吗?

    对这篇长文章再次表示抱歉!

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

    你好、Gokul、

    您尝试一次执行的操作过多、由于您没有适当的故障排除工具、因此您应该一次只查看一个问题。  让我们首先简单地读取和写入寄存器。  向我发送写入1个寄存器然后读回的示波器截图。  由于您只有2通道示波器、因此您必须重复测试两次。  显示了 SCLK 和 MOSI、第二个显示了 SCLK 和 MISO。  我将尝试解释图表以查看通信是否按预期工作。  这对我来说是很困难的,但我会尝试一下。  之前的 SCLK 频率太慢、因此我们还需要验证这一点。

    此致、

    Bob B