sprone 发表于 2013-6-8 08:53:12

测试STM32F4的ADC采样时间

最近在用STM32F405RG做工程,ADC的初始化如下:
   /* ADC Common Init **********************************************************/
   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;
   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
   ADC_CommonInit(&ADC_CommonInitStructure);
  
   /* ADC1 Init ****************************************************************/
   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
   ADC_InitStructure.ADC_ScanConvMode = DISABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
   ADC_InitStructure.ADC_NbrOfConversion = 1;
   ADC_Init(ADC1, &ADC_InitStructure);
  
   ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
  
   /* ADC1 regular channe configuration *************************************/  
   /* test configuration *************************************/
    ADC_VBATCmd (ENABLE);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_18, 1, ADC_SampleTime_15Cycles);
  
   ADC_DMACmd(ADC1, ENABLE);
   ADC_Cmd(ADC1, ENABLE);
 
焦点在ADC_RegularChannelConfig(ADC1, ADC_Channel_18, 1, ADC_SampleTime_15Cycles);的ADC_SampleTime_15Cycles上。
电路板中VBAT引脚是直接接的VCC,也就是3.3V,示波器测量电源没有问题,纹波还相当小,只有10mV。
Reference Manual上如下描述:
 
我用的片子是F405,那么从理论上来说,采样回来的数据应该是1.65V,数值上也就是2048才对。
当设置为采样时间为15个ADC_clk时,连续用DMA采样4096个点如下图所示(其中APB2速度为84M,ADC_clk为21M):

而当设置为采样时间为3个ADC_clk时,连续用DMA采样4096个点如下图所示:

可以看到此时幅值明显不对,测量内部温度值时也碰到了一样的情况,将采样时间设置为3个ADC_clk则幅值明显下落。
 
不知道是什么原因,有没有大神可以解释一下?
页: [1]
查看完整版本: 测试STM32F4的ADC采样时间