OpenEdv-开源电子网

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

关于ADC数据存储以及采样时间的问题

[复制链接]

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
发表于 2020-12-23 19:37:59 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 车嘉炜 于 2020-12-24 09:31 编辑

stm32新手,最近在做ADC1六个通道采集数据+DMA存储进内存。想通过建立一个数组将采样值存进内存,代码是:u16 AD_Value[6];//定义一个数组  
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;  //外设地址是DR寄存器
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)AD_Value;    //存储器地址是数组的地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
在此省略一些配置内容。
——————————————————————————————————————————————————————————————————————————-————————————————————-
设置ADC1的6个通道采集数据
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );               
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 );               
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_239Cycles5 );
        

第一个问题:我比较疑惑的是这个过程是怎么样的?是每个通道各自采样一次得到一个数值共得到六个数值,然后六个ADC数形成一个数组传给内存以后再进行下一个采样点的采样吗?那么这样的话一个数组里面就是保存的不同通道的采样值吗?

第二个问题:如果我要采集一个随时变化的信号导致每次采样值会变化很大,是不是可以把数组定义成一个二维数组ADC1ConvertedValue  [采样个数] [6]      6代表六个通道
第三个问题:分频后ADCCLK=14mhz,设置1.5的采样时间,那么Tconv=1.5+12.5=14周期,14/14M=1us 那么这个1um就是采样一个点所用的时间吗
希望大家赐教,不胜感激







最佳答案

查看完整内容[请看2#楼]

1. 每个通道完成一次转换后就被DMA传出来,因为ADC->DR只有一个,所以不是同时转换的,是转换一个传一个
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4951
金钱
4951
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-12-23 19:38:00 | 显示全部楼层
1. 每个通道完成一次转换后就被DMA传出来,因为ADC->DR只有一个,所以不是同时转换的,是转换一个传一个
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4951
金钱
4951
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-12-24 13:36:02 | 显示全部楼层
2. 可以定义一个二维数组,DMA每个循环传6个,循环多少次由你自己决定
3. 是的,1us是采样+转换的时间
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2020-12-24 16:05:21 | 显示全部楼层
阿侑kevin 发表于 2020-12-24 13:33
1. 每个通道完成一次转换后就被DMA传出来,因为ADC->DR只有一个,所以不是同时转换的,是转换一个传一个

您好,十分感谢您的回复!麻烦您可否再解答一下,假设我设定ADC1ConvertedValue[6]数组来存储6个ADC通道的值,经过一个循环,六个通道全部采集完毕经DMA传给了内存,那么我下次循环采集到的六个数值是不是就把上次采集到的数组给覆盖掉了?如果是的话解决的办法就是构建二维数组然后行数是循环次数,列数是通道个数是吗?
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4951
金钱
4951
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-12-24 17:16:47 | 显示全部楼层
车嘉炜 发表于 2020-12-24 16:05
您好,十分感谢您的回复!麻烦您可否再解答一下,假设我设定ADC1ConvertedValue[6]数组来存储6个ADC通道 ...

是的,就是这样的
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2020-12-24 17:46:54 | 显示全部楼层

十分感谢!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 08:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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