Part Number:ADS131A04
我在测试时发现将OSR设置为D/E时会出现数据位全为0的问题。我的配置是同步主机模式,M0-M2全部接地,通道1-4全部使能,不使用CRC,数据帧长度浮动,因此单个数据帧应为15个字节。目前可以达到的最大分频是CLK2=0X2C,将其设置为0X2D或0X2E时返回的数据帧为220000 000000 000000 000000 000000,即状态返回正常,但是数据位全为0。
我搜索了论坛也发现很多人提到过类似的问题,如[参考译文] ADS131A04:ADS131A04:同步从模式配置无法获取 ADC 数据。 – 数据转换器(参考译文帖)(Read Only) – 数据转换器(参考译文帖) – E2E 设计支持 (ti.com)、[参考译文] ADS131A04:无法读取ADC通道数据 – 数据转换器(参考译文帖)(Read Only) – 数据转换器(参考译文帖) – E2E 设计支持 (ti.com)等,但是没有看到有效的解决方法。希望有遇到过类似问题并且解决了的朋友能够解惑。
谢谢!
Amy Luo:
您好,
xzq said:我在测试时发现将OSR设置为D/E时会出现数据位全为0的问题
这里将OSR设置为D/E,具体什么意思?
在同步主机模式,ADS131A04的SCLK是输出口,ICLK被用作SCLK输出。在您的应用中 fCLKIN 是多少?CLK1和CLK2寄存器配置的是什么?
另外,是否验证了寄存器写入后可以正确读出来?
,
xzq:
Amy Luo said:
这里将OSR设置为D/E,具体什么意思?
D即0X1101,E即0X1110
Amy Luo said:
在您的应用中 fCLKIN 是多少?CLK1和CLK2寄存器配置的是什么?
另外,是否验证了寄存器写入后可以正确读出来?
使用的16M晶振,CLK1设置的0X04,寄存器读写正常。CLK2设置0X2C时可以正常读取到数据,设置为0X2D或0X2E时数据位就全为0了。
,
Amy Luo:
16M晶振,那么根据寄存器配置SCLK是4MHZ;
0X2E时,输出数据速率是43KSPS,需要的SCLK速率是43K*120=5.12MHZ > SCLK的4MHZ,因此输出可能是异常的。
0X2D时,输出数据速率是32KSPS,需要的SCLK速率是32K*120=3.84MHZ,刚刚低于SCLK的速率4MHZ。此情况下应该可以正常输出的,您可以附上ADC输出的波形图吗?包括 DRDY、SCLK、DIN、DOUT信号的波形?
,
xzq:
Amy Luo said:您可以附上ADC输出的波形图吗?包括 DRDY、SCLK、DIN、DOUT信号的波形?
感谢您的回复!如图所示为0X0D的波形,黄色为SCLK,蓝色为DOUT,紫色为DRDY,接收数据帧时DIN恒为低电平故未显示。第二个图为我收到的数据,可以看到一个数据帧是有完整的15个字节,但是数据部分全为0。
另外,当设置CLK1为0X02时SCLK波形失真很严重无法正常通信,我想知道这是否意味着晶振需要更换或者时钟电路设计出了问题?之前在另一个问答中您提及可以使用24M晶振来提高spi速率,我也想知道这是否会同步提高采样速率呢?
,
Amy Luo:
datasheet上我没有找到DRDY高电平时间是多少,在上面第一个图中,在DRDY高电平周期内,SCLK一共是多少个周期?
因为4.096MHZ/32kSPS=128,15个字占120个bit,剩下的8bit是DRDY高电平时间,在DRDY高电平时间大于8个SCLK周期,那么就说明SCLK的时钟频率还是不够的。
xzq said:另外,当设置CLK1为0X02时SCLK波形失真很严重无法正常通信,我想知道这是否意味着晶振需要更换或者时钟电路设计出了问题?
我想可能是SCLK PCB设计问题,如果SCLK走线比较长会引入寄生电阻电容,这会减缓时钟的上升和下降沿。
,
xzq:
Amy Luo said:在DRDY高电平时间大于8个SCLK周期,那么就说明SCLK的时钟频率还是不够的。
我再次检查了波形,在DRDY的高电平时间内确实是8个SCLK周期,所以应该不是时钟频率不够。
我目前的测试更怀疑是晶振频率的问题,请问ADC对于输入时钟有哪些限制呢?我尝试着去除了晶振,使用单片机产生的24M时钟作为CLKIN的输入,可以看到,即使在图中使用的CLK1=0X08,CLK2=0X28的情况下,数据帧之间有大段空白位置,依然出现了数据全为0的情况。同时目前在24M时钟下没有读取到任何有效数据。
,
Amy Luo:
设定的各时钟频率看下是否满足下面截图规格?这里牵涉到IOVDD电压和一些寄存器配置。
也建议您看下9.3.1 Clock 相关说明。
,
xzq:
我已经核对过手册,使用的24M时钟输入,供电电压3.3V,看起来都是符合限制的。我也检查了初始化的全过程,在每次指令后都发送0X000000进行返回接收,发送和接收如下
发送 接收
0X001100 0XFF0400
0X065500 0X065500
0X4BF800 0X2BF800
0X4C0000 0X2C0000
0X4D0800 0X2D0800
0X4E2800 0X2E2800
0X4F0F00 0X2F0F00
0X003300 0X003300
我认为初始化过程是符合要求的,但是我仍然获取不到数据,数据帧状态返回0X220000,其余所有数据位均为0。
,
Amy Luo:
现在的现象是
1、 使用晶振时,设置高输出速率时DRDY以设定速率输出,但是4通道输出全是0?但是在同样的电路状态下,配置低输出速率可以正常输出?
2、在使用单片机产生的24MHZ时钟时,不管配置为高输出速率还是低输出速率,DRDY输出频率正常,但是通道输出都全是0 ?
那么单片机可以产生16MHZ吗?以上述晶振下的配置情况,在低速时可以正常输出吗?
不管在上述哪种配置下,SCLK输出频率都是正确的是吗?
,
xzq:
1、对的,四通道同时启用且CLK2配置为0X2D和0X2E时,其他比较极限的速率测试发现同样有这个问题,例如配置为0X2F但只启用单通道。
2、对的,使用24M时钟时没有成功获取数据。
Amy Luo said:那么单片机可以产生16MHZ吗?以上述晶振下的配置情况,在低速时可以正常输出吗?
这个由于单片机限制,没有办法恰好产生16MHz,但是切换至12MHz时同样无法正常通信。
Amy Luo said:不管在上述哪种配置下,SCLK输出频率都是正确的是吗?
SCLK输出频率使用示波器读取都是正确的。
,
Amy Luo:
虽然写寄存器会有状态响应,但我还是建议您再使用读寄存器命令回读一下配置的寄存器值,看是否按期望值配置进去?然后再使用LOCK命令使接口进入locked 状态。
,
xzq:
Amy Luo said:虽然写寄存器会有状态响应,但我还是建议您再使用读寄存器命令回读一下配置的寄存器值,看是否按期望值配置进去?
这个我有试过,回读寄存器偶尔会有写入失败,但大多数时候都正常,且成功与否不会影响数据的读取结果
Amy Luo said:然后再使用LOCK命令使接口进入locked 状态
这个我会后续试一下。
,
Amy Luo:
xzq said:回读寄存器偶尔会有写入失败,但大多数时候都正常,且成功与否不会影响数据的读取结果
偶尔会有写入失败是通信信号质量造成的还是时序哪里有问题造成的?
寄存器写入失败如果正好是内部基准电压使能失败,那ADC转换数据就都会是0。建议您通过回读确保寄存器写入成功,然后LOCK一下,以防误操作改变寄存器写入值。
,
xzq:
Amy Luo said:偶尔会有写入失败是通信信号质量造成的还是时序哪里有问题造成的?
写入失败应该是信号质量的问题,只是偶尔的丢包,我有在调试模式下确认每个寄存器是否写入成功。
,
Amy Luo:
也就是说您已经回读了寄存器验证了寄存器已正确写入?
我刚注意到您在配置VNCPEN = 1时,内部基准电压选择了4V,这是不允许的,只能设置为 2.442 V,看下是否这里的原因造成的:
,
Amy Luo:
关于使用内部基准电压,配置后您可以在REFP管脚实际测量一下,看下内部基准电压是否正确输出?
,
xzq:
我尝试修改了这里的配置,但是结果依然是相同的,REFP管脚没有接出来,但是在低采样率下输出的数据是正确的。另外我想请问您一下,官方的EVM评估板是否可以外接MCU而不使用板载的呢?我看手册上用的是软件配置的方式,我们希望还是按我们产品的需求来使用编程方式进行测试。
,
Amy Luo:
您是有EVM板的是吗?您使用EVM板、PHI板和EVM GUI配置可以正常输出吗?
EVM评估板可以外接MCU,ADC的数字接口和供电电源都引至J7接口上了,使用EVM板时,需要您硬件配置M0\M1\M2管脚,其他管脚也都看下,默认配置是否您期望的或是否需要您修改,具体见:ADS131A04EVM User's Guide