TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1298初始化成功完成后偶发出现连续读出的数据全为0

Other Parts Discussed in Thread:ADS1298

ADS1298上电初始化,管脚复位脉冲后,发关闭连续读指令,获得ID成功后,对各个寄存器配置,然后发送开始指令,再发送连续读指令,这些都成功完成后,在连续读取数据时,SPI获得的数值全为0。此时用示波器测量管脚电压,发现SPI的时钟是正常的,但DOUT输出端始终是低电平,DRDY管脚工作正常,可以定时出现希望的负脉冲,说明此时芯片的基本功能是正常的。一旦出现此现象,只要不断电和复位就会一直持续下去。但这个现象发生非常偶然,并不是每次上电都出现,不出现时,所有功能都正常,可以正确采集到波形数据。重新上电后又不出现此现象了。所以请问,这是什么原因造成的?会是寄存器配置的问题造成这个现象的发生吗?第二个问题是:我用V导联作起搏检测,用最低的采样频率,使用的是外部硬件比较电路输出反馈回GPIO的方式。此时将CONFIG2寄存器中的斩波截止频率位WCT_CHOP设置为1,斩波频率恒定,请问这样配置会对采到的信号有什么影响吗?谢谢

Amy Luo:

您好,
感谢您对TI产品的关注!
DOUT输出0这种现象是在转换为连续读取数据后就发生的,还是转换后连续读取一段数据后才偶然发生的?

,

Ning Zhang1:

您好,是转换为连续读取数据后就发生了,只要不断电不复位芯片,这个DOUT输出0会一直持续下去。我所提到的偶然发生,是指,有的时候上电初始化后就出现这个现象。而大部分使用时,上电初始化后都正常。而且一般只要上电初始化后是正常状态,在不断电的情况下继续工作中是不会发生这个现象的。

,

Ning Zhang1:

刚才我又作了如下尝试:在出现DOUT输出始终为0这个现象后,我依次发送STOP停止指令,再发送停止连续读指令SDATAC,再发送读取芯片ID指令,读到了该芯片的正确ID=0x92。说明此时SPI以及芯片指令功能都正常。

,

Ning Zhang1:

我推测了一个这个现象发生的原因:我的硬件上是将ADS1298芯片的START管脚置低的,依靠START指令来控制开始采样转换。我按照手册中第85页流程图中的顺序,在上电复位后,先发送了停止连续读指令SDATAC,然后对各个寄存器配置,然后发送开始指令START,延时50毫秒后,再发送恢复连续读指令RDATAC。按照此流程,可能会出现一个问题,在START后的50毫秒期间,ADS1298已经处于采样转换的工作状态了,DRDY负脉冲已经开始按照设置的频率定期产生,我单片机在DRDY负脉冲的中断中已经开始发送SPI时钟要数据,而我发送恢复连续读指令RDATAC是在主循环中,可能会出现该指令发出的时刻与DRDY负脉冲有冲突,使得RDATAC指令未能起作用。(手册中第62页有谈到DRDY周围4个tclk周期的阻止区域)。那么如果连续读指令RDATAC没起作用,50毫秒后,芯片还始终处于SDATAC的模式状态,我在DRDY负脉冲的中断中,却在按照连续读的模式只发要数据的SPI时钟,而没有发送RDATA指令,所以芯片DOUT会一直输出0。以上是我的推测,请教TI的工程师这是否正确。 那么为了避免上述问题,我尝试了先发送恢复连续读指令RDATAC,延时50毫秒后,再发送开始指令START,这种现象到目前为止还未复现。但是这样的顺序又和手册中的流程图不一致,所以我没有把握这样是否可行,担心是否有什么隐患,所以想请TI工程师们帮我确认一下这样是否可以。谢谢!

,

Amy Luo:

我再确认下您的这个问题

,

Ning Zhang1:

我按照先发送恢复连续读指令RDATAC,延时50毫秒后再发送开始指令START,的方式反复尝试多次,这个DOUT输出始终为0的现象再也没有出现,也就是RDATAC的指令起作用了。但是先发RDATAC,再发START,这样的顺序是否可以保证芯片工作正常呢?希望能得到您们的确认。

,

Ning Zhang1:

我之前的几条回复中有一些笔误的地方,把一些RDATAC的地方误写成了SDATAC,可能会造成您误解,我已编辑修改了。您再看一下

,

Amy Luo:

没关系,我看懂了您的意思,您的问题我还在确认

,

Amy Luo:

我咨询了美国的资深工程师,他们已给回复:
从设计器的输入来看,在这种情况下,START和RDATAC的顺序应该无关紧要。您是根据DRDY捕获数据的吗?您能确认一下现在是Single-Shot mode 还是 Continuous Conversion mode?

,

Ning Zhang1:

感谢您的回复。我确实是根据DRDY捕获数据的。寄存器CONFIG4设置成了0x02。也就是CONFIG4中的SINGLE_SHOT位置为0,即设置成了Continuous Conversion mode连续转换模式。我是系统上电后,ADS1298的START管脚始终连接地,根据手册时序要求延时足够后,给ADS1298的复位管脚复位再拉高,然后后发送停止连续读指令SDATAC,然后读取芯片ID以及对各个寄存器配置,其中包括CONFIG4如上的配置值。各寄存器配置完成后,发送恢复连续读指令RDATAC,延时50毫秒后发送开始指令START。在START指令成功开始换后,等待DRDY的下降沿,单片机由此下降沿产生的中断连续发送SPI时钟读取数据,此期间DIN保持为0,因为连续读模式无需发送操作码RDATA。从实际测试来看,确实已经处于了连续转换模式,每次读取数据后,DRDY自动被拉高,下一个采样时刻时DRDY自动产生下降沿。在此期间没有发送任何的START和STOP指令,START管脚也没有制造任何脉冲。我提出以上疑问是因为看到手册中第62页写到,“如果器件处于RDATAC模式,则必须先发出SDATAC命令,然后才能将任何其他命令发送到器件中。”所以担心我先发RDATAC后再发START指令会有问题。

,

Ning Zhang1:

我又尝试了以下方案二:根据手册第51页介绍,发出START指令后DRDY被拉高,然后需要一个建立时间tSETTLE才能被拉低,而此tSETTLE的时长跟设置的数据速率有关,我设置的是低功耗模式且DR[2:0]为110,故该建立时间为36872个tCLK周期,推算出大约18毫秒,又根据第62页提到的DRDY附近的4个tCLK的阻止区域问题,需要在这个时间点之前保证RDATAC指令发送完成,于是我在各个寄存器配置完成后,先发送START指令,然后延时5毫秒,再发送恢复连续读指令RDATAC。就是要保证发送的RDATAC时刻附近不会有DRDY的下降沿产生。我用这第二个方案反复测试,也没有DOUT全0的现象发生,推测RDATAC指令每次都成功起到了效果。想请问您这个方案二是否也是一定可行的呢?这个方案二和方案一,您们更推荐那种呢?谢谢

,

Amy Luo:

根据美国工程师的回复,第一种方法应该是可行的,但第二种方案更符合数据手册的要求,因此我更推荐方案二

,

Ning Zhang1:

好的。非常感谢您的回复。我按照方案二进行下去。

赞(0)
未经允许不得转载:TI中文支持网 » ADS1298初始化成功完成后偶发出现连续读出的数据全为0
分享到: 更多 (0)