微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS8331设置为单通道采集,而结果却是4个通道轮流采集,而且转换出来的结果误差很大

ADS8331设置为单通道采集,而结果却是4个通道轮流采集,而且转换出来的结果误差很大

时间:10-02 整理:3721RD 点击:

(1)先是写CFR,把0XE3FD通过单片机的MOSI发送到ADS8331的SDI;(2)然后读CFR值,读回来的值为0XE3FD;(3)接着选通道1,指令为0X1000;(4)接着读转换结果,指令为0XD000;(5)最后不断在(3)(4)循环.   但结果发现该AD是4 个通道轮流采集,而且转换出来的结果误差很大,比如我把通道1接3.39V直流电压,转换出来的结果却是61000左右(参考电压为4.096V)。原理图如下

Manual trigger下需要特定的read data指令?你试试看SDO在读1通道结果的同时,在SDI上继续写一个0x1000,看看这样可不可以。

Manual trigger下也是需要特定的read data指令的,请看datasheet第九页的图Figure1时序图中SDI引脚就是一个read data指令(0XDXXX)。我按照你的建议,SDO在读1通道结果的同时,在SDI上继续写一个0x1000,结果还是4个通道轮流转换。同时还发现发送指令OXC000读CFR值时一般是返回0XE3FD,但偶尔也会返回0X03FD,不知应该是返回哪个值是正确的?还有就是无论返回的是0XE3FD,或者是0X03FD,结果都是4个通道轮流转换。

1. 手册27页CMR的注解1里有说明,出现在SDO上的16个数,前4个是上次转换结果的高四位,后12个是CFR。所以读CFR时只要看后12位就行,也就是你读到的0XX3FD。

2. SDO读通道1结果时,你没写0XDxxx,直接写的0X1000?我怀疑是哪个地方不对,进入自动通道切换那种模式了。你可以试试一开始就选通道2,其他按照你原来的写法,看看会不会只扫2,3,4这三个通道的数据。

另外,每选择一次CMR,就要用一个~CS为低的时间段。就是说,先是~CS跳低,持续16个SCLK读结果,此时SDI的命令是Read data,然后~CS变高,这是第一个~CS为低的时间段。之后~CS还要跳低,SCLK在给16个周期,这段时间SDI给选择通道的命令。你确认一下是不是在应用过程中这两次~CS都写对了。

在SDO读通道1结果时,我用两种方法(一种写0XDxxx,另一种是直接写的0X1000)测试过了,依然是4个通道轮流转换。而且每选择一次CMR,都用一个~CS为低的时间段。比如说,我先是

(1)把CS拉低,向AD写CFR,把0XE3FD通过单片机的MOSI发送到ADS8331的SDI,延时大于16个SCLK,之后把  CS拉高;

(2)再把CS拉低,然后通过指令0XC000,读CFR值,读回来的值为0XE3FD或0X03FD,延时大于16个SCLK,之后把CS拉高;

(3)再把CS拉低,然后通过指令0X2000,选择通道2,延时大于16个SCLK,之后把CS拉高;

(4)把CONVST控制线拉低,延时200nS左右(示波器观测),把CONVST控制线拉高,开始转换;

(5)等待转换结束,也就是单片机监测到AD的EOC引脚为高电平时进入下一步读数据,若为低则一直监测,直到EOC拉高(用示波器能看到EOC线上的低脉冲);

(6)读数据,把CS拉低,发送指令0XD000,延时大于16个SCLK,之后把CS拉高;

(7)  最后不断在(3)~(6)间循环。

不知这样操作对不对? 另外,我按照你的建议,试了一下当SDO在读2通道结果的同时,在SDI上继续写一个0x2000,结果还是4个通道轮流转换。

还有就是3.382V(用6位半的万用表测得)的直流电压,转换出来的结果却是60100左右(参考电压用6位半的万用表测得为4.097V,这个参考电压一直很稳定),这误差为什么会这么大,是不是我的原理图有什么问题??或是其他什么原因?

1. read data是不必要的,在每个读SDO的时间段,SDI上只需要写下一个转换周期要选择的通道即可。

2. 你可以把TAG bit打开,这样你就可以直接从SDO上读出来,究竟是哪一个通道在做转换。读TAG bit需要额外的SCLK,注意一下。

3. 测试时可以考虑用内部的clock做转换时钟。

这个关于通道的问题我再试试有什么办法。但转换误差怎么会这么大?

参考电压用6位半的万用表测得为4.097V,这个参考电压一直很稳定。

当AD的输入信号为直流电1.687V时,理论上转换出来的应该为:(65535*1.687)/40097=26985,但AD实际转换出来的值为29950

直流电是从什么设备上输入给AD的?AD前最好有个前端运放,用来buffer一下。因为AD内部是基于开关电容的采样电路,如果建立不完全,有可能出现错误转换结果。

直流电我试过从以下设备输入给AD(AD的前端有一个四运放组成的跟随器):

(1)1117-3.3芯片的输出,实测值为3.384V,理论上转换出来的应该为:(65535*3.384)/40097=54097,但AD实际转换出来的值为60000左右;

(2)传感器的输出(电压值),实测值为1.687V时,理论上转换出来的应该为:(65535*1.687)/40097=26985,但AD实际转换出来的值为29950左右;

用内部的clock做转换时钟可以实现单通道转换,就是转换误差太大了,而且AD的模拟输入之前有加跟随器作为缓冲的。为什么呢?

两点请LZ注意:

1. 你原理图中,REF-管脚没有接地。reference voltage不对,所以转换结果也会是错的。

2. 0XE3FD到CFR,你的转换clock将来自SCLK,请注意。

谢谢楼上指出我原理图中的错误,当我的REF-管脚接地之后转换误差小了很多,现在转换误差大概是100个码值左右,而且都是偏小(相对理论值),可以初步认定这个误差是reference voltage引起的。

现在的问题是如何调这个reference voltage,这个基准电压芯片REF5040在原理图上有什么不对吗?输出电压的那个滤波电容C31我试过用22uF的电解电容、钽电容以及10uF的瓷片电容……结果reference voltage都会有1mV左右的偏差。请问这个是什么原因引起的偏差?

Reference电路设计注意:1.  Vout的输出滤波。2. Trim pin增加1uF的电容(手册图31)。最佳的推荐如下图(Trim pin的1uF电容没画出来),详细的介绍也见附件。

1563.TI_Dale_Reference circuit design.pdf

Regards

Dale

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top