打印
[STM32F1]

ADC规则模式的通道间间隔时间

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


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);
沙发
feelhyq| | 2017-7-30 23:07 | 只看该作者
这个数据手册其实说的很清楚了。举个例子,假如系统时钟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的时间了

使用特权

评论回复
板凳
郁海难填|  楼主 | 2017-7-31 21:20 | 只看该作者
feelhyq 发表于 2017-7-30 23:07
这个数据手册其实说的很清楚了。举个例子,假如系统时钟sysclk = 72M, ADC挂在APB2上,APB2为系统时钟2分频 ...

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

使用特权

评论回复
地板
feelhyq| | 2017-7-31 22:17 | 只看该作者
本帖最后由 feelhyq 于 2017-7-31 22:21 编辑

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

使用特权

评论回复
5
feelhyq| | 2017-7-31 22:27 | 只看该作者
郁海难填 发表于 2017-7-31 21:20
①:APB2一般配置成系统时钟同频吧?
②:同时采集10个通道,如果使用软件触发的循环模式DMA来测试ADC的采 ...

楼主也可做做实验验证看,时间才是检验真理的唯一标准

使用特权

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

本版积分规则

7

主题

42

帖子

1

粉丝