今天在用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的芯片。大家可以根据实际情况来延迟。
因为语言能力有限,还请谅解,如果还有什么不懂的,可以留言。我会尽可能的去帮助大家。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
楼主很细心,也很善于推理验证
一周热门 更多>