赞
踩
ADC转换器需要一个供电电压Vdda以及需要接入一个稳定的参考电压(Vref), 该电压作为adc转换器的上限量程, 必须稳定才能保证测得到的数字量是比较准确的。
在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
在这里:
通过以上公式计算出Vdda之后(因为此时我们将Vdda与Vref引脚链接到了一起), 我们就可以以该电压作为基准电压计算某通道的测量值, 完整的计算公式如下:
VCHANNELx = 3V * VREFINT_CAL * ADC_DATAx / (VREFINT_DATA * Full_Scale)
2^12 - 1 = 4095
。利用多通道进行测量的时候, 使用DMA进行数据读取传送, 否则在多通道的读取的时候,会出现数据遗漏的情况。
但更加适合在变化缓慢的应用场合,如温度采样等, 因为过采样会降低响应效率,过采样不适合应用在瞬态响应的场合。
一般来说,为了增加1位的分辨率,要从相同的“邻域”添加了四个高频采样的样本。比如说, 一个16位的输出样本需要256个12位样本, 需要通过过采样,连续采集256个样本数据, 先提高总样本数据量,然后将总数除以16(或将总数右移4位), 得到一个16位数据样本, 该过程通常称为抽取,也即将速率采样。2^12
, 累加256次, 就是乘以256, 即2^8
, 则16位的样本数据值为: 2^12 * 2^8 >> 4
, 注意得到16位的数字值之后,要以当前的基准电压和16位的数字长度来测量换算真实的电压值, 通过这样来提高测得的分辨率。要明白的是,其实多出来的分辨率数据, 是通过统计输入量的分布计算出来的, 而不是硬件真正分辨率出来的数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。