消除STM32内置ADC采集数据的波动

2019-10-14 20:23发布

今天在用ucosiii做ADC采集实验时,偶然发现同样的采集程序,在ucosiii上得到的数据很稳定,在接3.3v时,得到的稳定数据为3.299;并且得到的值完全没有跳动。于是猜想是不是在每一次读取数据的时候,加一个小延迟就会消除数据波动?然后进行ADC在STM32上进行裸跑,经过反复测试,发现确实是这样。我测的的最小延迟是5ms,可以得到0.9mv无任何波动的偏差。因为条件问题,我只是转换了地和3.3V,经过stm32内置AD转换,得到的结果分别是:0.0000和3.2991V,当然我这只是保留了小数点4位,如果5位,6位的话,会更低吧,我测了小数点5位的值是3.29919V。当然如果延迟低于5ms,延迟越低,跳动越大。希望这个偶然的发现可以帮到大家。
最后再说一下方法,
一定要在读取数据前延迟5ms,并且两者要紧挨,如下:

delay_ms(5);//这是延迟
  adcx=ReadADCAverageValue(0x00); //这是采样的数据。
两者必须连续执行。不可以分开。否则也会发生跳动。
不知道和采样频率有没有关系,我实验的采样频率是12M的,如果有时间,大家可以去实验一下采样频率的关系。
还有延迟时间或许会跟型号不同而不同,我用的STM32F103的芯片。大家可以根据实际情况来延迟。
因为语言能力有限,还请谅解,如果还有什么不懂的,可以留言。我会尽可能的去帮助大家。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
龙之谷
1楼-- · 2019-10-15 00:59
谢谢分享,抽时间测试一下

楼主很细心,也很善于推理验证
daska110
2楼-- · 2019-10-15 03:45
 精彩回答 2  元偷偷看……
gaofto
3楼-- · 2019-10-15 09:07
回复【2楼】龙之谷:
---------------------------------
也是偶然发现的,分享一下,让别人以后也少走弯路。虽然不是什么很惊艳的发现。
gaofto
4楼-- · 2019-10-15 10:33
回复【2楼】龙之谷:
---------------------------------
同时也很期待你的验证和补充,防止出现片面性,误导了大家。
gaofto
5楼-- · 2019-10-15 12:02
回复【3楼】daska110:
---------------------------------
一起分享学习
波少
6楼-- · 2019-10-15 14:50
谢谢楼主分享心得,LZ善于推理善于发现的精神值得学习!!!!!

一周热门 更多>