STM32关于ADC测量出来的值不准的问题
今天使用ADC测量的时候发现输出的值和万用表的电压值 一直有0.2的差别,不过跳动在0.005的跳动,也就忽略基准源的问题,直接接地测量出来的电压也是0.00几的跳动。 网上找了很多资料。很多说要开启校准,可能在他们那个场景有用,不过在我这个场景没有用,计算公式是按照官方公布的公式,没有出错,纳闷了好一会,不过最后给他们都乘以了一个比值电压表2.8/adc输出3.0 = 0.985后续adc测量出
今天使用ADC测量的时候 发现输出的值和万用表的电压值 一直有0.2的差别,不过跳动在0.005的跳动,也就忽略基准源的问题(用示波器测试过了 3.29v准的 没有什么跳动 使用的是1块钱一个的LDO基准源芯片),直接接地 测量出来的电压也是0.00几的跳动。 网上找了很多资料。很多说要开启校准,可能在他们那个场景有用,不过在我这个场景没有用,计算公式是按照官方公布的公式,没有出错,纳闷了好一会,不过最后给他们都乘以了一个比值
电压表2.8/adc输出3.0 = 0.985 后续adc测量出来的电压都乘以这个比值,后续测量的都和万用表对的上,暂时打了个补丁。
另外还有一种方法: (芯片公司给出了的)
ADC 转换误差示意图
该示意图描述了 ADC 的理想值和实际值的区别,从图中可以看出 ADC 转换的误差。
图 1 ADC 理想误差示意图
图 2 ADC 实际误差示意图
ADC 误差介绍
器件理想输出与实际输出之差定义为偏移误差,所有数字代码都存在这种误差。在实际中,
偏移误差会使传递函数或模拟输入电压与对应数值输出代码间存在一个固定的偏移。通常计
算偏移误差方法是测量第一个数字代码转换或“零”转换的电压,并将它与理论零点电压相
比较。
增益误差是预估传递函数和实际斜率的差别,增益误差通常在模数转换器最末或最后一个传
输代码转换点计算。
ADC 校准方法
如图 1 所示,红线为理想 ADC 的传输特性曲线,蓝线为实际 ADC 的传输特性曲线,对于一
个理想的 ADC 来说,如果模拟输入和数字输出在 X 轴和 Y 轴增量相等,则它们之间的传输
特性便如图 1 中红色虚线所示(k=1)。然而,实际的 ADC 传输特性并非如此,蓝色虚线的
增量系数并不等于 1。红色和蓝色虚线的差值,便是 Gain error。因此需要校准来尽量减小或
消除增值误差。关于消除的方法,可以采用两点校准的办法进行。校准 ADC 增益误差需要一个准确的基准(通常为 Band gap Ref)。对于一个实际的 ADC 来 说,传输特性曲线并非是一条直线,即 ADC 输出和输入并不是线性关系。如图 2 所示。
最常用的一种校准方法——两点标定法:
这一方法假定 ADC 传输特性是一条直线。这种方法对于低输入是一个很好的选择,能有效 地降低校准成本。在两点标定中,一个点可以选在 AD 输入的最低点,另一个选在接近最高
点处。举例来说,一个单端输入的 ADC,输入范围为 0-2.2V,我们可以采用一个基准为 Vref1=0V
和一个为 Vref2=2.049 的来进行校准。
校准公式为:
增益系数=(Vref2 时实际输出- Vref1 时实际输出)/(Vref2 时理想输出- Vref1 时理想输出)
例如,一个输出对于一个 Vref 时的实际输出为 99,二增益系数通过计算为 0.008,则实际输
出为 99*1.008=99.792.
Offset 校准可以通过输入 0V 电压,用实际输出减去 0,得到 Offset 值。客户代码中可以把每 次采集到的值减去 Offset 值,即能得到 ADC 采样值。
注意事项
ADC 的转换精度与参考电压的稳定度相关。稳定的参考电压可明显提高 ADC 的转换精度。
该系列单片机的 ADC 可供选择的参考电压共有 4 种:电源电压、ExRef 引脚、内置 1.5v 参
考电压、内置 2.5v 参考电压。电源电压会受到芯片内部数字电路的影响,具有一定的数字噪
声。内置 1.5v 参考电压、内置 2.5v 参考电压均由电源电压通过 BGR 模块生成,也会具有一
定的数字噪声。外部 ExRef 引脚的参考电压可以通过适当的电路调理(并联去耦电容),向
ADC 提供一个稳定的参考电压,在该工作条件下 ADC 具有最高的转换精度。其次,如果选
择 AVCC / 内部 1.5V / 内部 2.5V 作为 ADC 的参考电压时,建议将 ExRef 引脚设为模拟功能
并外接去耦电容。
使用 ADC 模块时,选择参考电压的优先级如下所示:
优级序号 参考电压 ExRef 引脚配置
1 Exref 模拟引脚 + 去耦电容
2 VCC 模拟引脚 + 去耦电容
3 内部 1.5V / 2.5V 模拟引脚 + 去耦电容
4 内部 1.5V / 2.5V 数字引脚
5 VCC 数字引脚
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)