【STM32】ADC从原理到应用详解

STM32F030的MCU内部使用的都是逐次逼近型ADC(SAR ADC),先看一下SAR ADC的原理,以便于更好的理解和使用ADC,除了原理以外的内容都是基于STM32L063中的ADC来讲的,m0系列的芯片中的ADC都是相同的设计。

SAR ADC的原理

在这里插入图片描述
逐次逼近型ADC(Successive Approximation Register ADC)的核心组成有四个模块:比较器,采样保持模块,DAC,逐次逼近寄存器(SAR)。

DAC

SAR ADC中的DAC的作用是以输入的参考电压为基准,将SAR模块想要比较的数字量转换为模拟电压输入到比较器中进行比较。

比较器

比较器是将输入电压和DAC电压进行比较,最后将比较结果传入SAR中,实际上的电路中并不一定是以上的连接方式,上图比较器连接方式只是原理示意。

SAR

SAR是逐次逼近寄存器,顾名思义,它会根据自身寄存器位数,将电压量化为不同档位,从最高位开始,与输入电压进行比较,最后得到测量电压值,用于比较的模拟电压由SAR通过控制DAC进行转化。

采样保持电路

在这里插入图片描述

开关闭合时,模拟信号Vs被采样,开关断开时,采样信号被保持输入到比较器作比较。

3位SAR ADC工作过程示例

如果对于一个可以输出0~7mV电压的DAC,使用一个三位的逐次逼近寄存器控制其输出,每个位表示的电压如下表所示:
在这里插入图片描述
当输入电压经过采样保持模块进入比较器,此时逐次逼近寄存器会通过二分搜索法,依次将预设电压通过DAC转化为模拟量和输入电压比较,比较过程如下:先用B2与输入电压比较,大于输入电压则B2位等于0,小于输入电压则B2位等于1,再比较B1,最后比较B0。
示例:
假设输入电压为Vin = 5.5V,此时的比较过程如下:

  1. Vin>B2(4mV),B2 = 1;
  2. Vin<B2(4mV)+B1(2mV),B1 = 0;
  3. Vin>B2(4mV)+B0(1mV),B0 = 1;

由于最小刻度为1V,所以该输入电压由ADC测量得到结果为101(5V)。

所有的比较可能性如图所示:
在这里插入图片描述
一个三位的SAR ADC想要量化输入电压都会经过三次比较,最后得出结果。
SAR ADC采样不同的电压的时间是相同的,在相同工作频率下,SAR ADC位数越多,转换电压需要的时间越多。

STM32单片机内置ADC的核心就是一个SAR ADC再配合一些数字逻辑功能所构成。

STM32内置ADC的主要特性:

  1. 分辨率可配置6/8/10/12位。
  2. 支持校准
  3. 采样时间可编程
  4. 支持DMA
  5. 支持软件启动转换/硬件触发转换
  6. 转换模式可选
  7. 模拟看门狗
  8. 过采样器

框图结构

在这里插入图片描述

通道扫描

通道多达19条:

  • 16条GPIO引脚模拟输入
  • 3条内部模拟输入
    ADC可配置通道的选择扫描,顺序只能配置为正向扫描或者逆向扫描

三种转换模式的区别

单次转换模式:
执行单次转换序列,对所有使能通道进行一次转换

连续转换模式:
连续对序列进行转换,在一次序列全部完成后立刻进行下一次转换

不连续转换模式:
对序列内的每个通道的转换都需要一次触发条件。

模拟看门狗(AWD)

该功能和窗口看门狗类似,给定一个电压范围窗口,如果ADC转换的模拟电压结果不在窗口之内,AWD对应标志位会置1,如果对应中断被使能则会触发中断。

使用此功能我们可以省掉对采集的电压的判断过程。

校准功能

ADC支持校准功能,但是并没有详细的说明校准的方法,是对内部的SAR ADC进行自校准,具体校准过程不由软件干涉。
校准操作需要在ADC开始转换数据之前完成。
标准库中校准函数如下:

uint32_t ADC_GetCalibrationFactor(ADC_TypeDef* ADCx)
{
  uint32_t tmpreg = 0, calibrationcounter = 0, calibrationstatus = 0;

  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  
  /* Set the ADC calibartion */
  ADCx->CR |= (uint32_t)ADC_CR_ADCAL;
  
  /* Wait until no ADC calibration is completed */
  do
  {
    calibrationstatus = ADCx->CR & ADC_CR_ADCAL;
    calibrationcounter++;  
  } while((calibrationcounter != CALIBRATION_TIMEOUT) && (calibrationstatus != 0x00));
    
  if((uint32_t)(ADCx->CR & ADC_CR_ADCAL) == RESET)
  {
    /*Get the calibration factor from the ADC data register */
    tmpreg = ADCx->DR;
  }
  else
  {
    /* Error factor */
    tmpreg = 0x00000000;
  }
  return tmpreg;
}

相比于030,在L063中,新增了ADC校准系数寄存器,在一次校准后将校准系数保存,产品掉电再上电后不想再次校准时将保存的校准系数写入该寄存器,下次启动转换时,校准系数会被自动添加到ADC中。
在这里插入图片描述

过采样功能

过采样的目的:降低信号噪声,提高信噪比(SNR),提高分辨率
功能:将多次采样结果累加求和再平均。
功能描述:
开启过采样后,内部的求和单元得出的过采样结果是一个20bit的数据,此数据是根据配置的采样倍数采样后累加的得到的和值,然后通过配置右移去做除法,计算平均值,右移操作后,会将高于16个最低有效位数的所有数据截断,得到一个16位的单个数据(平均值),但是并非是纯粹的右移,在右移后又进行了四舍五入。
为什么是一个20bit的数呢?

最大256倍过采样时,单次采样数据满量程为4095,256次采样结果为0xfff000。
STM32L063中给出的满量程时的对照表:
在这里插入图片描述

配置过程

  1. 配置OVFS[2:0]位定义过采样率,可配置范围为2倍到256倍
  2. 配置右移位数OVSS[3:0],得到平均值(2倍采样右移1位,4倍采样右移两位,以此类推)
  3. 配置TOVS选择触发(置1则每次过采样操作都需要触发条件来触发)。
  4. 启动ADC转换

此功能可以省去软件去累加求平均的过程。

低功耗特性

等待模式转换

此模式下,每次转换完成后,只有在ADC_DR寄存器中的值被读取或EOC位清零后,ADC才会开始新的转换。
通过此模式可以调整ADC的采样速度。
在这里插入图片描述

自动关闭模式

自动关闭模式在整个序列转换完成后会关闭ADC,等待下次软件或硬件再次触发转换才会再次启动ADC。
在这里插入图片描述

自动转换模式和等待模式

每次转换完成后会关闭ADC,等到读取DR寄存器或EOC清零后,ADC才会再次启动并开始下次转换。
在这里插入图片描述

ADC数据管理:

数据格式

ADC转换的数据位数取决于分辨率,8/10/12bit的分辨率分别对应8/10/12bit的转换结果。

数据溢出处理

没有及时读走ADC_DR寄存器中的转换结果,下次转换又出了新的转换结果时,就会产生溢出事件,溢出后的处理可以由用户配置,选择保留原来数据或者保留新的转换结果。

DMA管理数据:

DMA单次模式:传输固定数目的数据字。
DMA循环模式:每次出现新的转换数据时,ADC都会产生DMA请求。

关于MCU中的ADC提高测量精度的办法

  1. 提供一个高精度的参考电压Vref。

  2. 在允许参考电压输入范围内,参考电压值输入越低,可量化最小信号越小。

参考电压=5V,分辨率为12bit时:
5000mV /(2^12 -1)≈ 1.22mV

参考电压 = 3.3V,分辨率为12bit时:
3300mV / (2^12-1)≈ 0.81mV
相同的分辨率情况下,参考电压输入值越低,单个最小刻度能测量的电压越精确,最后ADC测量精度也越高。
这种方法理论上也能提高ADC测量精度,但是在电子系统内部都是存在噪声的,当可量化的最小信号小于噪声时,12bitADC采集到的后几位的电压的就可能是噪声。
3. 增大采样时间:可以通过配置较长的采样时间来提高数据采样的准确性,但是会降低实时性。
4. 使用之前先进行ADC自校准。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值