3886|1

32

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

NUCLEO-G431RB测评->ADC(过采样) [复制链接]

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原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自stm32/stm8论坛

最新回复

很详细,感谢!   详情 回复 发表于 2019-10-15 14:40
点赞 关注(1)
 

回复
举报

1121

帖子

0

TA的资源

版主

沙发
 

很详细,感谢!

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表