AD7799
称重系统
从AD7799的方案定型,到PCB样板的打样就只有几天的时间,可以说很顺利。简单的说一下模拟部分的电路:传感器信号经简单的一阶RC低通滤波直接接到AD7799的AIN1+、AIN1-;AD7799的DOUT、SCLK、DIN、CS经ADuM1401跟单片机相连,单片机本身带有SPI口,但本人觉得设置SPI积存器比较麻烦,就采用模拟SPI跟AD7799进行通讯;系统采用2个电源模块分别对模拟电路和数字电路进行供电,粗略的算了一下模拟电路部分的功耗,采用LM2931对模拟部分供电,经精密电阻分压得到理论值2.5V做AD7799的参考电压,但是实际的参考电压只有2.46V,不知道是否是电阻精度不够还是LM2931的功率不够造成的。没什么特别的,电路方面太简单了。只是布板,布线的的时候特别的注意了模拟电路数字电路的区分,屏蔽,地线都做了相应的处理,很没有工具,不能拍照给大家分享一下。
把我采集到数据晒出来给大家看一下:
电压:0099399
电压:5436999
电压:4218166
电压:3037177
电压:3406400
电压:4342766
电压:1431744
电压:1423166
电压:1414433
电压:1405799
电压:1397144
电压:1440344
电压:1438177
电压:1436099
电压:1451166
电压:1451166
电压:1451155
电压:1451144
电压:1451111
电压:1451177
电压:1451122
电压:1451177
电压:1451111
电压:1451155
电压:1451111
电压:1451088
电压:1451088
电压:1451088
电压:1451088
电压:1451088
电压:1451088
电压:1451088
电压:1451088
电压:1451088
电压:1451077
电压:1451077
电压:1451077
电压:1451077
电压:1451066
电压:1451055
电压:1451044
数据是通过串口显示出来的,AD7799必须经过一段时间才能稳定下来,所以采集到的前几次数据不是真实的结果,必须过滤掉,当然,得到的这些数据也是经过算法处理的。稳定之后会发现,只有后两位是变化的,原因很多,噪声干扰是必然存在的,不可能没有,只可能把它抑制在一个很小的范围内。经转化为重量后发现,600g的量程可以显示到0.003g,最后的那位有点波动,但不会超过10。这个结果比我想象中的要好的多,但还是有很多问题需要解决。
发表此贴,是为了结识有经验的人,大家讨论一下,怎样才能把精度再提高一些,精益求精。
问题1:
模拟电源的不稳定。
现象:
5V的模拟电源我们经测得,实际只有4.90V,一方面给AD7799上电,另一方面做传感器的激励电源,激励电源的不稳定,那么AD的输入就会不稳定;模拟电源经精密电阻分压得到的AD7799参考电压是2.46V,参考电压的不稳定,直接影响到AD的采样输出结果。
问题来源:
模拟电源的不稳定,对这种数据采集的精度到底会影响多大呢,不得而知,我没有办法验证。
问题的解决构想:
在最初设计电路的时候,并没有在稳压块的精度、温漂、有效值噪声方面有太大的在意。在看了很多方面的资料之后才意识到其重要性。AD7799决定采用ADI的参考源:ADR03 2.5V 精度+/-0.1%,3ppm/℃,1.03美元;
或ADR381 2.5V 精度0.24%,3ppm/℃, 0.76美元;
5V稳压IC:ADP3330ARTZ-5,CNR = 10 nF时,输出噪声为47uV;
CNR = 0 nF时,输出噪声为95uV. 0.62美元。
或LT1763 输出噪声20uV. 就是有点贵。
请ADI的专家看一下,我选择这几款是否合适。大家也可以推荐几款比较经典的IC,但是噪声一定要低,RMB10元左右都可以。
问题2:
AD采样速率太低
现象:
AD7799的采样速率可以通过写模式寄存器进行设置,但是其精度是靠牺牲速度来完成的,就是说高精度必须在低转换速率下完成。这样在对数据结果的算法处理上就没有太多的选择了,不能选择那种很浪费时间的的算法。
寻找解决问题的方法:
调试中,确实证明了,当AD7799采样速率在4.17HZ时精度是最好的。而在这种速率下就要选择合适的算法,我只用了简单的几种算法,要保证有足够大的数据更新速率。在算法处理方面呢,我的经验很少,希望大家能多给点意见。
|
问题3
:
干扰的屏蔽或处理
现象:
在称重过程中,轻轻的震动都会对系统造成干扰,很明显的,在无输入的情况下,敲动桌子,显示数据会在0.3g
左右跳动;同样手机信号对称重系统的干扰是十分严重的;
问题的解决:
震动的影响,可以通过最简单的加权法来弥补,如下:
uint32 idata
oldresult00,oldresult01,oldresult02,oldresult03,oldresult04,oldresult05,newAdcResult;
oldresult00=oldresult01;
oldresult01=oldresult02;
oldresult02=oldresult03;
oldresult03=oldresult04;
oldresult04=oldresult05;
oldresult05=newAdcResult;
newAdcResult = adccon();//
取ADC
转换电压结果
return(7*oldresult00+6*oldresult01+5*oldresult02+4*oldresult03+3*oldresult04+2*oldresult05+1* newAdcResult)/28;
可以自己选择系数,但是最新数据的系数越小,其对于跳动的抑制能力越强,但这样也会影响到系统结果的稳定时间,具体的需要在调试中实践。
手机信号的干扰,主要可以通过加屏蔽罩进行屏蔽。但还是无法做到十分有效,还是需要大家集思广益。
写这篇文章,也是确实在开发中遇到的问题了,想在这里跟大家讨论一下,怎样来解决。关于AD7799
,个人感觉在程序上很简单。
AD7799
在使用中,我简单的翻译了一下,有十几页,有需要中文资料的,在这里留下邮箱地址,有空的时候发给大家。
板子还在更新中,遇到新问题,我会继续在这里更新。希望大家能在这里充分的讨论一下,来提高精度。
零点漂移比较严重。
传感器是采用电阻应变片式的,当放一个接近满量程的重量上去之后,它的重量会慢慢增加,在拿掉被测物体后,不会立刻恢复到零点,要经过很长的时间才能恢复到零点。
那么这个零点漂移是由什么来引起的呢,是应变片发生形变不能正常恢复?还是受温度带来的零漂,或是其他的?
|