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.

[参考译文] ADS1158:ADS1158 DRDY 引脚未变为低电平

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1122600/ads1158-ads1158-drdy-pin-not-going-low

器件型号:ADS1158
主题中讨论的其他器件: ADCPro

我尝试使用 Arduino 控制 ADS1158模块、并将 START 引脚连接到高电平、我想在"通道读取命令"和"自动扫描模式"中使用它、  但我当前面临的问题是、DRDY 在器件通电时始终保持高电平。 我使用的是默认配置中的器件。 请指导我。

谢谢

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

    您好、Harsh Gola、

    打开 ADC 时、START 引脚的状态是什么? 如果 START 引脚为高电平、DRDY 引脚应以默认数据速率切换、即使在写入任何寄存器之前也是如此(假设 PWDN 和 RESET 也都保持高电平)

    如果不发生这种情况、则向 ADC 提供的电源电压存在问题、或者提供给 ADC 的时钟无法正常工作。

    请检查这些输入是否正确、然后再继续。

    布莱恩

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

    您好、Bryan、

    在我为 ADC 加电后,START 引脚保持低电平,之后,我将 START、RESET、PWDN 连接至5V,但 DRDY 仍保持高电平(3V3)。

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

    您好,Bryan,  

    这是我在 Arduino 上使用的代码:

    #include
    uint8_t reg1、reg2、reg3、reg4、reg5、 reg6、reg7、reg8;


    void 设置(void)


    Serial.begin(115200);//以波特率115200开始串行通信

    // pinMode (7、输出);//start//使用脉冲转换器
    引脚模式(9、输入);//drdy
    引脚模式(8、输出);//RESET //连接至5V  
    引脚模式(6、输出);//pwdn //连接至5V
    //digitalWrite (7、low);
    SPI.begin();//开始 SPI 通信


    void loop (void)(空)



    for (int i = 0;i < 6;i++)

    serial.println(i);

    //////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);

    digitalWrite (SS、low);

    delayMicroseconds (1);
    SPI.transfer (0x40);
    字节 CONFIG0 = SPI.transfer (0);
    serial.print ("config0:");serial.println (config0、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);

    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x41);
    字节 conF1 = SPI.transfer (0);
    serial.print ("config1:");serial.println (conf1、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);

    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x42);
    字节 MUXSCH = SPI.transfer (0);
    serial.print ("MUXSCH:");serial.println (MUXSCH、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    ////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x43);
    字节 muxdif = SPI.transfer (0);
    serial.print ("muxdif:");serial.println (muxdif、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    //////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x44);
    字节 muxsg0 = SPI.transfer (0);
    serial.print ("muxsg0:");serial.println (muxsg0、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    //////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x64);
    SPI.transfer (0x01);
    延迟(1000);
    ////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x45);
    字节 muxsg1 = SPI.transfer (0);
    serial.print ("muxsg1:");serial.println (muxsg1、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    ////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x65);
    SPI.transfer (0x00);
    digitalWrite (SS、HIGH);
    延迟(1000);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x46);
    字节 sysred = spi.transfer (0);
    serial.print ("sysred:");serial.println (sysred、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x47);
    字节 gpioc = spi.transfer (0);
    serial.print ("gpioc:");serial.println (gpioc、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x48);
    字节 gpiod = SPI.transfer (0);
    serial.print ("gpio:");serial.println (gpiod、hex);
    digitalWrite (SS、HIGH);
    延迟(1000);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    digitalWrite (SS、low);
    delayMicroseconds (1);
    SPI.transfer (0x49);
    字节 id = SPI.transfer (0);
    serial.print ("id:");serial.println (id、hex);
    digitalWrite (SS、HIGH);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    延迟(1000);

    while (1)
    {digitalWrite (SS、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
    digitalWrite (SS、HIGH);
    // digitalWrite (7、HIGH);//开始高电平
    延迟(100);
    //////// 脉冲转换命令
    digitalWrite (SS、low);
    // delayMicroseconds (1);
    SPI.transfer (0x80);
    字节脉冲= SPI.transfer (0);////////////////////////////////
    serial.print ("puls=");
    serial.println (pulse、hex);
    digitalWrite (SS、HIGH);
    // spi.transfer (0x00);
    if (digitalRead (9)=low)//drdy

    digitalWrite (SS、low);
    // delayMicroseconds (1);
    SPI.transfer (0x30);
    reg1 = SPI.transfer (0x00);
    reg2 = SPI.transfer (0x00);
    reg3 = SPI.transfer (0x00);
    reg4 = SPI.transfer (0x00);
    // digitalWrite (2、low);
    // dataF=reg2*pow(2,16)+reg3*pow(2,8)+reg4;
    serial.print ("Stat=");
    serial.println (reg1、十六进制);
    serial.print ("MSB=");
    serial.println (reg2、十六进制);
    serial.print ("lsb="");
    serial.println (reg3、十六进制);
    serial.print ("reg4=");
    serial.println (reg4、hex);
    // Serial.print ("finalData=");
    //Serial.println (dataF、十六进制);
    //}
    digitalWrite (SS、HIGH);
    //延迟(1000);

    }}}

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

    ADC 模块由具有5V、3V3、1v8电压的 J5A 跳线供电。 AINCOM 接地、J6A-4接地、EREFP 为5V、EREFN 为0v、 AIN0通道上的正弦波输入(自动扫描模式)。

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

    您好、Harsh Gola、

    您应该使用1.8V 或3.3V 电压、我不知道为什么您同时连接了这两个电压。 您能给我发送一些新硬件配置的图片吗? 请提供尽可能多的详细信息

    您能否确保 PWDN、START 和 RESET 连接至3.3V、然后为 ADS1158 EVM 子卡上电。 您甚至可以断开控制器的连接进行此测试。 当 ADC 上电时、DRDY 应以数据速率切换。 如果 DRDY 未切换、它仅保持高电平、则电源或时钟存在问题。

    告诉我发生了什么、请发送图片

    布莱恩

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

    您好 Bryan、

    感谢您的持续支持、我已经附上了一些电路板图片、请检查、我已将复位、PWDN、单极/极性引脚连接到高电平(从 Arduino 获得5V 电压、我应该将它们连接到3V3吗?)、EREFP 连接到5V EREFN 连接到 GND、 由于我决定使用脉冲转换命令(因为设置 START 引脚不会导致 DRDY 引脚上的活动)、因此 START 引脚处于断开状态。 在上面的代码中,我发送0x80,然后检查 DRDY 是否处于低电平状态,然后发送0x30和额外的0x00 0x00 0x00以捕获 STAT、MSB、LSB 字节。 我更改的寄存器是 muxsg0 (设置为0x01)、muxsg1 (设置为0x00)、每个其他寄存器都设置为默认值。         

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

    您好 Bryan、

    更新了:-我在 ADS1158电路板上找到了跳线,跳线 J6,它将 G0和 ST 引脚短接(在另一个论坛上发现了这一点),我现在已将其更改为短接 J6-1和 ST, 现在、DRDY 引脚发出脉冲、当其将 START 引脚设置为高电平时应发出脉冲。 现在我将 Arduino 代码更改为初始设置 START 引脚为高电平、然后检查 DRDY 是否为低电平、并发送(0x30)(0x00)(0x00)(0x00)以检索通道、我将更新有关我正在接收的通道数据的快速更新。

    流量:-  

    1.set RESET、PWDN、单极、START 引脚高电平(5V、是否应将其连接到3V3?)

    2.set 配置寄存器

    回读这些寄存器

    4.检查 DRDY 是否为低电平,然后发送(0x30)。 并保持该状态。

    请检查我是否采取了正确的方法。

    谢谢。

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

    您好、Harsh Gola、

    应将 RESET 和 PWDN 绑定在一起、然后开始连接到用于 DVDD 的任何电压。 DVDD 和用于数字通信的3.3V 电压之间有一个电平转换器、因此您不必使用与 FPGA IO 相同的电压。 但是、对于所有数字 IO 电压、使用3.3V 可能是合理的。 PWDN 和 RESET 在 EVM 上已经具有3.3V (R8和 R9)的上拉电阻。 您可能需要手动将 START 引脚连接到 DVDD、因为当您将 J3-1和 J3-3连接在一起时、此布线上会有一个下拉电阻(R14)。 因此、您需要确保将 START 设置为高电平才能开始转换、但发送的图片未连接到 J6 (J6-1)上的 START 引脚。 查看 ADS1158EVM 原理图、了解有关 EVM 设计方式的更多详细信息。

    用于控制 AVDD 电源电压(单极与双极)的引脚可以保持未连接状态、在该配置中会自动拉高=设置为单极。

    此外、我建议断开 ADS1158EVM 子卡与 MMB0主板的连接、并直接为 ADS1158EVM 上的 J5接头供电。 MMB0上的控制器与外部控制器之间可能存在一些竞争

    如果要使用通道数据读取命令、则所概述的过程是正确的:检查 DRDY 是否为低电平、并发送(0x30)(0x00)(0x00)(0x00)(0x00)以检索通道数据。 请注意、命令后的第一个字节为状态字节、这仅在自动扫描模式下有效。

    布莱恩

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

    感谢 Bryan 为您提供指导、我已经附上了一些我所获得结果的图像、请检查并告诉我如果您需要更详细的图像、目前我正在使用一个通道(AIN0)进行测试、我希望最终使用7个通道(AIN0-AIN6)(单端)、 ADC 在默认配置下运行、我只覆写复用 sg0 (0x01)和复用 sg1 (0x00)寄存器来选择输入通道。 我使用的是 RESET、PWDN、START、DRDY、CS、MOSI、 MISO、SCLK 引脚总计,ADC 现在在没有主板的情况下通电,我提供了正弦波作为输入,结果产生噪音。 在我的当前代码中、我写入 muxsg0和 muxsg1、然后将 START 引脚从低电平变为高电平、然后开始检查 drdy 是否为低电平、然后发送(0x30000000)以检索通道数据。 请指导您如何以更低的噪声获得结果。

    谢谢

         

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

    您好、Harsh Gola、

    我是否正确理解您现在能够成功读取和写入 ADS1158上的寄存器? 因此、执行这些功能不再有问题?

    我提出这一问题是因为我没有看到 SCLK ("SCLK_0")在您发送的屏幕截图中进行切换、因此我不确定您在这些图像中执行的操作。

    现在、唯一的问题是您的正弦波输入的噪声高于您的预期?  由于 Δ-Σ ADC 对输入进行采样的方式、ADS1158可能不是交流信号的最佳选择。 这可能更适合 SAR ADC、除非您测量的是极低频率正弦波(<1kHz)。 如果您可以提供有关您尝试测量的信号(振幅和频率)的更多信息、我们可以提供更好的建议

    您还可以通过将输入短接在一起并测量产生的噪声来检查 ADC 的噪声性能。 您可以通过为正负 ADC 输入选择相同的通道来将输入短接在一起。 这必须在固定通道模式下使用 ADS1158完成。

    此外、根据已知直流输入检查噪声性能、例如来自精密源的2.5V 电压(例如、您可以使用 ADC 的基准电压)。 假设您的系统中没有其他噪声源、测量此恒定2.5V 的噪声应与 ADC 量化噪声的顺序(假设无增益、则为2*1.0666*VREF/2^16)

    布莱恩

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

    您好 Bryan、

    我能够成功读取和写入寄存器、我使用此 ADC 来测量湿度、水压、温度和水流等传感器的数据。 我附加了一些图像,其中一个显示 SPI 通信,另一个显示我正在接收的数据。  您可能会注意到,在工作表中提到,新位代表新数据,因此我将数据分成了两个,一个是收集新数据和旧数据的位置,名为 ADS_1158_interface_0_channel_n (n= 0、1、2、3、4、5、6), 其中我仅收集新数据并丢弃旧数据、名为 ADS_1158_interface_0_channel_n_new。

    但在不均匀的情况下、我仍然会遇到尖峰。 当前连接的传感器有一个湿度传感器(通道1)、2个水压传感器(通道0和2)、一个5V 直流电源(通道3)、一个2V 100Hz 正弦波(通道5)。

    SPI 时钟= 8MHz、只要 DRDY 变为低电平、SPI 触发。   在 ADC 上启用通道0至6,其它设置为0 (关闭),自动扫描模式,通道数据读取命令。  

    除 muxsg1 = 0x00外、所有寄存器都为默认值。

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

    您好、Harsh Gola、

    您能否帮助解释显示"DS_1158_interface_0_channel_n (n= 0、1、2、3、4、5、6)"? 您是否直接测量这些信号? 或者您是否在测量 DOUT 引脚上的数据、然后分别绘制每个通道?

    这些尖峰看起来像噪声、可能来自耦合到 ADC 某个位置的电源或时钟线路。 如果您没有接地连接(例如接地反弹)、它们也可能是接地平面中的电压尖峰。 您应该尝试检查所有这些组件并确保它们正常工作。

    布莱恩

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

    您好 Bryan、

    ADS_1158_interface_0_channel_n (其中 n 是通道编号) 表示通道编号 例如 ADS_1158_interface_0_channel_0显示 AIN0数据,ADS_1158_interface_0_channel_0_new 显示 AIN0数据,不同之处在于它每次都根据状态字节的新位丢弃旧数据,例如 AIN0通道上的旧数据显示为0x08 (StatusByte) Msbyte Lsbyte 和0x88 (MSB)新字节。

    我正在收集 SPI 模块 DOUT 缓冲器上的所有数据、然后检查 STAT 字节以获取通道信息、然后单独绘制这些数据。

    我当前使用的是不带主板的 ADS1158模块,我已将 J6-4接地连接到 FPGA,并将 ADS1158模块上的 AINCOM 连接到 GND 引脚。 我还将传感器的接地端连接到 ADS1158模块和 FPGA。

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

    您好、Harsh Gola、

    您是否曾尝试检查电源的稳定性和电压? 在采样时、它们是否会下降?

    您是否尝试使用 来自精密源的外部基准电压来查看噪声是否降低?

    目前、我只会输入已知的直流电压来测试您的电路并诊断噪声。 当您开始尝试测量传感器时、变量过多等

    布莱恩

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

    您好 Bryan、

    我从专用电源单元为 ADC 提供5V 直流电,尽管电压降至4.9甚至4.7,但电压不会降至0v 或接近0v。  

    对于外部基准、我分别将 S1和 S2开关设置为 AVDD 和 GND。

    我还只向一个通道提供稳定的5V 直流信号、但我仍会得到下降、其值甚至低至0 (在分析仪窗口上)。

    但是、每当我运行 ADCPro 软件以双倍检查信号中是否存在噪声时、它就能完美运行。

    寄存器配置:-

    Config0 = 0x0a

    CONFIG1 = 0x83

    muxsch = 0x00

    muxsg0 = 0x01

    muxsg1 = 0x00

    每当 DRDY 信号变低时、我都会获取通道数据。

    SPI 时钟 8MHz。

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

    您好、Harsh Gola、

    如果 AVDD 降至4.7V、则低于 ADC 的建议工作条件(AVDD 必须为 AVSS+4.75V、我假设您以 AVSS 为基准测量 AVDD)。 这可能会在 ADC 内引起广泛的问题、因为 ADS1158被设计成在有效的5V AVDD 下运行。

    我会确保您的电源非常稳定、不会出现压降。 这可能无法解决您眼前的问题、但很可能会导致未来的挑战

    电路板上的 IO 电压是多少? 该电源也会下降吗?

    布莱恩