打印
[STM32F0]

STM32F030F4芯片的ADC1的PA5会有0.06伏电压的正偏移?

[复制链接]
2507|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxm19820916|  楼主 | 2016-6-8 12:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的ADC1的第5通道,即PA5管脚。使用DMA传输,DMA传输完成中断中求采样平均值。得到的电压值和实际测量到的有偏差。有朋友碰到这个情况吗?
沙发
xmshao| | 2016-6-8 15:12 | 只看该作者
记得启动AD转换前 做校准;
电源尽量干净;
适当加长下采样时间看看;

使用特权

评论回复
板凳
zxm19820916|  楼主 | 2016-6-12 10:51 | 只看该作者
按照官方例程ADC_DMA配置,启动前做了校准,难道校准得不对?
采样时间我选择的是最长的239.5周期。时钟2M。

使用特权

评论回复
地板
598330983| | 2016-6-12 15:25 | 只看该作者
悬空了吧?这玩意儿不能悬空的,不用时候拉到地。

使用特权

评论回复
5
zxm19820916|  楼主 | 2016-6-15 15:37 | 只看该作者
598330983 发表于 2016-6-12 15:25
悬空了吧?这玩意儿不能悬空的,不用时候拉到地。

模拟量输入管脚配置不是应该配置为悬空吗?即不上拉也不下拉

使用特权

评论回复
6
lefeng| | 2016-6-15 19:45 | 只看该作者
启动AD转换前 ,怎么做校准啊

使用特权

评论回复
7
309030106| | 2016-6-15 21:45 | 只看该作者
是不是外围电路把电压抬高了

使用特权

评论回复
8
ideafor| | 2016-6-15 22:08 | 只看该作者
你初始化完之后应该先校准一下ad的

使用特权

评论回复
9
zxm19820916|  楼主 | 2016-6-17 09:32 | 只看该作者
ideafor 发表于 2016-6-15 22:08
你初始化完之后应该先校准一下ad的

有做校准,参考官方例程代码如下:
void ADC_Config(void)
{
  ADC_InitTypeDef     ADC_InitStructure;
  
  /* ADCs DeInit */  
  ADC_DeInit(ADC1);
  
  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStructure);
  /* Configure the ADC1 in continuous mode with a resolution equal to 12 bits  */
  ADC_InitStructure.ADC_Resolution                         = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode         = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge         = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign                         = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection                 = ADC_ScanDirection_Upward;
  ADC_Init(ADC1, &ADC_InitStructure);
  
  /* Convert the ADC1 Channel 5 with 239.5 Cycles as sampling time */
  ADC_ChannelConfig(ADC1, ADC_Channel_5, ADC_SampleTime_239_5Cycles);

  /* ADC Calibration */
  ADC_GetCalibrationFactor(ADC1);
       
  /* ADC DMA request in circular mode */
  ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
  
  /* Enable ADC_DMA */
  ADC_DMACmd(ADC1, ENABLE);
  
  /* Enable the ADC peripheral */
  ADC_Cmd(ADC1, ENABLE);     
  
  /* Wait the ADRDY flag */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
  
  /* ADC1 regular Software Start Conv */
  ADC_StartOfConversion(ADC1);
}

使用特权

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

本版积分规则

22

主题

299

帖子

2

粉丝