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.

[参考译文] ADS124S06:两种读取数据模式的混淆

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/649249/ads124s06-confusion-about-two-reading-data-mode

部件号:ADS124S06

大家好,

最近我使用ADS124S06来执行RTD温度测量项目。 当我用两种不同的模式从ADC读取数据时,我对它们有一些疑问。 当我使用数据表P69中的"Read Data by RDATA Command"(通过RDATA命令读取数据)时。 下面是我的代码ADC_NUM=100,采样率为100 SPS。  我只使用SCLK,MOSI,Miso三针从ADC读取数据,而忽略DRDT针的状态。  我发现每次  读取数据之前都必须发送RDATA命令,否则读取的数据将异常。  我对这种模式的看法是否正确? 我还有以下问题:

  •   数据持有登记册的更新频率是多少?  
  •  输出移位寄存器有何区别?

如果 数据速率为100SPS,输出移位寄存器的更新频率为100Hz,那么数据保持寄存器的频率是多少

下面是我关于如何从ADC读取数据的代码。

对于(i=0;i<ADC_num;i++)

delay_ms(3);

sendCommand (RDATA_opcode_mask);//第一次 我没有添加此代码

delay_ms(3);

ADC_ReadData[i]=(UINT32_t)0xffffff& dataRead();// 读取数据

}

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

    您好,Charles:

    我不清楚您尝试如何处理此代码。  让我们分析您的代码。  如果您使用连续转换模式,则收集环路为100,并且ADS124S06的输出数据速率设置为100sps (每10毫秒提供新数据)。  延迟时间为6毫秒(3毫秒+3毫秒)。 因此,不可能在每个循环迭代中收集新数据。  如果不处于连续转换模式,则需要为每次迭代发送启动命令。

    如果您查看dataRead函数,您会注意到该函数所做的只是发送一系列SCLK来捕获数据,并且不包含RDATA命令。  如果需要,可以将RDATA命令放在dataRead函数中。

     仅使用dataRead函数时,您需要确保等到转换完成后再尝试读取结果,因为移位寄存器实际上位于环形缓冲区中,如果您不断发送SCLK,则会重复。  如果在您读取结果时进行转换更新,数据可能会损坏,这种可能性很小。  使用RDATA命令可通过将最后一个转换数据移动到输出缓冲区来防止数据损坏,并且不会受到新转换更新的影响。  数据将一直保留在缓冲区中,直至被读取,或者如果CS变高,或者 ADS124S06的SPI通信发生超时。  

    还有另一个问题。  ADS124S06的输出是二进制2的补码(带符号的值),而dataRead函数返回带符号的32位值。  出于某种原因,您使用和 创建的是仅使用24位的无符号值。  如果您尝试将值转换为单极格式,则此操作不正确。  没有充分的理由将数据格式从带符号值更改为无符号值,因为动态范围保持不变。

    此致,

    Bob B

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

    Bob,您好!

    感谢您的快速响应。 很抱歉,我没有清楚解释我的问题。  我 使用的是连续转换模式,我发现在读取每个数据之前必须添加RDATA命令。 起初我以为在连续转换模式下只需要 发送一次RDATA命令,  而RDATA命令在100个数据的收集循环之前发送。 但数据有时会异常。 所以我添加了RDATA命令来读取每一个数据。 我对这项行动感到困惑。 对吗? 您说:“数据将一直保留在缓冲区中,直到读取,或者如果CS变高,或者 ADS124S06的SPI通信发生超时。  ",这意味着,如果读取数据持有登记册中的数据,它将立即更新? 或者,数据持有登记簿中的数据如何变化,其变化频率是多少?

    以下  是数据读取代码。 在xferWord()函数中,我只向ADC发送ox00并从ADC中捕获数据。

    UINT32_t数据重设(无效)

    uINT32_t iData=0

    //获取转换数据

    iDATA = xferWord();

    iDATA =(iData<8)+ xferWord();

    iDATA =(iData<8)+ xferWord();

    返回iData;

    }

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

    您好,Charles:

    数据收集有两种不同的方法。  一个如图90所示,另一个如图91所示。  dataRead()函数的使用方式与图90相似。  使用此方法类似于使用环形或循环缓冲区,因为数据将重复。  如果使用图91中的方法,则需要先发送RDATA命令,然后再读取数据。  如果您使用此数据收集方法,则需要在每次您希望读取数据时发送RDATA。

    您如何知道转换已完成且有新数据可用?  您通过监控DRDY知道。  如果您将数据速率设置为100sps,则每隔10毫秒您将看到DRDY脉冲或至少从高到低的过渡。

    我建议您通过示波器监控您的通信,并监控DRDY以查看响应。  这应该可以回答您的许多问题。  您应该只尝试读取DRDY周期之间的ADC转换结果。  您不能只是不断尝试从设备读取数据,而是每次都期望获得良好的结果。

    另请记住,该数据是ADS124S06的二进制2补码。  您正在尝试将数据另存为未签名,但这不起作用,因为您会误解数据。  例如,0x0.0001万是0以上的+1代码。 0xffffffff是从0开始的-1代码。  您应该使用带符号的整数,并正确地将24位值扩展 为32位。

    此致,

    Bob B

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

    非常感谢。 如果我使用图91中的方法读取数据。 每次都需要发送RDATA,这意味着数据保存寄存器将通过此命令更新,对吗? 我只是想知道数据存置登记册的更新频率。 因为我没有使用DRDY pin (pin13),现在我使用pin12 (DOUT/DRDY)来知道转换已完成,有新数据可用,但我需要发送RREG命令来读取最低有效位为1的寄存器(见p 70)。 因为大多数客户不会使用DRDY PIN,我认为这可能对客户不方便。 您如何看待此功能?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Charles:

    发出RDATA命令后,最后的转换结果将被放入输出寄存器中。 是的,您是对的。

    您不需要使用DRDY引脚。  您可以使用计时器方法,或使用DOUT/DRDY的功能,因为该引脚也会跟随DRDY。  用法如图86所示。  我们发现,大多数客户将使用DRDY或DOUT/DRDY。

    将DOUT/DRDY引脚设置为高很重要,否则将很难轮询高到低的转换。  使用ADS124S06,您应该能够读取ID寄存器,其中ADS124S06的设备ID为LSB的'1'。

    此致,

    Bob B

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

    非常感谢!