硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1811|回复: 14
收起左侧

F429接AD7606并行8080传输,提高速率到10kHz以上出现毛刺,求大哥指点

[复制链接]

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2021-9-7 09:40:34 | 显示全部楼层 |阅读模式
5.png 10.png 20.png 通过调节定时器来改变采样率,采集后UDP上传至上位机,采集是用BUSY触发中断读取采集,不知道为啥F429采集会出现问题。。。。求大哥指点一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-9-7 10:04:52 | 显示全部楼层
看下是不是你的工程没有处理过来。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-7 15:04:21 | 显示全部楼层
eric2013 发表于 2021-9-7 10:04
看下是不是你的工程没有处理过来。

您是指哪一块处理?我设置的传输大小是一帧1024点,用抓包软件观测采样率正确且每帧数据也正确,matlab绘制的是20帧的数据
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-9-7 16:02:08 | 显示全部楼层
ypmen1 发表于 2021-9-7 15:04
您是指哪一块处理?我设置的传输大小是一帧1024点,用抓包软件观测采样率正确且每帧数据也正确,matlab绘 ...

你的程序是不是中断里面读取的,每次读取8个通道的数据值。然后你把中断速度开到20KHz时候,这个地方是否处理的有问题,20k按说无压力。

别的地方你再找找。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-7 16:50:01 | 显示全部楼层
eric2013 发表于 2021-9-7 16:02
你的程序是不是中断里面读取的,每次读取8个通道的数据值。然后你把中断速度开到20KHz时候,这个地方是否 ...

是的,BUSY触发中断读取,按照安富莱的例程来的,后来也试了DMA双缓存突发读取,同样是在10kHz以上出现问题,现在也不知道从哪下手,能想到的问题都查了一遍。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-9-8 08:43:29 | 显示全部楼层
ypmen1 发表于 2021-9-7 16:50
是的,BUSY触发中断读取,按照安富莱的例程来的,后来也试了DMA双缓存突发读取,同样是在10kHz以上出现问 ...

DMA双缓冲,你的DMA缓冲设置的多大。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-8 11:14:52 | 显示全部楼层
eric2013 发表于 2021-9-8 08:43
DMA双缓冲,你的DMA缓冲设置的多大。

16字节对齐,双缓存也是可以传输的数据,和BUSY中断读的一样,到了10kHz以上采样率开始出现毛刺
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-8 13:30:24 | 显示全部楼层
eric2013 发表于 2021-9-8 08:43
DMA双缓冲,你的DMA缓冲设置的多大。

我试着信号源为恒压值,就不会出现毛刺,其他波形都会有
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-9-8 15:54:56 | 显示全部楼层
ypmen1 发表于 2021-9-8 13:30
我试着信号源为恒压值,就不会出现毛刺,其他波形都会有

太少了,直接开两个1024字节缓冲让DMA使用。
即DMA每传输完毕1024字节了再切换缓冲。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-9 08:21:59 | 显示全部楼层
eric2013 发表于 2021-9-8 15:54
太少了,直接开两个1024字节缓冲让DMA使用。
即DMA每传输完毕1024字节了再切换缓冲。

busy.jpg 嗯嗯,我好像让您误解了,busy中断读取是每512打包上传一次。   DMA双缓存模式是另一个读取AD7606数据的程序,不连接BUSY端的那种方式每次中断产生8位数据利用DMA搬到内存里,这块DMA设置的 dma.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-9-9 15:18:22 | 显示全部楼层
ypmen1 发表于 2021-9-9 08:21
嗯嗯,我好像让您误解了,busy中断读取是每512打包上传一次。   DMA双缓存模式是另一个读取AD7606数据的 ...

对,就是这个地方,DMA方式,不使用BUSY引脚,你目前这里配置的AD7606_BUFSIZE大小是16,太小,建议开到1024,或者2048, 然后同步将HAL_DMA_Start_IT函数传输次数相应加大。

这样你使用DMA双缓冲方式,有足够的时候使用UDP上传。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-10 09:08:41 | 显示全部楼层
eric2013 发表于 2021-9-9 15:18
对,就是这个地方,DMA方式,不使用BUSY引脚,你目前这里配置的AD7606_BUFSIZE大小是16,太小,建议开到1 ...

好的,我没搞明白如何把HAL_DMA_Start_IT函数传输次数调大,还望您讲的再详细一点。。。以下是我将缓冲放大的修改,UDP最大上传长度1500,我设置为1024,因此将DMA缓冲512时在回调函数中触发UDP上传数据,结果如下: test1.jpg test.jpg
ps:昨天用Debug查看7606转化数据时,从memroy查看时就发现有数据转化错误,不知是那块的原因
回复

使用道具 举报

12

主题

141

回帖

177

积分

初级会员

积分
177
发表于 2021-9-10 14:38:20 | 显示全部楼层
ypmen1 发表于 2021-9-10 09:08
好的,我没搞明白如何把HAL_DMA_Start_IT函数传输次数调大,还望您讲的再详细一点。。。以下是我将缓冲放 ...

楼主,你的AD数据是怎么导入到matlab并显示出波形的
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2021-9-10 16:24:53 | 显示全部楼层
gnail092 发表于 2021-9-10 14:38
楼主,你的AD数据是怎么导入到matlab并显示出波形的

编的以太网接口,创建数组接收数据,再转化为电压值画出来
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-10-19 18:22:15 | 显示全部楼层
楼主可以分享一下你的工程吗  十分感谢  qq:1127519196@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 19:38 , Processed in 0.300490 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表