OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4836|回复: 5

F405关于ADC+DMA,采集正弦波,每次采集的幅值变化太大的问题

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-11-25
在线时间
2 小时
发表于 2017-11-25 19:15:55 | 显示全部楼层 |阅读模式
1金钱
请教各位大神,
小弟直接将信号发生器输出接到开发板上,
采用ADC+DMA的方式,DMA为普通模式,采集1024个点.
当采样时间为 56cycles
对信号发生器的10khz,500mv,偏置2vdc的正弦信号进行采样,结果如下图:
clipboard.png
当采样时间为 28cycles
对信号发生器的10khz,500mv,偏置2vdc的正弦信号进行采样,结果如下图:
clipboard2.png
来一个更明显的,直接用480cycles,采集512点:
clipboard3.png
不太理解的是,
1、每重新采集1024个点或512点,再重新开始采集的时候,幅度跳动为何那么大?
2、采样时间设置的不同,当设置越大时,每两次采集的时候,幅度差更大,如图3。
3、为什么为有采不到,即为0的情况?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-11-26 00:51:58 | 显示全部楼层
你先不用dma,用最笨的方法,试试先吧。
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-11-25
在线时间
2 小时
 楼主| 发表于 2017-11-26 22:05:36 | 显示全部楼层
正点原子 发表于 2017-11-26 00:51
你先不用dma,用最笨的方法,试试先吧。

原子哥,用最原始的方法是实时采集,是可以的、、但是目前我是需要采集1024点回来做处理,采用DMA的正常模式,每次就得重新配置后才可以采集,您说会不是阻抗匹配的问题呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-11-27 00:30:56 | 显示全部楼层
jasonnuc 发表于 2017-11-26 22:05
原子哥,用最原始的方法是实时采集,是可以的、、但是目前我是需要采集1024点回来做处理,采用DMA的正常 ...

估计是dma配置有问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-11-25
在线时间
2 小时
 楼主| 发表于 2017-11-27 09:07:09 | 显示全部楼层
正点原子 发表于 2017-11-27 00:30
估计是dma配置有问题

  这是我的配置、您帮忙看下、谢谢
//DMA2 Stream0 channe0 configuration
  DMA_InitStructure.DMA_Channel = DMA_Channel_0;// DMA通道0  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;// 外设地址
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC_ConvertedValue;// 存取器地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;// 方向 外设到内存
        DMA_InitStructure.DMA_BufferSize = ADC_LENGTH;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 外设地址不增加(固定)
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// **内存自增
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;// 外设数据单位(数据长度半字)
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;// 内存数据单位(数据长度半字16位)
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;// 高优先级
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; // 禁止FIFO        
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;// FIFO的值
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;// 存储器突发单次传输
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;// 外设突发单次传输
  DMA_Init(DMA2_Stream0, &DMA_InitStructure);// 初始化DMA2 0通道
  

        DMA_Cmd(DMA2_Stream0, ENABLE);//开启DMA传输
回复

使用道具 举报

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-7-13
在线时间
22 小时
发表于 2018-12-25 16:19:05 | 显示全部楼层
在和楼主弄相似的东西,有些问题想请教下,可以加楼主联系方式吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 01:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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