[STM32F4] DMA双缓冲模式

[复制链接]
5044|26
 楼主| wyjie 发表于 2021-6-3 23:30 | 显示全部楼层 |阅读模式
我使用STM32F4的ADC DMA方式,DMA采用双缓冲模式,采样数据为6通道正弦波形,当DMA在切换双缓冲的地址时,会导致ADC数据不准确,我对采样数据做递推平均值算法,在地址转换的位置会存在尖峰,我是每25个周期转换一次。
zhenykun 发表于 2021-6-3 23:32 | 显示全部楼层

还有什么现象?能再详细描述下吗?
 楼主| wyjie 发表于 2021-6-3 23:35 | 显示全部楼层
做平均值递推算法后的情况,所采样波形为50HZ,25个周期为500ms,地址切换的时刻在1600点,
 楼主| wyjie 发表于 2021-6-3 23:37 | 显示全部楼层
 楼主| wyjie 发表于 2021-6-3 23:39 | 显示全部楼层
renyaq 发表于 2021-6-3 23:41 | 显示全部楼层
切换的时候不准也正常,最好将这段数据滤出掉;
heweibig 发表于 2021-6-3 23:43 | 显示全部楼层
6通道,采样的数据频率也不高,可以用DMA+中断啊;
 楼主| wyjie 发表于 2021-6-3 23:45 | 显示全部楼层
我需要把采样数据通过以太网发送道上位机软件,因为数据量比较大,所以采用了双缓冲的模式
xxrs 发表于 2021-6-3 23:48 | 显示全部楼层
哦,没用过这个模式;也有可能ST本身的BUG吧;
chuxh 发表于 2021-6-3 23:50 | 显示全部楼层
用一个缓冲就可以了,长度设为两倍,不需要切换地址,用 DMA 半传输中断和完全传输中断,半中断时取前半部分数据,完全中断时取后半部分数据
 楼主| wyjie 发表于 2021-6-3 23:53 | 显示全部楼层
用一个缓冲试了以下,也是有这个问题,缓冲区满切换到首地址是,也会发生,可以看一下图上,第3200点的数据,很明显有偏差了。
 楼主| wyjie 发表于 2021-6-3 23:55 | 显示全部楼层
jiajs 发表于 2021-6-3 23:58 | 显示全部楼层
你这个波形没看出来哪里有明显偏差了,ADC采样存在一定偏差是肯定的,要画出漂亮的波形,你还得再进行一下FIR或IIR滤波了
zhenykun 发表于 2021-6-7 20:55 | 显示全部楼层
你可以假定一下别的地方出错?
stly 发表于 2021-6-7 21:03 | 显示全部楼层
芯片的设计是很严谨的。只要能用都是专家级经过深思熟虑的。
xxmmi 发表于 2021-6-7 21:05 | 显示全部楼层
不要首选怀疑芯片。你应该首先验证代码。其次是分析硬件。
dengdc 发表于 2021-6-7 21:08 | 显示全部楼层
或者把双缓冲的长度变成2/3看误差是不是还对应的上
 楼主| wyjie 发表于 2021-6-7 21:11 | 显示全部楼层
用单缓冲试了试,长度改为原来的2倍,出现尖峰的地方也随着改变了,都是在DMA缓存满后,切换地址的地方有问题
 楼主| wyjie 发表于 2021-6-7 21:15 | 显示全部楼层
比如我从3200个点的地方缓存满了,从第3200个点之前取64个点做平均,或者从3200之后取64点做平均,值都很正常,就是从3200点之前取一部分采样数据,之后取一部分数据做平均,值就会有很明显的偏差
 楼主| wyjie 发表于 2021-6-7 21:18 | 显示全部楼层
我用的是递推平均值算法,每次错后一点,做64点(每周期)平均值,和用FFT做有效值得出的波形是一样的,为了查找问题方便,用的求平均值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

927

主题

12706

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部
0