大家好,小弟最近在做一个关于ADC的滑动平均的算法,遇到问题,还请指教。
先说下正常情况,将ADC数据传送到终端的步骤如下:
ADC连续转换模式,每转换一个ADC数据,就触发一次中断。随后交给UART送到终端。
但后来发现,当ADC的转换频率为8KHZ时,ADC传给CPU的数据,UART来不急发送,因此导致数据会遗漏。
现在我们的应用,需要ADC转换速率仍然要高,还是8KHZ。
因此,想到了滑动平均算法,在送到UART之前,将8KHZ降采样到1KHZ,即将8K数据压缩到1K数据,rate=8,
即每转换8K的数据,传给UART的数据只有1K。
但是现在出现一个问题:
(1)当转换频率为8KHZ时,实际传给UART的数据是1KHZ,得出24bitAD的值 ;譬如 259876
然后我又测试了一下不用滑动平均算法时的, 1KHZ转换频率的AD值, 发现他们相差很大 134596
(两者在终端上显示的ADC数据数量很接近,只是AD值相差很多)
(2)但当转换频率降低后,譬如选取400HZ,实际UART频率是50HZ, 得出的AD值为 267589
不用滑动平均算法,转换频率50HZ, 得出的AD值为 275906
(两者在终端上显示的ADC数据数量很接近)
我就有疑惑,为何当转换频率大时,采用算法和不采用算法,它们的AD值会相差那么大?
两者在终端下AD值的数据量很接近,至少说明这个算法应该没什么大问题,难道还是因为我程序里计算AD值的算法有问题?
还请各位不吝赐教,小弟多谢 |