OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8357|回复: 27

ADC芯片的分辨率变化的问题

[复制链接]

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-3-11 15:29:37 | 显示全部楼层 |阅读模式
10金钱
楼主遇到了一个奇怪的现象,百思不得其解,跪求前辈们指点一下。

我在用一款ADI的芯片AD7683,单通道16位AD转换芯片。

电路图时这样的,AD7683进行温度的测量,VDD供电由5VLDO提供,参考电压5.00V由一片ADR02参考电压源提供。IN-接地,IN+分别接测量电压。被测量电压理论上的范围是05V.


测量的结果大小是没有问题的,可以读出大致准确的电压值。
输出的数据精度是有问题的,表现出数据的位宽随被测电压的大小而自动变化。

在0.455V左右,AD读出的数字在5957,5956,5955,5954左右之间浮动,可以达到1LSB的最小差值,16位数字是有意义的;
在1.667V左右,AD读出的数字在21807,21839二者之间跳动,而且总是这2个数,从来没有采集到别的数字,而这2个数字的差是32==2^5;
在2.5  V左右,AD读出的数字在32719,32655,32783三个数之间跳动,而且总是这3个数,从没有采集到别的数字,而他们之间的差是64==2^6;

表现出来的行为好像是AD芯片随着被测电压的升高而逐渐降低分辨率。

请问大家有没有遇到过类似的问题?

最佳答案

查看完整内容[请看2#楼]

很可能读取数据、管理数据方面有问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-3-11 15:29:38 | 显示全部楼层

很可能读取数据、管理数据方面有问题。


回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-11 15:40:27 | 显示全部楼层
借楼问下怎么上传图片啊?

AD7683接口驱动代码如下,
[mw_shl_code=c,true]u16 ADC_ReadWord(u8 ch)
{
        u8 clk_cnt,bit_cnt;
        u16 dout_word=0;
        ADC_SpiRstAll();

        ADC_CS(ch,CS_L);  //拉低对应的片选线,开始一次转换
        ADC_SpiDly(ADC_SPI_DLY);

        for(clk_cnt=0;clk_cnt<5;clk_cnt++)
        {
                ADC_CLK_H;
                ADC_SpiDly(ADC_SPI_DLY);
                ADC_CLK_L;
                ADC_SpiDly(ADC_SPI_DLY);
        }

        for(bit_cnt=0;bit_cnt<16;bit_cnt++) //读取16bit的转换值
        {
                u8 lvl = 0;
                ADC_CLK_H;
                ADC_SpiDly(ADC_SPI_DLY);
                ADC_CLK_L;
                ADC_SpiDly(ADC_SPI_DLY);    //DOUT电平在下降沿读取
                dout_word = dout_word << 1;   //MSB在前

                lvl = ADC_ReadBit(ch);
                if(1 == lvl)
                {
                        dout_word |= 0x0001;
                }
                else if(0 == lvl)
                {
                        dout_word &= 0xFFFE;
                }
        }

        ADC_SpiDly(ADC_SPI_DLY);
        ADC_CS(ch,CS_H);  //拉对应高片选线,停止本次转换
        return(dout_word);
}[/mw_shl_code]
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-11 16:19:44 | 显示全部楼层
小大尖 发表于 2016-3-11 16:03
可以看看这些问题及解答,https://ezchina.analog.com/search.jspa?q=AD7683   供参考下

先谢谢你啦。
ADI论坛里那个问题其实就是我问的。

我开始是直接给ADI的客服支持打电话的,推脱了几天也没消息了,后来又去论坛发帖,也没人回。这才来万能的Openedv看看有没有人能指点下
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-3-11 16:41:33 | 显示全部楼层

这种应用问题,客服确实很难回答的。
可以给你解释基本的应用步骤,不可能替你实现高精度。




回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-11 16:54:46 | 显示全部楼层
xuande 发表于 2016-3-11 16:40
很可能读取数据、管理数据方面有问题。

时序和数据管理方面不能说绝对严谨,但是在低电压下也是一直能得到正确的结果,程序并没有修改,但是被测电压升高后明显不行了
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-11 16:58:31 | 显示全部楼层
xuande 发表于 2016-3-11 16:40
很可能读取数据、管理数据方面有问题。

先谢谢您的回复,我在看看是不是有配置不对的地方
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-17 10:29:12 | 显示全部楼层
原来真有这样的隐藏属性,是设计成这样的,那就没办法了,也不知道是不是为了低功耗的方案, 看来只能换芯片了
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-3-17 10:44:49 | 显示全部楼层
xianshasaman 发表于 2016-3-17 10:29
原来真有这样的隐藏属性,是设计成这样的,那就没办法了,也不知道是不是为了低功耗的方案, 看来 ...


到底什么问题?


回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-17 10:55:15 | 显示全部楼层
xuande 发表于 2016-3-17 10:44
到底什么问题?

ADI的一款芯片AD7683随着输入电压的升高,输出的数据位宽会降低。比如,被测电压是0.5v,输出16位数据;当被测电压是2.5v,输出12位数据;当被测电压是5v,输出10位数据。和技术支持沟通过了,他们也没什么办法。我本人怀疑是一种过度设计的功能
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-3-17 11:37:25 | 显示全部楼层
xianshasaman 发表于 2016-3-17 10:55
ADI的一款芯片AD7683随着输入电压的升高,输出的数据位宽会降低。比如,被测电压是0.5v,输出16位数据; ...


首先表示怀疑!
AD公司不会这么做。

待我看看手册。

回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-3-17 14:03:25 | 显示全部楼层
xianshasaman 发表于 2016-3-17 10:55
ADI的一款芯片AD7683随着输入电压的升高,输出的数据位宽会降低。比如,被测电压是0.5v,输出16位数据; ...


手册看过了。
没有你说的这回事。

出这样的产品,而且手册没有任何说明,
AD公司就不是AD公司了。


回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-17 14:38:37 | 显示全部楼层
xuande 发表于 2016-3-17 14:03
手册看过了。
没有你说的这回事。

手册上确实没有说这个问题,所以我才去问的技术支持,然后按他们说的重新搭了一个测试电路,结果什么用都没有,电平的延时我已经从2ns一下测试到10ms以上了,仍然不好使。也说不定是买到假货了,已经考虑换芯片了
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-18 11:12:09 | 显示全部楼层
xuande 发表于 2016-3-17 14:03
手册看过了。
没有你说的这回事。

问题已经解决了,用ADS8320代替了这个芯片,TI产的,和AD7683pin对pin的,也是16位100ksps的,接口时序也都一样,今天刚到的,换上去测试了一下,问题都没了当时就选的2款一致的芯片,不过没买TI的,总觉得ADI的品质会更好,唉
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-3-18 14:31:42 | 显示全部楼层
本帖最后由 xuande 于 2016-3-18 14:33 编辑
xianshasaman 发表于 2016-3-18 11:12
问题已经解决了,用ADS8320代替了这个芯片,TI产的,和AD7683pin对pin的,也是16位100ksps的,接口时序也 ...

那么芯片的疑点就上升。

我曾经用过一种LT的AD,自带2.048v参考电压,
在淘宝上买几片,实际输出的电压值为2.40v,
从正规代-理商拿货就没有任何问题。

后来打听,有人说是官方实验、试产阶段的货品,非法留出了。这情况比较靠谱。
不是芯片设计问题,是市场问题。

回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2016-3-18 15:45:28 | 显示全部楼层
xuande 发表于 2016-3-18 14:31
那么芯片的疑点就上升。

我曾经用过一种LT的AD,自带2.048v参考电压,

原来还有这样的事。总之多谢您的指点
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-11 00:38:18 | 显示全部楼层
我是碰到8320的问题,去年打样就发现,在8320输入电压0.6左右以下,示波器点在输入脚,发现,8320会有电压倒出来
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-11 00:39:53 | 显示全部楼层
后来问以前同事,说这个IC就是这样的,他们也找FAE了,也没解释明白。其实这个应该是AD采样都有的,只是其他小一点,ADS1115就很小。
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-11 00:43:16 | 显示全部楼层
但是现在量产了,发现一个大问题,我的是1拖16个这个IC,SPI并联,并到8个左右以上,采样电压0.3以下,就少了70MV了,电压高了没事,并的少了也没事。不知道群里大师能搞懂怎么回事不?
回复

使用道具 举报

13

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2017-7-7
在线时间
42 小时
发表于 2018-6-11 08:40:46 | 显示全部楼层
你的基准电压改变了,读出的AD就肯定会变化
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2018-6-11 09:29:33 | 显示全部楼层
HZY//123456 发表于 2018-6-11 00:43
但是现在量产了,发现一个大问题,我的是1拖16个这个IC,SPI并联,并到8个左右以上,采样电压0.3以下,就少 ...

没太看明白你遇到了什么问题,是输入端的模拟信号被ADC芯片拉低吗?还是输出的数字信号在多路采样的场合变小?
我没用过这么多路的8320同时采样,而且偏置电压也没用过这么低,所以只能猜测性的提些建议。如果是直接干扰了输入的模拟信号,那有可能是AD的输入阻抗的问题,也有可能模拟电路的电源被干扰了。如果模拟信号没有任何问题,数字信号输出不正常,有可能像楼下说的那样,基准电压被干扰了,你的基准电压源怎么选的?
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-11 23:47:36 | 显示全部楼层
不好意思,现在才回来。还找昨天的问题。基准没问题,就在它边上。我的一拖16是线比较长,最长的1M,最短的20CM.今天发现是只连连接线,线的另外一头模块没接了。主板只连一个模块,也是把250MV读成180MV.但昨天说的接1.25V,就很准,很稳定。明天再验证,这线是影响了STM32,还是影响了ADS8320.我的方案就是一个STM32主板连了16个采集模块,都是DB15线连起来的。
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2018-6-12 16:20:45 | 显示全部楼层
HZY//123456 发表于 2018-6-11 23:47
不好意思,现在才回来。还找昨天的问题。基准没问题,就在它边上。我的一拖16是线比较长,最长的1M,最短的2 ...

基本不可能是影响到mcu了。如果是数字信号通信收到干扰,一般都是出现乱码,不至于很稳定的变小,而且模拟输入较大的时候没有任何问题。
要么是模拟电路本身受干扰,要么就是AD芯片内部的问题。

其实我用过的AD检测0点附近的小电压的时候也都是偏小,具体原因我也不知道,但是0.3v就开始有跳变好像有点大了。

ads1115没有这个问题是因为 它是个差分输入的ADC,它可以检测负电压和正电压,电压的0点不是它量程的0点,而是它的半量程附近。只检测正电压的时候相当于15bit的ADC。
如果你检测接近它量程0点的负电压,用反接输入管脚的方式检测一个接近量程上限的正电压(相当于测量一个负电压),估计ads1115也会有这个问题
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-12 23:31:21 | 显示全部楼层
今天还没搞定。你的就是8320有0.3以下测不准吗?差多少?但是我的,没连那个多空的DB15的线又可以测到那么小。哎业余帮忙的,只有晚上去找问题,累的要死。今天是每个模块加上拉电阻,也没效果。看波形,高电平的第一位都是一样的,再后面就少了。明天试试把基准降低看看。已经做了80个了,没得改了,不然就换其他IC了。明天7683换上去不知道怎么样
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-12 23:34:37 | 显示全部楼层
今天还把DB15里的2组运放用的电源断了,也不起作用,只剩下8320的电源了
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-13 01:10:55 | 显示全部楼层
如果按楼主说的,那要读0V左右的AD芯片是不是最好都选1115那样的才好
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2018-6-13 09:37:41 | 显示全部楼层
HZY//123456 发表于 2018-6-12 23:31
今天还没搞定。你的就是8320有0.3以下测不准吗?差多少?但是我的,没连那个多空的DB15的线又可以测到那么 ...

要是手里有7683就优先换一片试试吧,说不定就好了。

还有你用8320测低电压的到底有没有结果正常的时候?正常的时候硬件是怎么连的?不正常的时候电路有什么区别,信号从哪个节点开始就变得和预期不一样了?
你分析问题的时候要尽量缩小问题的范围,排除无关的变量的影响,一定要要孤立、片面的分析,不要整体的混到一起分析。
回复

使用道具 举报

0

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2014-3-21
在线时间
85 小时
发表于 2018-6-13 23:41:58 | 显示全部楼层
是的。就是最后缩小到,主板 16个DB线,一个模块。只要少几根DB线就可以,多一根就不行,不行就是值测少了。今天淘宝的7683没反应,数据线没电平。不过把5V供电降到3.3V就可以了,基准也降到2.5V去。试了2个是没问题的。改天多测测稳定性。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 11:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表