打印

降采样后AD值与原先AD值相差很大,还请赐教

[复制链接]
1640|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
barryyan|  楼主 | 2010-6-17 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, hz, dc, ADC, kHz
大家好,小弟最近在做一个关于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值的算法有问题?

还请各位不吝赐教,小弟多谢

相关帖子

沙发
barryyan|  楼主 | 2010-6-20 14:20 | 只看该作者
现在通过一些对程序的修改。有几个问题请教:

(1)当我把降采样的算法放在main函数中时,AD转换频率为4KHZ时,会造成AD数据来不及发到终端。

而把降采样的算法放在ISR函数中时,却能够做到数据不遗漏。

      难道因为算法在main函数中,ISR程序中触发AD中断的速度过快,而导致来不及将AD的值传给UART?


(2)发现当AD转换频率为4KHZ时(因为RATE=8,即实际AD传输速度为500HZ时),能够将AD的24bit

值传到终端。但是AD的24bit值会随着时间的增加而缓慢减小。 时间一长,数据会和刚开始的数据相差很多

     请问这是不是算法里面还有问题?


(3)当设置AD转换频率为8KHZ时,只能发送3组数据到终端,然后就停止了。

  难道是频率太快,导致ISR中的阻塞?

还请各位不吝赐教,谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

137

帖子

0

粉丝