OpenEdv-开源电子网

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

论24位转换器AD7714在嵌入式STM32软硬件设计中注意点

[复制链接]

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
发表于 2013-11-5 21:52:31 | 显示全部楼层 |阅读模式
 

首先声明本人还是在校本科生,这里所说的纯粹是个人体会,不一定正确,仅仅是拿来交流,欢迎大家一起针对我的问题讨论!fficeffice" />

 

一直在学习PCB板的绘制技巧,因为平时接触的都是低速板,因而在PCB布局布线中没有太多体会,不多的收获就是把Altium 这个软件玩的越来越溜了。但是软件毕竟只是一种工具,真正的秘诀在于你怎么使用它完成一个完美的设计,就像PS会的人很多,但是能够使用它把凤姐那样的人变成美女的估计没有几个!板子画过几块之后,突然对它貌似失去了一种兴趣,反而觉得有点枯燥无聊,于是一直企盼能有一个机会,让我布布高精度板或者高速板,调试调试,学习经验!

机会来了,这次BOSS接了个项目,测量传感器的信号,要求精度达到0.001mv!当他给我的那一刻,我就知道这是机遇也是挑战,毕竟要做这样一个高精度的测量仪器,以我目前的水平还真不一定够。但是BOSS很信任我,任我发挥!经过对项目了解,最后我选择了AD7714这样一款24位高精度的A/D转换器!

         AD7714 是美国 AD公司采用 -  技术生产的 24 位串行模数转换器,主要应用于低频小信号的测量。有5通道输入 ,可根据需要采用,3路差分输入或4路伪差分输入,其通信采用简单的三线数据接口,不仅简化了对器件的操作 ,而且减少了对系统资源的占用 ,其通信时序类似于模拟SPI,相对来说比较简单!

此次CPU采用的是STM32F107,用在这里确实有点浪费.只因为自己对此款芯片比较熟悉.本来是打算用103,但是BOSS怕我的设计出问题故没有同意!

硬件设计:



 



 

我每次用一个新的外设,基本上都是从网上COPY他的配置函数,但是这次没有找到.所以在写配置方面基本上没有经验.只知道按照时序逻辑去读写,但是最开始按照这个时序去写配置,一直读不出数,通过一步步的仿真,发现寄存器里面压根就没有写入状态字!反复查找也没有发现原因!最后查看这个时序时间才恍然大悟:



原来我只注意了却没有注意”,在数字电路中,高低电平的触发和保持都是需要一个时间的,并不是理想的那样!所以每一步你都得针对于这个时间去配置,因为STM32的精确延时只能达到1uS,而这里的很多时间都是以nS来计时的,故只能采用while(t--)这样的一个方法来达到延时的目的!

这也是51单片机控制外设和STM32控制后外设的不同之处,因为51的主频低,一个时间周期就是1us,而STM32的主频可以到达72Mhz,有时候频率快也不一定是好事啊,因为在51里面,有些地方你无需采用while(t--)这样的方法,因为他执行一句话之后,肯定已经过了1uS了,那么这个时间足够AD7714的高低电平触发,但是STM32不同啊,他的执行速度竟然达到了1.25MIPS(Million Instructions Per Second)。所以这里提醒各位精通于51的朋友,千万不要让BUG出现在这个地方!

下面来说我的PCB设计,因为之前或多或少的自学过一些高速板的知识,所以这次布局布线我可谓小心翼翼,下足了功夫!但是最后调试的时候还是出现了很大的问题!

因为精度要求在0.001mv,但是读出来的数最后一位抖动的特别厉害,按理说,一款高精度的PCB板,最后一位从在01之间这样反复抖动是可以理解的,但是你要是从0突然跳动到5再从5跳到9再跳到2……这样无规律的抖动,那么这一款产品就是失败的!经过仔细思索,想到了很多引起抖动的原因:

1、  电源不稳定,引起AD7714的数字电源引脚的逻辑电平出现错误,但是这一般是不会出现的,电源的抖动不可能有那么大;

2、  参考电压的不稳定,导致转化后算出的结果出现了很大的偏差;

3、  布局布线的问题,导致模拟信号对数字信号的干扰太大;

4、  信号本身确实是很不稳定,抖动太大了;

因为我采用的是高精度的AD780输出作为参考电压,万用表测量的时候也是很稳定的,所以不可能是2.那会不会是第4呢?因为相对来说传感器的信号是比较稳定的,但是它上面可能会有许多高频的毛刺干扰信号,这样AD转换后肯定会不稳定!但是这样一个高频的毛刺相对来说是比较好处理的,只要设计一个一阶低通RC滤波器即可,f=1/(2*3.14*R*C),选好截止频率,即可得到相应的RC的值,当然,这个RC的值肯定不止一个,所以很多时候你还得通过仿真或者不断地调试来选定最优值!但是奇怪的是,无论怎么滤波,效果没有丝毫的改善!现在我知道,激动人心的时刻来了,布线出了问题!于是仔细检查线路!

我用万用表测量传感器经过滤波后的信号,基本上是没有波动的,比较稳定,可是当把万用表的正极放在AD7714的信号输入口,负极放在芯片模拟地上时候,就可以很明显的看到了0.008mv的波动了,把负极再移到板子的另外一个地点,恐怖的是这时候的波动竟然达到了0.02mv。所以我明白了测量出来的0.005mv的波动并不是来源于信号本身,而是来源于你的PCB布局布线不合理,导致模拟信号对数字信号产生很大的干扰,显然这是你无法通过滤波解决的!
   



于是我自己仔细检查我的PCB设计:虽然有很多的基本注意点,每个信号都先滤波再进IC,数字电路和模拟电路分开设计了,连接点尽量靠近,并通过0R电阻相连;传感器模拟信号线到达AD7714的距离尽量短;同时对于重要信号还做了包地处理;每个IC采用单点接地,尽量减少串扰。可还有很多致命点!

 

1、在AD7714下面走了数字地线;



2、由于前期布局不合理,在单点接地后,而导致形成了环路,无形中产生了电磁干扰;



3、没有注意PCB中线宽的调整,导致阻抗突变;

当然还是有很多问题,只是我水平有限,仅仅发现这么一点!

 

这里我总结了数模布线的一些基本常识,分享给大家:

1、              低频电路对于模拟地和数字地要分开布线,不能混用

2、         如果有多个A/D转换电路,几个ADC尽量放在一起,只在尽量靠近该器件处单点接地,AGNDDGND都要接到模拟地,电源端子都要接到模拟电源端子;

3、         数字电路和模拟电路在同一块多层板上时,模拟地和数字地不需要排到不同的层上,但模拟电路和数字电路仍然要分开放置,  

4、         数字地严禁设计在AD转换芯片下面,因为这样会把噪声耦合给芯片,从而影响ADC正常工作。但是应当使模拟地在芯片下面运行,因为这样能减少数字噪声的耦合

5、         对于高分辨率的ad芯片,电源的耦合电路尤为重要,因此在印制电路板设计时,应对所有的模拟电源输入都加一级去耦电路,即用10μF钽电容和01μF陶瓷电容并联到地。这些去耦电路的元件应尽可能靠近芯片的电源引脚,这样才能获得更好的去耦效果和消除引线过长而带来的干扰

6、         数字器件和高频元器件应该靠近电源和插件放置;电源和地构成的环路尽量小.接地线应尽量加粗,若接地线用很细的线条,则接地电位随电流的变化而变化,使抗噪性能降低。

7、          如果把模拟地和数字地大面积直接相连,会导致互相干扰。不短接又不妥,有四种方法解决此问题∶1、用磁珠连接(只对某个频点的噪声有抑制作用,如果不能预知噪点,就不知如何选择型号,况且,噪点频率也不一定固定,故磁珠不是一个好的选择。)2、用电容连接;3、用电感连接(一般用几uH到数十uH)4、用0欧姆电阻连接。总结、建议,不同种类地之间用0欧电阻相连;电源引入高频器件时用磁珠;高频信号线耦合用小电容;电感用在大功率低频上。

总体来说:模拟电路对地的主要要求是,完整、回路小、阻抗匹配。数字信号如果低频没有特别要求;如果速度高,也需要考虑阻抗匹配和地完整。

 

所以这里写下这篇文章,分享给大家,因为自己前期的不注意,导致项目很不完美,没有满足客户的需求,0.005mv的波动起码我的这块板子上是没有办法消除的!诚心欢迎大家跟帖为我的设计再提出建议!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2015-3-17
在线时间
0 小时
发表于 2015-5-9 21:15:41 | 显示全部楼层
楼主可否将完整的原理图分享出来
回复 支持 1 反对 0

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2012-10-21
在线时间
23 小时
发表于 2013-11-5 22:06:49 | 显示全部楼层
lz如果是还没毕业的话那可以说是非常的牛逼了,前面你说到转换出来的数值最后一位跳动?是24位最后一位跳动?总之第一次做高精度能做到这个lz已经很厉害了。7714我没用过,以前一直用7710。
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
 楼主| 发表于 2013-11-5 22:16:59 | 显示全部楼层
回复【2楼】F8023M:
---------------------------------
7714是7710的升级版,性能有了很大的提升!不是24位的最后一位波动,是转成十进制后小数点后面第6位在波动!也就是0.001mv这位波动的特别厉害!要是24位最后一位波动,那我就真牛逼了!呵呵
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-11-5 22:21:04 | 显示全部楼层
恍惚 记得 7714 是16位的了?
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
 楼主| 发表于 2013-11-5 22:29:59 | 显示全部楼层
回复【4楼】aleda303:
---------------------------------
可以设置为24位!
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2012-10-21
在线时间
23 小时
发表于 2013-11-5 22:30:01 | 显示全部楼层
已经不错了,当时我们是做到17位不跳动,不软件滤波的话,算算精度没你的高
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-10-18
在线时间
5 小时
发表于 2013-11-5 22:45:11 | 显示全部楼层
话说24位的ADC真的是很高的精度了,我用过MAX1166的,16位的精度,当时买的时候一片进口的居然要100多...
不过楼主能控制在最后一位的跳动也算不错的了,学习了。
说道Altium软件,我倒是有个问题,软件菜单栏的“文件”下拉菜单有个“智能PDF”功能,我发现我在原理图上的中文总是没法正确转换到PDF中。不知道楼主有没有解决的办法
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2013-11-5 22:51:43 | 显示全部楼层
回复【楼主位】308709362:
---------------------------------
楼主,话说,我现在也在做一个高精度的测量仪器,也用24位AD,刚好手头上有AD7710,就先用AD7710做。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-5 22:52:40 | 显示全部楼层
不错,楼主说的1位跳动,应该不是指24bit里面的LSB,这样的ADC,那就太恐怖了吧....
应该是转换后的电压。
总结的不错,cool。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
 楼主| 发表于 2013-11-6 09:20:39 | 显示全部楼层
回复【7楼】tim4146:
---------------------------------
你好,请关注我的免费系列教学视频,http://www.openedv.com/posts/list/20957.htm
在第六讲里面详细教你解决,不懂欢迎交流!
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-11-6 11:04:11 | 显示全部楼层
楼主基准用的是什么?
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
 楼主| 发表于 2013-11-6 12:27:14 | 显示全部楼层
AD780产生2.5V基准电压!
回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
512
金钱
512
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-11-7 16:00:02 | 显示全部楼层
国产的CS1232也不错.一般用在电子称,血压计等高精度数据采样上面.感兴趣的可以讨论一下.
回复 支持 反对

使用道具 举报

4

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-11-8 11:51:26 | 显示全部楼层
我做的也是传感器采集,用的STM32L152,AD芯片用的32位的ADS1282,不过板子不是我画的,程序什么的都是我写的,感觉还蛮简单的。
芯片确实很贵,好像记得听领导说过300多一片,刚开始调试的时候特别小心,反复确认电压,没有问题了才敢焊AD芯片
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-11-13
在线时间
0 小时
发表于 2013-11-13 20:57:44 | 显示全部楼层
AD7714的那些时间限制有些标明的是min 也就是最小值,楼主的延时只要比这大就行,没必要跟的这么紧,跟的太紧更容易出问题。
To be a better man!
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2012-10-23
在线时间
2 小时
发表于 2013-11-14 12:12:10 | 显示全部楼层
厉害的学生真多!感谢分享!
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
 楼主| 发表于 2013-11-14 18:05:55 | 显示全部楼层
回复【15楼】海洋饼干:
---------------------------------
多谢,这个是的,但是为了保证实时性最好,这个时间我调了很久的!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-11-29
在线时间
0 小时
发表于 2013-11-29 17:38:12 | 显示全部楼层
楼主强人~~~
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-12-7
在线时间
1 小时
发表于 2014-1-17 10:38:15 | 显示全部楼层
回复【楼主位】308709362:
---------------------------------
请问下楼主,AD7714的差分输入的最小直流电压信号是多少?
回复 支持 反对

使用道具 举报

11

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2012-8-1
在线时间
68 小时
发表于 2014-1-26 12:56:41 | 显示全部楼层
谢谢分享宝贵经验
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-7-23
在线时间
8 小时
发表于 2014-7-23 19:07:22 | 显示全部楼层
多谢楼主分享经验
不知能否分享一下这个STM32的测试例程。学习一下代码调试SPI口。
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2014-7-23 20:00:26 | 显示全部楼层
感谢分享,版区有你更精彩!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-9-17
在线时间
0 小时
发表于 2015-5-19 10:47:55 | 显示全部楼层
回复【3楼】308709362:
---------------------------------
跪求楼主帮忙分析一下,我的电路有8个通道的模拟信号,通过ADG706进行通道选通,选通后输入16位的LTC1864进行模数转化,出来的结果老是相邻的通道之间有串扰,不知道是什么问题,如果楼主有空帮忙分析一下,谢谢!
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-5-6
在线时间
0 小时
发表于 2015-5-22 10:37:55 | 显示全部楼层
我要驱动AD7707,用的读写程序都是51的,现在也是显示不了。感觉也是时序的问题,求问楼主“while(t--)”是怎么实现的……
回复 支持 反对

使用道具 举报

17

主题

237

帖子

0

精华

高级会员

Rank: 4

积分
925
金钱
925
注册时间
2012-2-27
在线时间
393 小时
发表于 2015-9-17 16:49:27 | 显示全部楼层
AD7714 多少钱啊?好像很贵的样子
回复 支持 反对

使用道具 举报

4

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2015-3-17
在线时间
0 小时
发表于 2015-11-8 17:28:42 | 显示全部楼层
小弟要做一个基于TLC2652的热电偶信号调理电路,求指导,发一份资料给我,QQ邮箱1311824169@qq.com
回复 支持 反对

使用道具 举报

1

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-10
在线时间
49 小时
发表于 2016-3-24 00:45:03 | 显示全部楼层
308709362 发表于 2013-11-5 22:16
回复【2楼】F8023M:
---------------------------------
7714是7710的升级版,性能有了很大的提升!不是24 ...

对于24bitADC,在输入短路的情况下,即使从最低4位起稳定(即连同符号位21位稳定),就已经极好了。我们做16b高速的,都会有2-3位的抖动。
逆水行舟不进则退
回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11557
金钱
11557
注册时间
2014-4-1
在线时间
1318 小时
发表于 2016-3-24 09:23:01 | 显示全部楼层

TI有一篇文档,《24位AD如何做到23位》,
29L说得没错,做到21位就很好了。

回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11557
金钱
11557
注册时间
2014-4-1
在线时间
1318 小时
发表于 2016-3-24 09:24:05 | 显示全部楼层

看好LZ这样的学生,靠谱。
热情和认真程度值得学习。


回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11557
金钱
11557
注册时间
2014-4-1
在线时间
1318 小时
发表于 2016-3-24 09:26:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2015-5-17
在线时间
8 小时
发表于 2016-7-6 22:12:20 | 显示全部楼层
赞一个!
回复 支持 反对

使用道具 举报

72

主题

179

帖子

0

精华

高级会员

Rank: 4

积分
615
金钱
615
注册时间
2014-5-12
在线时间
158 小时
发表于 2019-4-3 10:19:08 | 显示全部楼层
楼主大神 可否给份AD7714的驱动代码  我正用到 调补出数据来,,,谢谢了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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