netbee 发表于 2016-9-26 15:58:42

提升 内置10bit ADC采样准确率的技术探讨

本帖最后由 netbee 于 2016-9-26 16:56 编辑

最近在做一个13串锂电池电压表的项目。用的是mega2560的板子,用串联分压,电压差计算单组电池的方法。
界面是这样的

实际使用中发现,电压精度远远没有达到5/1024 大概5mv的技术标准,误差高达0.1v。
研究了一下发现几个问题:
一、参考电压
这就是基准的问题,如果基准都不准确,那么测量误差肯定偏大。
于是用3位半的万用表实际测量3.3v口电压实际为3.281v,5v输出口电压实际为4.722v。
所以需要把代码调整成 (analogRead(A1)+1)/1024 * 4.722,这里有个小细节,为什么加1呢,因为实际采样包含0,所以总数是1024个。
如果本来就是0呢,那好我们加个判断语句就可以了。

二、纹波干扰

纹波是由于直流稳定电源的电压波动而造成的一种现象,把示波器准备好,首先我们来看看usb供电5v口的情况
http://image.geek-workshop.com/album/201609/26/165359jfzfi4okgj8acxii.jpg
参考资料,板子是10kHz,ADC采集一个数据需要100ms,采用逐次逼近算法获得数值。所以在100ms由于受纹波干扰,采样数值会有一定的摇摆。
这种情况怎么办呢?
1、换更好的电源
我们来看看用9v电池供电的情况,是不是好多了。

2、不能总用电池吧,那就需要滤波算法了
最出名的就是十大滤波算法大家可以参考
但我并没有发现适合自己的。
于是总结几个滤波算法的特点,自己写了个加权平均限幅滤波。
首先采样N次,筛选重复的数值并统计个数,选个数最多的几个值进行平均。
算法已经写好了,看的人多就放出来。谢谢

找节电池试试,先采样200次,获得样本数6个
0----171----2
1----172----3
2----173----31
3----174----159
4----175----4
5----176----1
统计得到174出现的次数最多,那么它就是我们最想要的值。

mmfinger 发表于 2016-9-26 16:15:54

本帖最后由 mmfinger 于 2016-9-26 16:20 编辑

用内部电压基准。不能满足要求再用选用高精度的外部基准如AD780,LTC6655,LM399,再不行只能上LTZ1000了。

netbee 发表于 2016-9-26 16:29:29

本帖最后由 netbee 于 2016-9-26 16:38 编辑

mmfinger 发表于 2016-9-26 16:15
用内部电压基准。不能满足要求再用选用高精度的外部基准如AD780,LTC6655,LM399,再不行只能上LTZ1000了。

对基准很重要。 采用内部基准1.1v 测量范围又太小了,48v的 分压要1:50了,分压电阻误差又增大了。

mmfinger 发表于 2016-9-26 16:30:28

内部电压基准不是1.1V吗?

mmfinger 发表于 2016-9-26 16:41:10

用电阻串联分压,要精准的话,电阻的温飘也不能忽视。用MCU的ADC,线性也是一个问题。

anduony 发表于 2016-9-26 22:04:21

我现在做的一格项目也是遇到这样的问题,使用十大算法,还是会出现点波动。还有就是不同的板子质量不一样,电压也有区别。不知道楼主能分享一下算法吗?

netbee 发表于 2016-9-27 18:49:18

anduony 发表于 2016-9-26 22:04
我现在做的一格项目也是遇到这样的问题,使用十大算法,还是会出现点波动。还有就是不同的板子质量不一样, ...

你做的哪方面项目啊?

anduony 发表于 2016-9-28 12:14:57

netbee 发表于 2016-9-27 18:49
你做的哪方面项目啊?

简单就是采集电阻值的大小,分辨100欧姆现在采集偶尔会出现一个刻度的误差

anduony 发表于 2016-10-22 11:21:00

这是我采集了两百个数据点发现数据并没有出现最大值分布的情况,看来楼主的方法可能不是很准确

netbee 发表于 2016-10-28 18:17:49

你这误差系数也太大了,看来只能加权平均了。

maxims 发表于 2021-6-26 21:16:49

弱弱的问一句,为何不上专门的adc?
页: [1]
查看完整版本: 提升 内置10bit ADC采样准确率的技术探讨