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.

[参考译文] ADS7952:无法从 SPI 通信中读取 ADC 通道值

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1134130/ads7952-cannot-read-adc-channel-values-from-spi-comms

器件型号:ADS7952

我使用 SPI 通信(3.3V IO)将 ADS7952连接到 PIC32MZ、所有12个通道都连接到电流监控器电压输出(0-5V)。 作为参考、+VA = 5VDC;+VBD = 3.3VDC;Vref = 2.5VDC;MXO 连接到 AINP;我们使用范围2设置(2xVrev)。 我尝试将其设置为手动和自动模式以输出12个通道值、但 ADS7952的所有回复都是0x1BFF。 第一个字节应该是一个递增的通道编号、但它看起来没有变化。 我尝试为特定通道发送手动请求、但下一个帧仍为0x1BFF。 我是否缺少可修复来自 ADC 的消息的内容?

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

    尊敬的 Julian:

    欢迎来到我们的论坛!

    我想谈谈几个问题。 第一个是 SDO 和 SDI 标签。 从 MCU 的角度来看、这是正确的吗? 我只想确定、因为 MOSI/ MISO 标签看起来正确对齐。  

    第二、您要发送的第一个命令是0x1000。 这 会将器件置于手动模式、但不允许您对 DI06-DI00进行编程。 然后、您将立即发送0x0FFF。 这将继续器件运行。 我在这里的问题是、您是要先发送0x1000、还是要发送0x8000来访问自动1模式通道定序?  

    此外、您是否在串行解码窗口顶部显示的0x1000之前进行过任何设置?

    此致、
    Aaron

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

    您好!

    SDO/SDI 从 MCU 的角度来看。 我之前尝试过手动模式、似乎忘记了将第一个数据包更改为0x8000。 该映像是启动后的第一对数据包、在0x1000之前没有写入。  

    我将更改代码并尽快回复结果。

    Julian V  

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

    尊敬的 Julian:

    这是我怀疑的。 感谢您的澄清! 我将等待您的测试结果。  

    此致、
    Aaron

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

    我已将代码更正为输出0x8040作为第一条命令、并且我看到响应的结果相同。 我还在数据表中注意到引脚2 (GPIO3)是一个低电平有效的断电引脚、因此我在实际情况下将其拉至高电平(3.3V)。 这没有改变响应。

    您建议从 ADC 获取预期数据的方法是什么?

    谢谢、

    Julian V

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

    尊敬的 Julian:

    命令没有任何问题。 我继续 使用 I2C/SPI 主机适配器对 EVM 执行完整性检查。 您可以看到、SDO 数据随着 SDI 命令的发送而增加。  

    但是、我认为可能存在通信错误。 该系列器件要求有16个时钟周期、但看起来您仅发送15个时钟周期。 我仅计算15个完整周期。 您是否可以再提供一个时钟周期?

    此致、
    Aaron Estrada

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

    CS 帧内的16个下降沿和16个上升沿计数。 我正在使用 SPI 协议、因此无法轻松地在我的预期消息中添加或删除时钟周期。  

    在查看数据表的时序图后、我注意到在 CS 下降沿期间 SCLK 为低电平。 在将代码的 SPI 设置更改为启动低电平并在下降 SlCK (SCLK 上升时采样)上转换后、我收到了一个计数应答。

    此时、似乎回复正确、但 ADC 报告的值不正确... 我在每个通道上有0.5V 电压、并且 ADC 在大多数时间(0x9BF 到0xAFF 之间)以0xABF 的值进行答复。 根据该值、ADC 报告的电压为3.35V。 请注意、在下图中、我捕获了前8个通道、并将第3个通道(CH2)拉至 GND、但 ADC 报告的电压为0.116V。

    谢谢、

    Julian V

      

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

    其他注意事项:我使用较短的 GND 线对输入通道短路、得到0x01F (0.038V)。 这可以确认我获得数据并将输入接地、输入接近0V、但 ADC 似乎与我的测量值不匹配、高于0V。

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

    尊敬的 Julian:

    很好、您现在可以正常通信。 虽然有16个下降沿、但它并未计算初始下降沿、因为就 ADC 而言、第一个 SCLK 周期从第一个上升沿开始。  

    现在、将注意力转移到输出代码。 我有几个问题:

    • 您是否有要分享的原理图? 我想看看是什么驱动输入以及 ADC 周围的电路。
    • 您是否验证了器件 AINP 引脚处的电压作为完整性检查?
    • 使用器件时、电源电平是否稳定?

    此致、
    Aaron Estrada

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

    我意外点击了"这解决了我的问题"、而不是回复... 您可以撤消该操作吗?

    我创建了红线版原理图来共享、但它是根据数据表中的非缓冲示例构建的

    以下是在 MXO/AINP 上使用示波器探头显示 CH2的手动模式的截图。 电压与预期的一样~0.5V。 线路上有一些噪声、但它并未解释0xABF 返回值(即使参考 x 2未处于活动状态、它应该处于活动状态)。

    5V、3.3V 和2.5Vref 电压轨都是稳定的、且 Vp-p 小于0.05V

    谢谢、

    Julian V

      

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

    尊敬的 Julian:

    我无法撤消"TI 认为已解决"状态、但该线程保持打开状态、因此正常。  

    这实在令人困惑。 对于 SAR 转换器、通常会由于不正确驱动 ADC 而出现电压误差问题。 但是、我不会期望误差这么大。 原理图看起来不错、您直接在 AINP 处测量、看起来不错。 我还有几个我应该在前面问的问题:

    • 您的 SCLK 频率是多少?
    • 从 CS 下降沿到第一个 SCLK 上升沿的时间是多少?
    • 您的帧长度看起来很长、但没关系。 当您执行多次读取/写入时、帧长度是多少?
    • 您能否测量 TH2时间(保持时间- SCLK 到 SDI 有效的上升沿)?

    此致、
    Aaron Estrada

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

    SCLK = 500kHz

    海啸1 (CS 降至第一个 SCLK)= 3.73us

    CS 帧长度为35.5us、用于在 MOSI 上发送16位消息、同时在 MISO 上接收16位消息。 我们每~1ms 发送一个帧。

    TH2 = 1us (SCLK 下降时的数据变化、具有 SCLK 周期)

    我尝试将 SCLK 频率更改为100kHz、但响应没有变化。 今天、我计划连接一个电位计、以便使用可变的5V 电源同时进行测量。  

    谢谢、

    Julian V  

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

    尊敬的 Julian:

    感谢您提供详细信息。 SCLK 应该足够快。 我知道 、使用较慢的 SCLK (<100kHz)可能会有一些采样保持电容器泄漏、但您应该可以这样做、我也认为这不会导致您看到的行为。 如果可以的话、还有另外两个需要注意 的问题是将 SCLK 实际增加到1MHz、还需要检查 ADC 读数是否随输入电压的增加/减少而变化。 因此 POT 应该有助于实现这一点。  

    此致、
    Aaron  

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

    您好、Aaron、

    我尝试将 SCLK 增加到1MHz、但没有改变。 POT (从5V 到 GND 的3.3k 修整)已连接、我发现~0.80V 会导致 ADC 返回0xFFF (~0.4V 为0x7FF)。  

    我仔细检查了我的 Vref、它是2.505V +/- 0.010V。 我不知道 ADC 在0.8V 时是如何实现最大输出的...  

    当我键入此内容时、我发现当我在代码中应用断点时、返回值会发生变化。 我在样本之间等待的时间越长、测量的精度就越高。 但是、单个通道显示精确值需要15-20秒。 这是因为 MXO 和 AINP 之间没有缓冲器吗?  

    谢谢、

    Julian V

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

    尊敬的 Julian:

    增加的等待时间确实指向稳定问题、但15-20秒似乎太长。 驱动多路复用器本身可能存在问题。 其他一些测试和其他问题:

    • 您是否能够在霍尔传感器仍处于连接状态的情况下修改 MXO 和 AINP 之间的布线并向 GND 添加100欧姆串联电阻器和~600pF 电容器? 如果是、这是否有帮助?
    • 您能否尝试完全绕过 MUX 并将霍尔传感器的输出连接到 AINP 引脚?
    • 对于 POT 测试、霍尔传感器的输出是否仍然连接、还是仅通过分压器进行纯直流测量?
    • 您说 ADC 输出更准确。 长时间等待后的输出代码是什么?
    • 什么是为基准供电? 您测量了它、但该空闲状态还是尝试采样/转换? 如果空闲、您能否在尝试采集样本时监控基准电压? ADC 提前饱和还会指向基准的问题、因此我只想确定。  

    此致、
    Aaron Estrada

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

    您好、Aaron、

    我正在进行一周的动力输出(PTO)工作、但还没有尝试过这些建议。 我会研究所有这些建议,并在我回来时作出回应。  

    POT 测试是通过分压器进行的纯直流测试。 至于基准、最后一个示波器图像的蓝色波形为2.5Vref、并且正在进行实时采样。

    谢谢、

    Julian V

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

    尊敬的 Julian:

    不用担心。 返回后、请随时回复此主题。  

    此致、
    Aaron Estrada