基于ll库,使用stm32L0系列的内部基准电压来进行ad测量

前言

ADC转换器需要一个供电电压Vdda以及需要接入一个稳定的参考电压(Vref), 该电压作为adc转换器的上限量程, 必须稳定才能保证测得到的数字量是比较准确的。

  • 在L0系列的14引脚的mcu中, Vdda的引脚会与Vdd连接到一起。
  • 在64引脚以下的mcu中, Vdda与Vref将会链接到一起。
  • 在64引脚及以上的mcu中, Vdda以及Vref才会独立分开。

在stm32中L0系列的芯片,内置了稳压调节器( ADC voltage regulator),在使能ADCAL校准以及ADC模块的时候, 该稳压器就会使能,其实,该调节器稳压源就是使用了内部基准电压(Vrefint)的缓存副本,adc通道17可配置用来读取芯片内部的基准电压测量值, 在芯片引脚资源紧缺的情况下, 该基准电压可以用来计算Vref引脚的电压(在引脚紧缺的时候,也就是Vdda的供电电压), 从而以该实时变动的基准电压,来计算出ad转换器的通道上的电压测量值。(在70摄氏度的情况下,读取的电压值以及温度值误差控制在10mv以及2摄氏度左右, 符合一般情况下的应用。)
ADCAL是adc模块自带的校准功能, 该功能必须在ad开始转换之前就启动并进行一系列的校准工作。

如何使用内部基准电压进行模拟量测量

  • 使用内部基准电压计算Vdda的供电电压, Vdda的电压是不稳定且会发生变化的,那么芯片内部嵌入的基准电压以及他在出厂时通过Vdda为3V的供电得到的校准值, 便可以用来计算此时Vdda(Vref)的真实电压值。计算公式如下:
    VDDA = 3 V x VREFINT_CAL / VREFINT_DATA
    在这里:

    • VREFINT_CAL是 VREFINT 的校准值,存储在固定的地址上, 具体参考数据手册。
    • VREFINT_DATA 是 VREFINT 通过模数转化测得的数值。
  • 通过以上公式计算出Vdda之后(因为此时我们将Vdda与Vref引脚链接到了一起), 我们就可以以该电压作为基准电压计算某通道的测量值, 完整的计算公式如下:
    VCHANNELx = 3V * VREFINT_CAL * ADC_DATAx / (VREFINT_DATA * Full_Scale)

    • ADC_DATAx 是 ADC在channel x (right-aligned)上的测量值。
    • VREFINT_DATA 是 VREFINT通过adc转换之后的实际测量值。
    • Full_SCALE是adc输出的最大数字量程上限, 比如,在12位的分辨率下, 它就等于2^12 - 1 = 4095
  • 利用多通道进行测量的时候, 使用DMA进行数据读取传送, 否则在多通道的读取的时候,会出现数据遗漏的情况。

利用过采样来提高采样的分辨率

  • 过采样 就是采样速率至少高于一个奈奎斯特频率,一般是两倍以上, 这样能保证信号不失真。
  • 具体实现过程参考如下图, 也可参考博客文章: https://mp.weixin.qq.com/s/-EFyDcVq3jcP12Qt2g8Pzw
    基于ll库,使用stm32L0系列的内部基准电压来进行ad测量_第1张图片
  • 数字滤波器一般分为IIR和FIR滤波器。我们常用的平均滤波器属于一种FIR滤波器。
  • 如果采样值符合正太分布, 那么采样之后求平均,便可以使得到值更加逼近中间的真实值。
  • 过采样虽然能提高分辨率, 但更加适合在变化缓慢的应用场合,如温度采样等, 因为过采样会降低响应效率,过采样不适合应用在瞬态响应的场合。 一般来说,为了增加1位的分辨率,要从相同的“邻域”添加了四个高频采样的样本。比如说, 一个16位的输出样本需要256个12位样本, 需要通过过采样,连续采集256个样本数据, 先提高总样本数据量,然后将总数除以16(或将总数右移4位), 得到一个16位数据样本, 该过程通常称为抽取,也即将速率采样。
  • 如何通俗地理解以上过程, 每个样本的数据上限为 2^12, 累加256次, 就是乘以256, 即2^8, 则16位的样本数据值为: 2^12 * 2^8 >> 4, 注意得到16位的数字值之后,要以当前的基准电压和16位的数字长度来测量换算真实的电压值, 通过这样来提高测得的分辨率。要明白的是,其实多出来的分辨率数据, 是通过统计输入量的分布计算出来的, 而不是硬件真正分辨率出来的数据。
  • 像目前很多传感器都会内置过采样以及IIR滤波模块来应对高分辨率的使用场合, 比如BMP280气压传感器。
    基于ll库,使用stm32L0系列的内部基准电压来进行ad测量_第2张图片
  • 在手册中也提供的iir滤波的计算公式, 其实这算是一种低通滤波, 能够有效地滤除例如门窗关闭带来的气压扰动。基于ll库,使用stm32L0系列的内部基准电压来进行ad测量_第3张图片
  • 像stm32 的l071低功耗芯片, 通过过采样的功能, 可以采集到逼近24位的分辨率的数据。

你可能感兴趣的:(嵌入式软件开发,stm32,ll库)