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.

[参考译文] ADS1259-Q1:数据输出停止,重新初始化后重新启动

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/653360/ads1259-q1-data-output-stops-restarts-after-reinitialization

部件号:ADS1259-Q1
主题中讨论的其他部件: MSP430F2619ADS1259

我目前正在开发一款包含ADS1259-Q1和msp430f2619 MCU的工具。 ADS每300毫秒进行1次转换/毫秒1秒。 该芯片的设置如下,在 使用2Vpp正弦波进行测试时,提供了前3-7个转换周期*的预期读数。 之后,它将停止发送数据。 在我每隔一个转换周期重新初始化ADS之后,数据输出将恢复,但在恢复之前仍会跳过1-3个转换周期。

在CCS中逐步执行代码不会重现该问题。 我在让程序运行的同时,在示波器上观看DOUT ADS引脚时注意到了这一点。 我不确定问题可能是什么。 这是我在这里发布的第一篇文章,所以如果我需要包含其他内容,请告诉我。 感谢你能抽出时间。

*Conversion period = 1秒,其中ADS需要1个转换/毫秒

MCU使用16MHz外部时钟,ADS SCLK使用设置为2MHz的SPI时钟

----------------------------------

ADS初始化/重新初始化程序:

将RST引脚(在ADS上)设置为低,然后再次设置为高

等待10毫秒

SDATAC (0x11)

地址0h中的WREG,用于6个寄存器

CONFIG0 = 0x05 (默认设置)

配置1 = 0x00 (无外部参考,所有其他设置为默认值)

CONFIIG2 = 0x17 (脉冲控制模式@ 14.4K SPS)

偏移寄存器设置为0x7fffff

RDATAC (0x10)

----------------------------------

ADS读取程序:


对于(索引= 1毫秒;索引< 1000毫秒;索引++){

while (timer < index){

启动ADS引脚=高

等待4个时钟周期

开始=低

等待0.5 毫秒

UCA0TXBUF = 0x00,从ADS请求8位读取。 SPI中断接收和处理

重复上一步两次,以获得完整的24位读数。

}}

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

    您好,Michael:

    欢迎来到TI E2E论坛!

    从您的原理图中,我注意到/CS和/DRDY引脚是浮动的...

    -浮动/CS是一个问题,因为当/CS针脚较低时,设备只会响应命令。 如果此引脚处于高逻辑状态,则设备将停止响应。 这可能是您所看到的行为的原因。 我通常建议通过GPIO控制此引脚;但是,如果这不是选项,则此引脚应绑定为低电阻(电阻器到DGND)。

    另请注意:"d_GND]和"a_GND]应连接到电路中的某个位置;最好是在ADC处。



    -浮动/DRDY引脚不是问题,因为这是一个输出信号;但是,如果没有此“数据就绪”指示器用作中断,您可能会遇到读取旧数据的问题, 或者,甚至可能是读取损坏的数据(如果您在转换完成时读取数据,这将为您提供旧数据和新数据的混合)。 由于您正在浮动此引脚,我建议将设备置于“停止连续”模式(使用SDATAC命令),并在CONFIIG2寄存器中轮询位7以了解何时有新的可用。 一旦有新数据可用,我将使用RDATA命令读取转换结果(同时仍处于“停止连续”模式)。

    请记住,/DRDY的轮询实施可能要求您的轮询速度至少比数据速率快2-4倍(这只是我的经验法则),以确保您不会丢失任何数据。
     

    我希望这能有所帮助!

    此致,
    Chris

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

    很抱歉未能尽快回复您。

    接地和接地芯片选择连接后,我没有注意到这种行为有任何变化。 但是,我注意到当我丢失数据时,VREFN和VREFP发生了变化。

    下面,黄色代表DOUT引脚,蓝色代表VREFN引脚

    在VREFP (蓝色)会发生类似的情况,但程度不同。

    我仍在查看系统的其余部分,以确保系统中没有其他因素会导致此问题。

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

    您好,Michael:

    这是一个非常有趣的观察! 这让我觉得内部引用不能正常工作。

    • 我会仔细检查EXTREF寄存器位是否未设置,以便使用ADS1224的内部参考源。
    • 此外,我还看到REFOUT引脚缺少1uF电容器,用于稳定内部参考。 尝试在REFOUT和AVSS之间添加1uF帽。


    查看上述两个建议中的任何一个是否稳定了VREFN引脚上的电压...

    此致,
    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    添加上限也没有改变问题。 但是,当我重新阅读寄存器时,我注意到CONFI2.2没有设置为我的规格。 当我读回来时,我得到了

    CONFIG0 = 0x25 (出厂位+默认值)
    config1 = 0x00 (无外部参考)
    CONFIIG2 = 0x00 (默认)

    如果我在写ADS时出错,我的代码如下所示。

    写入寄存器:
    ----------------------------------
    UCA0TXBUF = 0x11; //SDATAC
    while (!(IFG2 & UCA0TXIFG));//等待TXBUF为空

    UCA0TXBUF = 0x40; //WREG命令-来自地址0h
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x06; //WREG命令-6个寄存器
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x05; //CONFIG0
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x00; //config1
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x17; //CONFIIG2
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0xff; //偏移
    同时(!(IFG2和UCA0TXIFG));
    UCA0TXBUF = 0xff;
    同时(!(IFG2和UCA0TXIFG));
    UCA0TXBUF = 0x7f;
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x10; //RDATAC
    同时(!(IFG2和UCA0TXIFG));
    ----------------------------------

    读取寄存器设置:
    ---------------------------------------------------------------------------------------------------------------------------------------
    UCA0TXBUF = 0x11; //SDATAC
    同时(!(IFG2和UCA0TXIFG));


    UCA0TXBUF = 0x20; //REG命令-来自地址0h
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x02; //REG命令-3个寄存器
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x00; //读取CONFIG0
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x00; //读取配置1
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x00; //读取CONFIIG2
    同时(!(IFG2和UCA0TXIFG));

    UCA0TXBUF = 0x10; //RDATAC
    同时(!(IFG2和UCA0TXIFG));
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Michael:

    Michael Green69 说:
    UCA0TXBUF = 0x06;//WREG命令-6个寄存器
    期间(!(IFG2和UCA0TXIFG));[/QUOT]

    我注意到这里有一个小错误..."0x06"会告诉设备您将写入7个寄存器。 因此,“0x10”(RDATAC)命令实际上可能被解释为写入FSC0寄存器。 我认为这不是您问题的原因。

    同样奇怪的是,您正在读取CONFIG0寄存器的值“0x25”...如果ID位为“10b”,则应该读取值“0xA5”,因为CONFIG0寄存器的位7始终返回1。 这让我想知道SPI通信是否存在其他问题...

    • ADC主时钟使用的频率是多少...您是在CLKIN引脚上应用外部时钟信号,还是将此引脚接地并使用内部振荡器? 使用2 MHz SCLK时,任何外部时钟必须介于3.6 和8 MHz之间。  

    • 您的SPI是否配置为使用SPI模式1进行通信(CPOL = 0;CPHA = 1)? 如果不是,您可能读写的值与您所期望的值略有不同。

    • 您是否查看过示波器上的SPI信号以查看它们是否清洁(无故障和大的过冲)?

    此致,
    Chris

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

    在哪里可以解决此问题? 如果您需要任何其他帮助,请告诉我!

    此致,
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉不回复。 事实证明,我的模拟和数字接地并没有像我想象的那样发生。 我将继续监控SPI,但您最初提出的接地建议解决了我的问题。 非常感谢。