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

ADS131A04: 在ADS131A04异步中断模式下应该如何读取其AD转换的结果

Part Number:ADS131A04Other Parts Discussed in Thread: TMS320VC5509A

我使用TMS320VC5509A的Mcbsp模块配置为spi来控制ADS131A04。其中数据接收和发送均为每帧1字,每字32位。

目前发送命令字后ADS131A04的回应均正确。

ADS131A04主要寄存器配置如下:

ADS13_REG(WREG|A_SYS_CFG, 0X78); //enable internal reference volatage (4.0v)
ADS13_REG(WREG|D_SYS_CFG, 0X3E); //Fixed six device words per frame for the ADS131A04
ADS13_REG(WREG|CLK1, 0X08); //sclk input fICLK=200Khz
ADS13_REG(WREG|CLK2, 0X29); //fMOD=200Khz/2 fDATA=fMOD/200=500hz
ADS13_REG(WREG|ADC_ENA, 0X0F); //ADC CHANNEL ENABLE ALL

我尝试过在收到DRDY信号后不停地发送0xFFFFFFFF或0x00000000,但接收到的结果全是0。

请问应该如何读取AD的转换结果呀?

Amy Luo:

您好,

目前您是否已经验证过寄存器写入后可以正确读出?

是否检查了各供电电压正常?

基准电压输出是否正常?

晶振是否起振?

是否按照datasheet 中 Figure 106. ADS131A0x Configuration Sequence 流程图配置设备?

您是否可以附上原理图以供检查?

,

Yujie Wang:

感谢您的回复!

1.我在写入寄存器后,尝试读取过A_SYS_CFG和D_SYS_CFG,并分别返回0x2B78和0x2C3E,均符合数据手册中对读取寄存器回应的描述(001a aaaa dddd dddd)。

2.对于供电电压、基准电压输出以及晶振起振我认为是没有问题的。因为同样的供电下,利用stm32f103可以很好地读取数据(在收到DRDY信号后发送24次8位0x0000)。问题中提到的配置寄存器存在一些错误,这里更改为:

ADS13_REG(WREG|CLK1, 0X08); //sclk input fICLK=16.384Mhz
ADS13_REG(WREG|CLK2, 0X20); //fDATA=500hz

3.由于我想连续读取数据,我与数据表Figure 106所示流程图唯一的区别是没有在使能AD后锁定寄存器。

4.原理图如下:


TMS320VC5509A与ADS131A0A4连接为:
GPIO6——RESET
FSX0——CS
CLKX0——SCLK
DX0——DIN(MOSI)
DR0——DOUT(MISO)
其中我判断DRDY是通过发送0x2200读取寄存器 STAT_1并判断其 F_DRDY位是否为1。
数字地和模拟地均由stm32f103提供。

5.我的初始化过程输入如下图所示:

期待您的回复!

,

Amy Luo:

您是在2种应用中用到ADS131A0A4是吗?一种主控端是 stm32f103,然后是这一种主控端为TMS320VC5509A? 主控端是 stm32f103时工作良好?

为什么说是“数字地和模拟地均由stm32f103提供。”主控端不是TMS320VC5509A吗?

检查下M0、M1、M1是设置在期望的电平状态吗?

电路图中将地平面划分了几种地,这几种地之间是否使用0欧姆短接以进行共地?

,

Yujie Wang:

是的,都用的是ADS131A04,其中利用stm32f103时ADS131A04工作良好;而用TMS320VC5509A作为主控端时,接收到的数据全为0。

其中TMS320VC5509A作为主控端时,ADS131A04由stm32f103进行供电。在之前有尝试过利用一块stm32f103对ADS131A04进行供电,另一块stm32f103对ADS131A04进行控制,AD是可以很好地进行工作的。因此我认为利用stm32进行供电,5509A进行控制是行的通的。

M0、M1、M2均接到了VDD-T(3.3V)

电路图中的模拟地与数字地都进行了共地。

,

Amy Luo:

TMS320VC5509A是否与ADS131A04共地?

使用TMS320VC5509A与使用stm32f103读取转换结果的过程有什么特别不一样的地方吗?

我看您上面截图中刚开始是 val=0.021015;val=253584.921875,这里是读取的转换数据吗?这里一开始并不是0;

读取其他状态寄存器是否有报错?

,

Yujie Wang:

您好,之前的测试中确实没有共地,但我尝试短接stm32的GND和5509A的GND后收到的数据依然全是0。

5509A和stm32控制ADS131A04时,ADS均处于异步中断模式,因此读取数据的方式理论上应该是相同的。其中5509A的程序是仿照stm32写的,如下所示,stm32发送24次8位的0,dsp发送6次32位的0:

我尝试了读取其他寄存器,反馈都符合预期。刚开始不为0的数就是读取的转换数据,但数值除了第一个都有点离谱,每次都会有些不相同,我也很疑惑。

,

Amy Luo:

您没有使用ADS131A04的DRDY pin是吗?那您方便用示波器测量下DRDY 的输出频率吗?

,

Yujie Wang:

是的,没有用DRDY,但是用示波器测量DRDY的输出频率暂时不是很方便QwQ

,

Yujie Wang:

您好,感谢您的回复,我想再确认一下我的做法是否有问题。

我目前不方便测量DRDY信号的频率,所以我试着写了个中断程序,结果一直收到同一个字符:

因此我想确认一下我的做法是否有问题。根据ADS131A04用户手册对其异步中断模式的描述(Figure 58),当DRDY信号变化时AD转换数据开始传输:

对于这款ADS131A04(M0、M1,M2均接高电平),我理解的数据传输过程如下:

因此,根据Mcbsp配置为SPI后的时序图(如下,spru592E,Figure 6−3),我只用提供5×32个时钟信号就能完整地接收到数据,因此我在程序中进入中断后发送了5次32位的0x00000000。

,

Amy Luo:

好的,我确认下以上信息

,

Yujie Wang:

您好,我已经找到原因了,问题出在帧同步信号。

AD的D_SYS_CFG寄存器的FIXED位设置为1,数据格式为6字帧; CRC_EN位设置为0,禁用CRC。AD的传输格式如下(数据手册figure 50a):

在传输期间需要帧同步信号一直保持低电平。

使用TMS320VC5509A的Mcbsp模块配置为SPI后,无论是收数据还是发数据帧同步信号均会短暂地跳变到高电平(figure 2-12 和 figure 2-14)。因此利用FSX0引脚连接ADS131A04的CS引脚无法读取数据,仅能读取最开始的状态字。


我是用GPIO口代替FSX0引脚后就能正常接收AD转换数据了。

,

Amy Luo:

很高兴您的问题得到解决,也非常感谢您的反馈!

赞(0)
未经允许不得转载:TI中文支持网 » ADS131A04: 在ADS131A04异步中断模式下应该如何读取其AD转换的结果
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1