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.

[参考译文] ADS1299:不从 INx 输入读取数据

Guru**** 2460850 points
Other Parts Discussed in Thread: ADS1299

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1375611/ads1299-not-reading-data-from-inx-inputs

器件型号:ADS1299

工具与软件:

您好!

我正在尝试使用 Arduino 板从 de ADS1299读取数据。 我已经实现了 Arduino 和 ADS1299之间的通信,因为我可以读写寄存器,如图所示:

从 IN 通道读取数据时就会出现问题、它始终提供以下值:



根据我的理解、我正在获得的值与最大值相关、例如饱和。  

我在 Arduino 中使用的代码如下:

#include

ADS1299 ADS;

void setup(){
Serial.begin(115200);
delay(50)

//引脚8 =复位
引脚模式(8、输出)
digitalWrite (8、LOW)
delay(50)
digitalWrite (8、HIGH)
delay(50)

ADS.setup(910)
广告。 SDATAC()
ads.getDeviceID()//Funciton 返回设备 ID
//打印所有寄存器... 读取从地址0x00开始的0x17地址(这些数字可以替换为二进制或整数值)
广告。 RREG (0x00、0x17)
serial.println ("---------------------------------------------------------- ")

//写入寄存器命令(有关 WREG 的更多信息、请参阅数据表第38页)
广告。 WREG (CONFIG1、0b11010110)
广告。 WREG (CH1SET、0x60)
广告。 WREG (CH2SET、0x60)
广告。 WREG (CH3SET、0x60)
广告。 WREG (CH4SET、0x60)
广告。 WREG (CH5SET、0x60)
广告。 WREG (CH6SET、0x60)
广告。 WREG (CH7SET、0x60)
广告。 WREG (CH8SET、0x60)
serial.println ("---------------------------------------------------------- ")

//重复打印所有寄存器以验证 WREG 是否更改了 CONFIG1寄存器
广告。 RREG (0x00、0x17)
serial.println ("---------------------------------------------------------- ")
延迟(500);
广告。 start()
delay(10)
广告。 RDATAC()
延迟(500);
delay(50)
}

void loop()
 ads.updateData()
}
有什么想法吗?  
谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Pablo:

    感谢您发帖。  

    您似乎已经将所有通道配置为使用增益= 6V/V 和正常电极输入(即连接到 INxP 和 INxN 引脚的差分输入)。 在测量过程中、会向这些引脚施加多大的电压? 如果引脚悬空、可能会产生差分失调电压、当乘以增益时、该电压会超过 ADC 正或负满量程范围。

    如果主要想验证代码和 SPI 通信、可以重新配置寄存器设置、以在内部短接 PGA 输入并测量接近零的失调电压(具有一些噪声)、或者可以测量内部方波或直流测试信号选项。 因此、您可以在算法中评估数据传输和代码到电压的转换。

    此致、

    Ryan

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

    您好、Ryan、

    感谢您的答复。

    我已检查 PGA 配置、并将 CHnSET 寄存器修改为0x01、目的是实现1V/V 增益并短接输入、但数据不变:

    我正在尝试读取 EEG 信号、但输入短路不应接近于0?

    为了获取以前的寄存器、我在代码中进行了以下更改:

    #include

    ADS1299 ADS;

    void setup(){
    Serial.begin(115200);
    delay(50)

    //引脚8 =复位
    引脚模式(8、输出)
    digitalWrite (8、LOW)
    delay(50)
    digitalWrite (8、HIGH)
    delay(50)
    ADS.setup(910)
    delay(50)
    广告。 SDATAC()
    delay(50)
    ads.getDeviceID()//Funciton 返回设备 ID
    //打印所有寄存器... 读取从地址0x00开始的0x17地址(这些数字可以替换为二进制或整数值)
    广告。 RREG (0x00、0x17)
    serial.println ("---------------------------------------------------------- ")

    //写入寄存器命令(有关 WREG 的更多信息、请参阅数据表第38页)
    广告。 WREG (CONFIG1、0b11010110)
    delay(15)
    广告。 WREG (CONFIG3、0xE0)
    delay(15)
    广告。 WREG (CH1SET、0b00000001)
    delay(15)
    广告。 WREG (CH2SET、0b00000001)
    delay(15)
    广告。 WREG (CH3SET、0b00000001)
    delay(15)
    广告。 WREG (CH4SET、0b00000001)
    delay(15)
    广告。 WREG (CH5SET、0b00000001)
    delay(15)
    广告。 WREG (CH6SET、0b00000001)
    delay(15)
    广告。 WREG (CH7SET、0b00000001)
    delay(15)
    广告。 WREG (CH8SET、0b00000001)
    delay(15)
    serial.println ("---------------------------------------------------------- ")

    //重复打印所有寄存器以验证 WREG 是否更改了 CONFIG1寄存器
    广告。 RREG (0x00、0x17)
    serial.println ("---------------------------------------------------------- ")
    延迟(500);
    广告。 start()
    delay(10)
    广告。 RDATAC()
    delay(50)
    }

    void loop()
     ads.updateData()
    }

    有什么建议吗?
    提前感谢!

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

    Pablo、您好!

    是的、在输入短路配置和增益= 1时、输出代码应非常接近0。 看起来您的最后一个函数回读寄存器以确认 WREG 成功-一切看起来都正确吗?

    您能否以 GND 为基准探测以下引脚上的电压并让我知道结果?

    • VREFP 和 VREFN
    • AVDD 和 AVSS
    • DVDD
    • VCAPx (x = 1至4)

    此致、

    Ryan

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

    您好、Ryan、

    我已经检查了您提到的电压、以下是:

    AVDD 至 GND = 2.501V

    AVSS 至 GND =- 2.512V

    DVDD 至 GND = 3.27V

    VREFP 至 GND =- 2.5V

    VREFN 至 GND =- 2.5V

    VCAP1至 GND =- 1.31V

    VCAP2至 GND = 0V

    VCAP3至 GND = 3.9V

    VCAP4至 GND =-2.5V

    您是否看到电压上有任何错误?

    谢谢!!  

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

    尊敬的 Pablo:

    VREFP 和 VCAP4 (VREF/2)指示内部基准未启用或工作不正常。 这 ±了 ADC 输出代码饱和至0 Ω 满量程的原因。 您是否在上电后以及写入任何寄存器之前向器件 nRESET 引脚发出复位脉冲?

    为了排除任何其他问题、您是否可以尝试将内部基准保持禁用状态(NPD_REFBUF = 0b)、并向 VREFP 施加外部2.4V 基准电压(注意:2.4V 相对于 AVSS、因此相对于 GND 为-100mV)?  然后使用输入短路配置重新捕获数据、并检查 ADC 输出代码是否如预期的那样接近0。

    此致、

    Ryan

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

    Ryan、您好!

    关于复位、在以下句子中、我先使用复位引脚、然后再对寄存器进行写入:

    void  setup() {
    Serial.begin(115200);
    delay(50)

    //引脚8 =复位
    引脚模式(8、输出);
    digitalWrite (8、LOW);
    delay(50);
    digitalWrite (8、HIGH);
    delay(50);

    ADS.setup(9、 10);
    广告。 SDATAC();
    ads.getDeviceID(); //返回设备 ID 的函数
    //打印所有寄存器... 读取从地址0x00开始的0x17地址(这些数字可以替换为二进制或整数值)
    广告。 RREG (0x00、0x17);
    serial.println ("---------------------------------------------------------- ");

    //写入寄存器命令(有关 WREG 的更多信息、请参阅数据表第38页)
    广告。 WREG (CONFIG1、0b11010110);
    做得好吗?
    另一方面、由于我完成了硬件、因此我无法在 VREFP 中施加外部电压。 进行确认的是、VREF 引脚的电路是否正确?


    我的电路板按照以下 VREF 电路进行设计、可能是这里的错误:
    此致、
    Pablo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Pablo:  

    第一张图是正确的- AVSS 必须连接到引脚25 (VREFN)。 如果该电路板是根据第二个图中的原理图制造的、则会将 VREFP 短接至负电源、而 VREFN 悬空至直流、这就是您看到的行为。

    也许您可以切断 C22和 C21之间的布线、然后在 C22上进行短接以进行测试?

    此致、

    Ryan

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

    您好、Ryan、

    重新设计 PCB 并更正了上面提到的 VREF 电压后、我获得了 VREFN =-2.5V 和 VREFP =+2V、因此我现在假设这些基准可以正常工作。

    但我对 VCAP 电压有一些疑问。 哪些应该是这些引脚的值?  

    我在下面列出我获得的相对于 GND (VCAP 上的 v+和 GND 上的 v-)的值:

    VCAP1 =-1.3V

    VCAP2 =-16mV

    VCAP3 = 4.4V

    VCAP4 =-267mV

    我将用于电容器的值如下:

    再次感谢您的帮助!

    此致、

    Pablo

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

    您好、Ryan、  

    我还想问您另外两点:

    1 -我尝试了您建议的测试信号、然后从8个通道中获得以下值:

    我注意到每个通道都存在位偏移、因此我尝试按照您提到的方式使输入短路、这些是 DE 值:

    这些值是正常的? 测试信号似乎正常工作、但我不确定。

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

    Pablo、您好!

    我认为这些 VCAPx 测量结果都是正确的。 它们应与以下各项接近:

    • VCAP1 =带隙= AVSS + 1.2V
    • VCAP2 = VCM (中间电源)=(AVDD + AVSS)/2
    • VCAP3 =电荷泵= AVDD + 1.8V
    • VCAP4 = AVSS +(VREFP - VREFN)/2
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    测试信号结果似乎是正确的。 是的、每个通道仍将具有唯一的失调电压、可通过短接多路复用器输入并记录结果来校准该失调电压。 假设 LSB 大小为(2 * VREF)/增益、则交流测试信号的振幅可以转换为电压。

    此致、

    Ryan

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

    Ryan、您好!  

    关于校准、我有一些疑问。 首先、我尝试激活内部基准来检查直流偏移电压、通过使用1LSB 转换、我得到了这些值:

    我为寄存器使用了以下值:

    记录您提到的结果后、有什么方法可以校准 ads1299?

    另一方面、我尝试避免使用内部基准来获得直流偏移电压:

    在测量 EEG 信号之前、我想确保0偏移电压、您会建议我做什么?

    谢谢!

    Pablo

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

    您好、Ryan、

    有关寄存器配置的另一个问题。

    我想澄清一下、为了从 EMG 和 EEG 中获取数据、应该如何配置寄存器和输入。

    根据我的理解、如果我错了、请纠正我、如果我要获得 EMG 信号、我必须使用 INxP 和 INxN 输入、其中 INxP 将是正电极、INxN 将是负电极。 为了实现这一点、应更正以下寄存器配置:

    是这样吗?

    另一方面、数据表中已说明、对于 SRB2中具有唯一基准并且仅从正输入获取 EEG 数据的 EEG、则此配置将是正确的:

    最后一个问题、我不了解 CONFIG3断电基准缓冲器。 这个内部基准的用途是什么? 当激活它时、它为我提供了一个更稳定的参考。 如何计算该值? 它与 SRB 引脚有任何关系?

    谢谢!!