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.

[参考译文] ADS7038:读取模拟输入时出现故障

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1036786/ads7038-trouble-reading-the-analog-inputs

器件型号:ADS7038

您好!

我刚刚开始使用 ADS7038。 我目前正在尝试使用手动模式读取全部8个输入、但芯片看起来只是从模拟0发送相同的值、而不会提前读取任何其他模拟点。

我将通过 SPI 端口与 ADS7038进行通信、我确信该接口能够正常工作、因为我可以向寄存器写入数据并成功读回该寄存器。

对于手动模式测试、看起来 ADS7038数据表第23页的所有初始设置(CONV_MODE=00、SEQ_MODE=00、PIN_CFG=0)都是它们的默认值、因此我没有更改任何初始值。 然后、我给 ADS7038提供了这3条命令、以查看是否可以读取前3个模拟输入(写入 CHANNEL SEL 寄存器、地址= 0x11):

08、11、01;将 MANUAL_Chid 设置为1以进行下一次读取

08、11、02;将 MANUAL_Chid 设置为2以进行下一次读取

08、11、03;将 MANUAL_Chid 设置为3以进行下一次读取

在每种情况下、当我查看接收到的数据时、它看起来就像我在上面提到的那样一直读取模拟0。

有人能不能告诉我、我做了些什么、我可以做些什么来解决这个问题?

感谢您的回答。

Brad McMillan

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

    您好!  

    请提供数字通信的示波器截图、包括 CS、SDI、SDO 和 SCLK。 请包含3个 SPI 帧

    此致

    Cynthia

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

    您好、Cynthia、

    这里是 CS、SCLK、SDI 和 SDO 的底部到顶部。  希望分辨率足够好、我只是用我的相机拍照。

    非常感谢您的帮助。

    Brad McMillan

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

    Brad、您好!  

    如果您包含三个连续帧、则此命令的数据将在两个帧之后才显示。 如果这些图像位于三个不同的图像中、则没关系

    此外、该图像在时序方面也不是很清楚。 是满足 t_SU_CSCK 时序、这是从 CS 下降沿到第一个 SCLK 捕捉沿的时间、在这种情况下、它将是第一个上升沿。 这必须至少为3.5ns。  

    为了进行调试、我还建议在每个输入通道上使用不同的已知直流输入。 这将使您能够轻松地了解预期的内容以及与预期内容对应的数据。 IE CH0=GND、CH1=1V

    此致

    Cynthia

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

    您好、Cynthia、

    我在 CS 和第一个 SCLK 脉冲之间添加了延迟、现在为4uS、因此应该足够:


    我 在前三个输入上施加以下电压: ch0=5V、ch1=0v 和 ch2=1V。

    然后、我发送了以下三条命令:

    08、11、01;将 MANUAL_Chid 设置为1以进行下一次读取

    08、11、02;将 MANUAL_Chid 设置为2以进行下一次读取

    08、11、03;将 MANUAL_Chid 设置为3以进行下一次读取

    如您所见、我每次都得到相同的响应;0FFF、这是 ch0上的满量程(5V)值。  芯片永远不会前进 到读取下一个通道。

    再次感谢您的回答。、

    Brad McMillan

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

    这是相当奇怪的。

    您是否可以尝试执行一次测试来尝试隔离源

    在执行第一个寄存器写入命令后、提供两个带有 SDI 被拉低的 CS 帧、基本上是两个空帧、我想查看 SDO 数据是否会被推出。  

    2.如果您使用器件的 FIX_PAT 功能、则寄存器 DATA_CFG (地址= 0x2)可以选择将固定模式设置为 SDO 数据而不是测量数据。 其中包括这一信息是为了帮助解决通信问题。 设置该值后、ADC 将输出固定数据模式作为 ADC 输出数据。 数据表第31页包含寄存器内容信息。

     器件的引脚8 µF 连接到 GND 的1 μ F 去耦电容器吗?

    此致

    Cynthia

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

    您好、Cynthia、

    我执行了测试、但运气不好。  我尝试将答案整合在一起、以便图片非常小。  我希望它们仍可供您阅读。

    以下是 SDI 在第一次写入命令后拉低时的结果:

    它具有与之前相同的结果、每个帧都具有0FFF。

    然后我尝试在 DATA_CFG 中设置 FIX_PAT 位、但我没有得到预期的模式:

      

    然后、我在设置该位后尝试读取 DATA_CFG 寄存器、但该位甚至不起作用:

    响应为0xFF、不是预期的0x80。

    布局如下:

    AVDD、DECAP 和 DVDD 有3个1uF 旁路电容器。

    当我认为我成功写入寄存器时、我可能会错了。  我在数据表中看到有4种不同的 SPI 协议。  我尚未执行任何操作来设置 SPI 协议。  您认为这可能是问题吗?  我将使用 Zilog eZ80F91处理器与 ADS7038进行通信、我将通过光电隔离器进行通信。

    再次感谢您的帮助。

    Brad

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

    Brad、您好!

    我认为您可能已经确定了根本原因。

    ADS7038数据表中的默认时钟方案(SPI-00)在图8-9中显示、SDO 可在 SCLK 的上升沿进行采样。 我不熟悉 Zilog、但 Zilog 寄存器 SPI_CTL 中的默认值(CPOL = 0、CPHA = 1)意味着您的 UC 在下降沿根据手册中的表111采样 SDO。

    因此、解决方案似乎是在启动时复位 uC 中寄存器 SPI_CTL 中的 CPHA 位、以便采样边沿上升、 SCLK 空闲为低电平。 但是、这会使您面临 SS 在字节之间变为高电平的问题、同样根据表111。 遗憾的是、您似乎永远无法使用24位读/写寄存器命令来控制 ADS7038。 Zilog SPI 从根本上与开箱即用的 ADC 不兼容。

    然而,所有这些都不会丧失。 如果上述情况都正确、则应考虑将 SS 的引脚功能更改为标准 GPIO、并在24位 SPI 事务之前和之后手动切换。 如果无法更改 SS 的引脚功能、则将其与 ADS7038完全断开、并用其替代您可以手动切换的标准 GPIO。 SS 的手动切换是 ADS7038演示代码中用于手动转换的技术、因此从 ADS7038的角度来看、这是一种完美的声音解决方案。

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

    实际上 Brad、我看到一个类似的问题。

    手动信道选择似乎也不适用于我。 器件复位后、每个单独通道按预期工作、但如果我将通道移至另一个多路复用器输入、我只会得到高 ADC 值、其中应接近于0。

    因此、在实践中、这可能不是 Zilog 时钟问题、也可能是因为我们都有计时问题、或者我们在 ADS 编程中都做了一些错误的事情。

    如果我找到解决方案、我会报告。

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

    我修复了问题。 问题是我的 AIN 输入是浮动的。 一旦我将它们接地或连接到测试电压、我就得到了合理的结果。

    好的、通道4有点高、但结果似乎消除了 SPI 通信问题。

    我认为原因是采样保持电容器保持通道 N 的电荷。如果通道 N+1由多路复用器选择、但 N+1悬空、 SAH 电容器不会放电或充电至新值、因此 N+1通道类型从 N 继承样本

    假设您没有常见问题 Brad、您的 AIN 输入连接到什么?

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

    Cynthia 和 Kier、

    仍然不幸运。  Zilog eZ80F91被设定为 SPI-00 (CPOL=0 & CPHA=0)并且 ADS7038数据表显示这也是它的缺省值。  

    SPI-00指定在 SCLK 的上升沿读取数据。  我查看了示波器上的写入寄存器命令(0000 1000b):

    对我来说、这看起来很好;看起来"1"在第5个上升沿被拾取。  我将0x80写入地址0x02、因此我希望看到0xA5A 测试模式、但它从未出现。

    你们能看到我在这里做错了吗?

    感谢您的回答。

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

    这里有一个很好的点、即模拟输入不应保持悬空。 为了进行调试、我建议对不同通道使用不同的已知直流输入、例如 Ch0 = GND、Ch1 = 1V 等。 这有助于将预期输出与实际输出进行比较。  

    当使用固定模式时、这消除了这种可能性、因为输出现在由器件控制、而不是由模拟输入信号控制。  

    查看您共享的最新图像、时钟脉冲看起来不是很均匀、低电平时间比高电平时间短得多。  

    该器  件仅允许高 SCLK 时间和低 SCLK 时间的限制为时钟时间的45%至55%、您的时钟不希望满足此要求。  

    此致

    Cynthia

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

    Brad、您好!

    尽管 Cynthia 对于非对称时钟的观点不正确、但您的示波器图看起来并不正确。 是的、1位在正确的位置、但为什么绿色迹线在第8位之后再次上升、为什么 SCLK 在8位后停止?

    作为参考、这里是我的0x08 0x02 0x80:

    请注意、当 SDI = 0x10 (Read_REG)时、FIX_PAT 的位置不在回读数据本身中、而是在 SDO 上。

    您应该首先尝试按照 Cynthia 的建议修复时钟对称性。

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

    您好!

    它现在正在工作(是的!)。  我认为、不对称最有可能是光隔离器引起的、在较低频率下不会那么明显、因此我将其减慢了4倍、现在一切都正常了; 我可以让它生成测试模式、并且我可以读取 CH0以外的模拟输入。

    BTW Kier、SCLK 在8位后停止的原因是我只显示了第一个8位 SPI 帧、因此我可以清楚地显示 SDI 与 SCLK 之间的关系。  总共24位还有2个8位 SPI 帧、但它们未显示在示波器上。

    感谢大家的帮助。  如果没有你们的帮助,我就永远不会弄清楚问题是什么。