打印
[STM32F1]

通道之间的间隔

[复制链接]
480|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanglli|  楼主 | 2020-4-19 23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用STM32F1的ADC1采集10路ADC数据,使用TIM触发采集。每次触发采集把每个通道采集一遍,现在比较疑惑的是这个ADC通道与通道之间的间隔是怎么计算的呢?

使用特权

评论回复
沙发
zyf部长| | 2020-4-19 23:05 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
zhanglli|  楼主 | 2020-4-19 23:07 | 只看该作者

ADC_InitTypeDef ADC_InitStructure;//定义ADC初始化结构体变量
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式
  ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能扫描
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//ADC转换工作在连续模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;//有软件控制转换
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Left;//转换数据左对齐
  ADC_InitStructure.ADC_NbrOfChannel = 12;//10;//转换通道为通道1
  ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 8, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 9, ADC_SampleTime_41Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 10, ADC_SampleTime_41Cycles5);

使用特权

评论回复
地板
zyf部长| | 2020-4-19 23:09 | 只看该作者
这个数据手册其实说的很清楚了。举个例子,假如系统时钟sysclk = 72M, ADC挂在APB2上,APB2为系统时钟2分频,那么APB2就是36M,ADC模块内部也会有个分频,假如说是4分频,那么ADC模块采样的时钟为9M,你设置了采样时钟为 ADC_SampleTime_41Cycles5,假如是41个clk,再加上采样的3个clk准备时钟(3个时钟数据手册ADC模块有说明),那么每个通道转换完成需要41+3 = 44个clk,44/9M 就是一个通道采集完ADC的时间了

使用特权

评论回复
5
zhanglli|  楼主 | 2020-4-19 23:11 | 只看该作者

①:APB2一般配置成系统时钟同频吧?
②:同时采集10个通道,如果使用软件触发的循环模式DMA来测试ADC的采样周期发现平均周期小于采样时钟周期+转换时钟周期。
③:3个时钟周期这个数据从哪里来的呢?我看到的式子是TCONV = 采样时间+ 12.5个周期。这个只是单通道的,我发现多通道并不是直接的累加,有点像是采样是同时采样,逐个转换的。

使用特权

评论回复
6
zyf部长| | 2020-4-19 23:14 | 只看该作者
①:APB2配置成多少使用者说了算,最高就是系统时钟啦,但是频率越高功耗肯定越大,通常来讲,APB2只要能满足需更求,越小越好。
②:关于DMA+ADC我做过一个项目,当然我们没用到循环模式,也做过这样一个实验,DMA传输1000次,每一次理论转换时间 * 1000次(产生DMA中断)与实际时间几乎是一样的,楼主使用的DMA循环模式,不清楚楼主如何去判断DMA+ADC产生了多少次。
③:通过做实验②得出的结果来看,我个人更倾向与多通道值直接累加的, 即一个通道完成后再开始另外一个通道。

使用特权

评论回复
7
kangzj| | 2020-4-19 23:18 | 只看该作者
楼主也可做做实验验证看,时间才是检验真理的唯一标准

使用特权

评论回复
8
xxrs| | 2020-4-19 23:21 | 只看该作者
同时采样,逐个转换

使用特权

评论回复
9
yinxiangh| | 2020-4-19 23:22 | 只看该作者
按理说从配置上能看出来

使用特权

评论回复
10
zhanglli|  楼主 | 2020-4-19 23:25 | 只看该作者


好的,我明天去单位试一下,多谢各位大侠了哈

使用特权

评论回复
11
玛尼玛尼哄| | 2020-4-20 10:11 | 只看该作者
你可以全部用定时器中断啊。

使用特权

评论回复
12
caoenq| | 2020-4-21 10:20 | 只看该作者
zyf部长 发表于 2020-4-19 23:09
这个数据手册其实说的很清楚了。举个例子,假如系统时钟sysclk = 72M, ADC挂在APB2上,APB2为系统时钟2分频 ...

楼主的题目不是这个意思,你说的是采集一个通道需要用的时间。楼主的意思是两个通道之间的间隔时间,比如采集完成第3通道的时刻是t1,开始采集第4通道的时刻是t2,t2-t1是多少?

使用特权

评论回复
13
cyc2009| | 2020-4-21 21:46 | 只看该作者
我的理解是没间隔;一个通道转换结束,就到下一个通道;可以考虑调整每个通道的采样时间,来评估采样频率。

使用特权

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

本版积分规则

1016

主题

9386

帖子

1

粉丝