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: 为什么ADS1299的好几个通道读到的数据都是相同的呢?

Part Number: ADS1299

请问我用两片ADS1299通过级联的连接模式组成16通道进行采集,然后各个通道CHnSET均设置为ADS_REG(num,WREG|CH1SET,0X60); 也就是24倍的PGA和电极输入,但是为什么读取16通道数据时有好几个通道读到的数据均是一样的,而且用手去触摸输入通道时也没有变化,这是什么原因呢?

  • 您好,

    16通道您每个通道输入的信号是什么呢?上图中00 ~ 16代表的是对应的16通道采集的数据是吗?那么右边一列,00 ~ 17是什么数据呢?

  • 输入信号现在还没接,也就是处于浮空状态,两个图代表的是连续采集两次的数据,右边00~17也是16通道采集到的数据,左边图是截图少了一个通道

  • 00 ~ 16是17个数据,00~17是18个数据,不太确定您是怎样对应的16个通道的数据?不管怎样,模拟输入是不可以悬空的,悬空的话输入电平是不确定的,所以请输入确定有效电平电压进行数据采集

  • 我是00~07代表第一片芯片的8个通道,10~17代表第二片芯片的8个通道,上面第一张图00~16是因为我在截图的时候截少了17这个通道,这个都不用管,问题是:即使是输入电平不确定,那也不应该是好几个通道都是一样的数据,而且多次采集的结果都是一样的,这几个通道的数据都不会变化,这是不对的把

  • 因为输入的信号电平不确定,什么可能性都可能存在,不建议在这种不确定的条件下进一步分析采集的数据;

    您可以配置寄存器CHnSET和CONFIG2 ,Channel input配置为内部测试信号,对内部测试信号进行采集,看采集结果

  • 使用内部方波测试的时候只要前三个通道有数据输出,后面几个通道都是0,请问是什么原因呢

  • 您仅测试一片ADS1299的8个通道也是这种情况吗?

    您可以附上您的寄存器配置吗

  • ADS_REG(num,WREG|ID,0X3e); //ID:0X3E
    usleep(5);
    ADS_REG(num,WREG|CONFIG1,0xf6); // 启动CLK时钟输出 数据速率为1ksps
    usleep(5);
    ADS_REG(num,WREG|CONFIG2,0Xd0);//测试方波信号内部产生,方波幅值(VREFP–VREFN)/2400=±3.75mV 增益24 实际测到的电压±90mV 权值 4500000uV/8838606 = 0.509uV
    usleep(5);
    ADS_REG(num,WREG|CONFIG3,0Xec); //使用内部参考电压,BIASREF使用内部产生(AVDD+AVSS)/2,使能BIAS buffer ec
    usleep(5);

    ADS_REG(num,WREG|LOFF,0X00); //关闭导联脱落检测相关
    usleep(5);

    ADS_REG(num,WREG|CH1SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH2SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH3SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH4SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH5SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH6SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH7SET,0X65); //amplified x1
    usleep(5);
    ADS_REG(num,WREG|CH8SET,0X65); //amplified x1
    usleep(5);

    ADS_REG(num,WREG|BIAS_SENSP,0X01); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|BIAS_SENSN,0X01); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|LOFF_SENSP,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|LOFF_SENSN,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|LOFF_FLIP,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|LOFF_STATP,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|LOFF_STATN,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|GPIO,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|MISC1,0X20); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|MISC2,0X00); //使用对应通道右腿驱动
    usleep(5);
    ADS_REG(num,WREG|CONFIG4,0X00); //使用对应通道右腿驱动
    usleep(5);

  • 您仅测试一片ADS1299的8个通道也是这种情况吗?

    请给出上面问题回复,以排除因级联连接造成的问题

  • 是的,仅测试一片的8个通道

  • 请问应该怎么解决这种问题呢,一般是什么原因造成的呢

  • 上面所附寄存器值,您是否已经读出来以验证按期望值写进去?

    您可以附上您读取转换结果的SPI示波器波形吗?用示波器实测ADS1299输出是否只有前3个通道有数据?

  • 是的,写进去了,我测试的时候读取了CH6SET的寄存器值,是能够正确读出所配置的值的,SPI通信应该没问题吧,我都能够进行寄存器读写,前3个通道的数据我打印出来了

  • 您是否发送了216 SCLKs?建议您还是用示波器实际测量下,可以判断是ADS1299的本身问题还是主控端的问题

  • 您说的是读取一次数据发送216个SCLKs嘛

  • 是Status寄存器值+8个通道数据,共216个SCLKs

  • 我用确定的3.3V电平输入时是可以转换成正确的输出的,但是我用2片级联组成16通道时用串口打印时前5个通道没有打印出数据出来

  • 当我用2片芯片级联时,使用输入3.3V电平,增益设置为1,输出却是约等于7.3V,这是为什么呢

  • 算错了,当我用2片芯片级联时,使用输入3.3V电平,增益设置为1,输出却是约等于1.6V,这是为什么呢

  • 也就是说目前单片ADS1299时,您是可以正确读取转换结果的,是吗?

    ADS1299是差分输入,在2片芯片级联时,您的差分输入电压(VINxP – VINxN),VINxP 和VINxN分别是多少?

    输入3.3V电平,增益设置为1,输出却是约等于1.6V,此时您使用的是内部基准电压吗?此时输出代码是多少?

  • VINxP就是输入3.3V,VINxN是悬空,我们用的是单通道,是的,用法内部基准电压,输出的电平转换出来约等于-1.6V

  • ADS1299是差分输入,有2种输入方法,1种是伪差分输入,即VINxN接固定电平,一般是供电电压的中间值,VINxP接交流信号;一种是VINxP 和 VINxN都是含有共模电压的交流信号。具体见datasheet 9.3.1.2 Analog Input部分。

    悬空VINxN是不可以的,一般不能悬空模拟输入管脚,请查看datasheet 9.3.1.3.1 Input Common-Mode Range 和 9.3.1.3.2 Input Differential Dynamic Range 部分,设置合适的输入信号,再验证是否可以正确转换输出