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

2019-07-21 03:35发布

 首先声明本人还是在校本科生,这里所说的纯粹是个人体会,不一定正确,仅仅是拿来交流,欢迎大家一起针对我的问题讨论!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)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
aaaa9780
1楼-- · 2019-07-23 16:42
回复【楼主位】308709362:
---------------------------------
请问下楼主,AD7714的差分输入的最小直流电压信号是多少?
2012lc
2楼-- · 2019-07-23 20:24
谢谢分享宝贵经验
robinyuan
3楼-- · 2019-07-23 21:37
多谢楼主分享经验
不知能否分享一下这个STM32的测试例程。学习一下代码调试SPI口。
xouou_53320
4楼-- · 2019-07-23 22:35
感谢分享,版区有你更精彩!
mmyg
5楼-- · 2019-07-24 03:02
回复【3楼】308709362:
---------------------------------
跪求楼主帮忙分析一下,我的电路有8个通道的模拟信号,通过ADG706进行通道选通,选通后输入16位的LTC1864进行模数转化,出来的结果老是相邻的通道之间有串扰,不知道是什么问题,如果楼主有空帮忙分析一下,谢谢!
风风无痕
6楼-- · 2019-07-24 03:53
我要驱动AD7707,用的读写程序都是51的,现在也是显示不了。感觉也是时序的问题,求问楼主“while(t--)”是怎么实现的……

一周热门 更多>