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.

[参考译文] ADS1243:ADS1243 -如何在连续模式下读取所有通道?

Guru**** 2448780 points
Other Parts Discussed in Thread: ADS1243, ADS1220, ADS1248

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/567927/ads1243-ads1243---how-to-read-all-channels-in-continuous-mode

部件号:ADS1243
主题中讨论的其他部件: ADS1220ADS1248

您好,

我想询问您如何以连续模式读取ADS1243的所有通道的最佳方法(在我的情况下,我想连续读取ADS1243上可用的所有4个差分通道)。

在MUX (01h)寄存器中,我可以为差分通道(ADiff0)选择正极和负极引脚。 例如,使用默认值时,Ain0作为正输入,Ain1作为负输入(所有其它寄存器都设置为默认值)。 然后,我可以使用03h SPI cmd启动RDATAC,我将获得ADiff0的ADC值。

是否可以从所有(正常/差分)信道连续发送数据?

或者,我是否必须始终使用正确的(diff)通道设置更新MUX寄存器(在不同的通道设置之间切换Adiff0 =[Ain0;Ain1];Adiff1 =[Ain2;Ain3];Adiff2 =[Ain4;Ain5];Adiff3 =[Ain6;Ain7])。 是否可以在连续模式下执行此操作?还是很无聊?我应该自行执行此操作(设置正确的MUX cfg,然后发送"normal" RDATA cmd等)
顺便提一下... 我找不到用于此ADC的Linux驱动程序。 您是否知道它是否存在?

谢谢!

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


    不能直接连续读取所有频道。 正如您所提到的,您必须为信道中的每个更改发送一系列命令并读取设备。

    基本上,这是您需要运行的顺序:
    将多路复用器设置为正确的输入
    发送DSYNC命令以重新启动数字滤波器并开始转换
    等待/DRDY指示转换已完成
    读取数据
    将mux设置为新输入并重复该序列

    在此期间,调制器可以自由运行,每次发出DSYNC命令时都会重新启动。 理想情况下,/DRDY会触发一个中断以读回数据。 如果主中继器延迟读取,并且在读取数据期间发出新的/DRDY,则当设备仍在接收SCLK时更新数据输出寄存器时,数据可能会损坏。

    很抱歉,我不知道有任何为该设备编写的驱动程序。 我进行了快速搜索,但结果是空的。


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

    您好,Joseph:

    感谢您的回复!

    我还有其他问题吗?

    如果我想读取"One shot" ADC值,我将发送RDATA命令。 我认为在收到cmd后立即开始转换, /DRDY变为HIGH (高),转换完成时/DRDY变为LOW (活动)?

    /DRDY信号是根据采样速率的频率生成的,即使我没有使用连续模式?

    谢谢,Ondrej。

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

    Ondrej,

    这有助于认为ADC正在持续转换,即使您要读取单个值也是如此。 为此,您需要将寄存器设置为所需的输入和配置,然后使用SYNC命令开始新的转换。

    转换完成后,/DRDY将变为低电平,表示转换已完成。 如果/DRDY已低,则在低电平之前,它会对4个TOC时钟进行高电平转换,以指示转换完成。

    之后,ADC将继续进行转换,即使您决定不读回数据也是如此。 这就是为什么您会继续看到/DRDY脉冲。 除非您向ADC发送sleep命令,否则它不会停止。

    吴若瑟

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

    您好,Joseph:

    我尝试设置pinmux,发送DSYNC cmd,然后立即读取转换后的数据(我没有等待/DRDY LOW,因为我想让您显示,那么/DRDY会长时间高电平...它应该是这样吗?)。

    我尝试设置pinmux,发送DSYNC cmd而不读取,但我没有得到/DRDY脉冲。 /DRDY从此时刻起保持低位。

    我是否做错了事?

    谢谢,Ondrej

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


    我认为这对于您所给出的命令的操作是正确的,但我理解这种混淆。 我将解释设备的情况。

    完成数据读取后,/DRDY引脚返回高电平。 ADS1243数据表的第14页对此进行了讨论。 在您提供的第一张图中,这就是它正在做的事情。 提供读取数据后,它只是为您提供ADC的最后一次转换的数据。 该数据来自SYNC命令前给定的/DRDY指示的转换。 收到DSYNC命令后,将开始转换,RDATA命令返回/DRDY HIGH,转换完成后/DRDY返回LOW。 之后,ADC将继续转换。

    第二个图显示DSYNC命令尚未完成。 问题是DSYNC需要更多输入才能完成。 如果您查看DSYNC操作(也在数据表的第14页),则首先发出DSYNC命令。 但是,在给出SCLK的下一个上升沿之前,ADC保持在复位状态。 在命令部分中应该对其进行更好的解释,但使用SCLK的下一个上升边缘可以获得更好的精确定时,然后DSYNC会出现。

    希望这能解决您在操作中遇到的任何问题。 如果您有任何疑问,请告诉我。


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

    您好,Joseph:

    再次感谢您的回答!

    我仍然有点困惑,因为在上面的帖子中,你建议我这样做:

    基本上,这是您需要运行的顺序:

    1. 将多路复用器设置为正确的输入
    2. 发送DSYNC命令以重新启动数字滤波器并开始转换
    3. 等待/DRDY指示转换已完成
    4. 读取数据
    5. 将mux设置为新输入并重复该序列

    我在MUX (1)中设置了正确的输入,发送DSYNC (2),然后我希望/DRDY能够通知我可以读取实际的ADC数据(3)。 (这是我上一篇文章的第二个数字,但你说我必须提供" SCLK的下一个上升边缘"。)

    在我上一篇文章的第一个数字中,“SCLK的下一个上升边缘”是由RDATA cmd提供的。 作为对该命令的响应,我得到了“错误”-上次从之前的pinmux转换的值。 我知道您提到“数据来自SYNC命令前给定的/DRDY指示的转换”,但我的目的是设置MUX=diffch1并读取实际的diff通道1数据, 设置MUX=diffch2并读取实际的diff通道2数据... 3,... 4次。  

    我很好奇,我试图发送DSYNC cmd,然后读取REG cmd (提供 “SCLK的下一个上升边缘” ),但转换没有开始。 为什么?

    所以我的问题仍然是,cmd序列应该是如何能够连续读取所有diff通道的?

    喜欢这个循环? 步骤3应该是什么?

    1. 将多路复用器设置为正确的输入
    2. 发送DSYNC命令以重新启动数字滤波器并开始转换
    3. 发送???? 命令(提供“SCLK的下一个上升边缘”)
    4. 等待/DRDY指示转换已完成
    5. 读取数据

    在第10页的ADS1243数据表中,还写道:

    "为了尽量减少设置错误,请将MUX更改同步到转换开始,这由DRDY的下降边缘表示。 换言之,DRDY低电平后,立即通过WREG命令发出MUX更改,可最大程度地减少设置错误。"

    我与"转换 开始,由DRDY的下降边缘表示"的说法混淆了。

    这意味着循环应该像这样,或者我错过了什么?

    1. 发送DSYNC命令以重新启动数字滤波器并开始转换
    2. 发送???? 命令(提供“SCLK的下一个上升边缘”)
    3. 等待/DRDY指示转换已完成(/DRDY的下降边缘,对吗?)
    4. 将多路复用器设置为正确的输入
    5. 读取数据

    谢谢Joseph,我已经为该ADC准备了基本的Linux驱动程序,但我无法在“所有四个差分通道连续模式”下正确读取数据。

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


    如果我不清楚,我很抱歉。 发送DSYNC命令需要对设备进行额外的写入才能开始转换,因为实际转换是在SCLK的下一个上升沿上开始的。 因此,您需要做的就是发送

    1.将多路复用器设置为正确的输入
    2.发送DSYNC命令重新启动数字滤波器并开始转换
    3.发送命令以启动转换(见下文)
    4等待/DRDY指示转换已完成
    5.读取数据
    6.将MUX设置为新输入并重复该序列

    对于步骤3 (发送命令以启动转换),我怀疑您可以发出虚拟命令,例如向设备写入00h,这与不完整的读取操作相同。 这将开始转换。 您提到您在DSYNC之后使用了RREG命令,但转换尚未开始。 通常情况下,我会期待这种方法能够发挥作用,我确信我已经看到其他人使用它来开始DSYNC的转换。 我不确定您的设置有什么问题。 您能否获取该交易的示波器镜头? 最好使用逻辑分析器,这样我们就可以读取位事务。

    关于第10页上有关最小化错误和同步MUX更改的评论,这是为了解决更改通道时发生的问题,但不运行DSYNC命令。

    以下是一个示例:设备处于转换过程中,您无需使用DSYNC命令即可在转换过程中更改通道。 产生的转换将是两个通道测量的组合。 对于这种类型的ADC,输出类似于转换期间输入的运行平均值(或实际加权平均值)。

    如果您可以同步MUX更改,使其在DRDY之后立即发生,那么ADC在下一次读取时只需花最少的时间查看上一个通道。 通常,ADS1243的数据周期较长。 如果运行速率为7.5SPS,则数据周期为133ms。 如果您能够在/DRDY的20us范围内更改通道,那么您在查看上一个通道时看到的错误将会比较小。

    如果你使用DSYNC你不必担心这一点。 如果您更改了通道,然后运行了DSYNC,则需要重新开始转换。 在该数据期间,ADC只能看到一个信道。

    我还要指出,我们的许多新设备更易于使用。 当ADS1220,ADS1248和ADS124S0x等设备中的MUX发生更改时,转换将自动重新开始,而无需使用DSYNC命令。 但是,如果由于其他原因需要同步转换,您仍可以执行此操作。


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

    您好,Joseph:

    很遗憾,我没有日志。分析仪目前...

    我再次制作了示波器屏幕截图。

    在第一个图中,我执行步骤1,2,3 (虚拟RDATA cmd),4,5 (真实RDATA cmd =>使用此ADC值)并循环。

    因此,在步骤3 (伪RDATA cmd)/DRDY变为HIGH (高)后,我可以等待转换结束(用/DRDY LOW表示),并在步骤5中读取我的值。

    为什么RDATA命令整个转换周期后/DRDY为高?

    在第二个图中,我执行步骤1,2,3 (虚拟读取REG cmd)...然后可以运行转换(我不知道?)。 我期待/DRDY高!? 但是,在伪读取REG cmd后的67毫秒(我有默认的15 Hz采样率),/DRDY高脉冲出现。 这应该是这样的吗?

    下图是详细的DSYNC和伪读取REG cmd。

    谢谢约瑟夫

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


    我将按照您在最后一篇文章中显示的顺序浏览图解。

    在第一个图中。 它看起来就像您对它进行编程时所做的那样。 您发出DSYNC,然后运行一个伪RDATA,它会作为响应而激发/DRDY。

    在第二个图中,您使用DSYNC之后的RREG开始转换。 您从/DRDY中看到的转换是有效的。 您可以根据REG命令后转换开始的时间间隔来查看。

    我知道你期待/DRDY在REG之后会很高,但事实并非如此。 数据表指出,从数据寄存器执行的读取操作完成后,/DRDY返回HIGH。 显然,这仅适用于数据输出寄存器(dor),您只能使用RDATA命令获得此信息。

    在上一个图中,您有一个DSYNC和RREG命令的特写,但正如我所提到的,它不会返回/DRDY高。

    通常,我建议/DRDY触发中断以开始收集数据。 但是,如果您正在轮询/DRDY,我就会明白为什么要返回/DRDY HIGH。 在这种情况下,只需使用伪RDATA命令即可完成此操作。


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

    您好,Joseph:

    很抱歉我的回复太晚了。

    我在想第二个图解和你的解释-> "。你在DSYNC之后使用RREG开始转换。 您从/DRDY中看到的转换是有效的。"


    正如我之前所说的,我尝试通过轮询来连续读取所有4个差分信道(在ADS1243上设置)。 我发送下一通道的MUX cmd,然后发送 DSYNC以开始新的转换和RREG。 然后,如果我立即读取该值(您上面说的是该值有效),我将获得上一个信道的值,因为我上次更改MUX cmd的转换尚未完成,对吗? 或者您的意思是,在RREG之后,我应该等待/DRDY升高到高,然后/DRDY再次变为活动低电平(并读取“有效”数据)?

    (BTW:ADS1243通常不用于从所有通道连续读取?)

    此致,Ondrej

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


    抱歉,我上周大部分时间都不在办公室。

    如果您发送下一个通道的MUX命令,然后发送DSYNC (然后发送SCLK的RREG),您将开始新的转换。 一旦开始转换,ADC需要整个数据周期从输入中收集样本以进行转换。 如果以7.5SPS的速率运行,数据在133毫秒后将正常工作。

    正确的方法是,如果启动DSYNC后立即读取数据,则将获得上一个通道的数据。 如果需要,您可以先设置通道,发送DSYNC命令,然后使用读取上一通道来启动新的转换。 如果要捕获上一个频道,您只需确保在新频道的转换完成之前执行读取操作。

    我知道此接口用于读取连续信道,但它是有效的。


    吴若瑟