注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
elike的个人空间 https://home.eeworld.com.cn/space-uid-670423.html [收藏] [复制] [分享] [RSS]
日志

NUCLEO-G431RB测评->ADC(过采样)

已有 776 次阅读2019-10-6 21:22

NUCLEO-G431RB测评

ADC(过采样)

文档描述

按照文档中描述,此芯片中的过采样是通过average每一次采样的值来实现较高的SNR,可达16bit。计算公式如下:

其中N代表过采样率:2~256M则是取平均,而在实际中除法是通过右移来实现的,右移两位就是除以4。在电路中,整个原始数据是存储在20bit的寄存器上,所以一般情况下,如果想要得到16bit的精度,可以有以下几种办法:A.直接取值:N=32,右移5位;N=64,右移6位等。B.通过舍去最后4位:N=32,右移1位,N=64,右移2位,或者直接利用上面的公式计算,对应的表格如下:

注意:结束转换位标志EOC只会在每进行N次过采样之后才有效。在过采样模式下,不支持offset

如果采用OSR=64,右移两位,实际的结果中最后四位为小数。

hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B; //12,10,8,6 bit
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.GainCompensation = 0;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T1_TRGO;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  hadc1.Init.OversamplingMode = ENABLE;
  hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_64;
  hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_2;
  hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
  hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure the ADC multi-mode 
  */
  multimode.Mode = ADC_MODE_INDEPENDENT;
  if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Analog WatchDog 1 
  */
  AnalogWDGConfig.Channel = ADC_CHANNEL_1;
  if (HAL_ADC_AnalogWDGConfig(&hadc1, &AnalogWDGConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel 
  */
  sConfig.Channel = ADC_CHANNEL_6;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
  sConfig.Offset = 0;

通过终端窗口观察可知,每次RESET后,再开始电压的dc值,就会与前一次的差别大概在3以内,而且如果通过RESET重置后,开始的dc值,也会同以上类似。

由以上结果和之前的没有过采样的结果比较,可知由于过采样的加入,使得数据的精度提高,如果电压固定的话,基本不会由于采样时间的差别而导致结果的差别,使得结果更加可靠,可以很明显地感觉到精度的提升。

 


此内容由EEWORLD论坛网友elike原创,如需转载或用于商业用途需征得作者同意并注明出处

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章