MCU内部ADC模块误差如何校准

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。

一、ADC误差校准引言

MCU 片内 ADC 模块的误差总包括了 5 个静态参数 (静态失调,增益误差,微分非线性误差 (DNL),积分非线性误差(INL),绝对精度误差) 和 5 个动态参数 (信噪比,信噪失真比,无杂 散动态范围,有效位,总谐波失真) 。其中, 静态失调和增益误差是可以利用微控制器 MCU 进行修正, 可以通过软件算法, 也可以通过硬件固化的方式进行补偿。本文提供一种两点法 ADC 模块误差校正并结合硬件计算的方式来完成 ADC 的误差补偿。 ADC 静态失调被定义为第一次理想编码跳变与第一次实际编码跳变之间的偏差。第一次理想编码跳变发生在 0.5 LSB 处。如果输入电压小于 0.5 LSB 时输出代码大于零,则 ADC 产生正失调误差。如果输入电压大于 0.5 LSB 时发生第一次输出编码跳变,则 ADC 产生负失调误差,参考如下

图1 ADC静态失调图

ADC增益误差被定义为补偿失调误差后理想 ADC 传输的最后一步中点与实际 ADC 的最后一步中点的偏差,参考如下图 2所示。

图2 ADC增益误差图

为理解ADC静态失调和ADC增益误差(文中将以Offset error和Gain error指代),通过下图3来进行说明。

图3 ADC模块Offset error(左图)和Gain error(右图)

如图3(左)所示,在理想的ADC转换中,数字输出为000时理想的模拟电压输入范围应为0~0.5LSB,而实际模拟输入在0~2LSB时数字输出均为000,那么此时的Offset error即为1.5LSB。如图3(右)可知,当输入模拟信号为8LSB时实际数字输出比理想输出小1LSB,即Gain error为1LSB并且是负向error。MCU的Datasheet中可以查找到如下图4 ADC误差电气参数特性,可以看到在使用内部电压参考时Gain error为±45LSB,这在精密应用场景可能会带来不小的影响。同时除了被重点关注的Gain error和offset error,ADC可能还会存在INL error(积分非线性误差)、DNL error(微分非线性误差)共同决定了实际采样转换的非线性度。

图4 ADC误差电气参数(摘自F2800137数据手册)

二、ADC模块误差校准方案

1. 传统单点法校准失调和增益误差的方案

单点ADC校准方案通常是外部提供一个固定的电压参考点(在全域输入电压范围内选取),使用一个采样通道定时对该参考点进行采样,计算出该点误差后直接同步校准到整个电压输入域。

该方案的劣势在于单点的误差无法完全反应全域的误差,单纯使用单点的误差状态推广到全域进行校准,会存在无法达到预期校准精度的可能,如下图5所示。

图 5. 单点ADC误差校准

2. 使用两点法校准失调和增益误差的方案

实际上ADC在全域输入模拟电压范围内每一个点的Offset error和Gain error是不尽相同的,并且是非线性的,但出于性价比考虑这边提出一种实现成本最优的ADC两点动态校准法,如下图6所示:

图6. 双点ADC误差校准

如上图 6 所示,两点校准法需要在全域模拟输入内选取两个点 AinA(Vref1)和 AinB(Vref2)进行曲线 拟合、校准。

具体实施过程:

1. 本案例在当 ADC 输入模拟电压大于 0.4432V 左右时执行误差校准程序(Note:在低电压 0~0.4432V 范围 ADC 转换误差较小);

2. 计算 Gain error 比(实质就是斜率之比)

3. 计算各点的 Offset error:

a) 计算 A 点的 Offset error: CalOffsetA = AoutA_idea − (AoutA_actual ∗ CalGain)

b) 计算 B 点的 Offset error: CalOffsetB = AoutB_idea − (AoutB_actual ∗ CalGain)

c) 计算两点的平均 Offset error: CalOffsetAve = (CalOffsetL + CalOffsetH)/ 2

4. 设定一个非线性的误差补偿比:

a) 计算当前点之于非线性起始点的偏移量:CalNonP = ADCOUT_actual / AoutA_idea (其中ADCOUT_actual 为当前采样输出的 AD 值,AoutA_idea为非线性补偿段的起始点,此处以 A 点代指,此值不固定、应以实际调试为准);

b) 计算补偿值:CalOffsetNonL=(CalNonP * CalOffsetAve)/x (其中 x 为常量, 手动调节的补偿放大比例);

由于 ADC 误差实际表现的非线性,为得到更为精确的补偿,本案例将校准分为两段式补偿:低区 误差补偿(AinS ~ AinA 段,如上图 6 所示)、高区误差补偿(AinA ~ AinB 段)。 将计算所得参数带入输出误差校准公式:

低区误差补偿公式:CaliAout = ADCOUT_actual ∗ CalGain + CaiOffsetA

高区误差补偿公式:CaliAout = ADCOUT_actual ∗ CalGain + CaiOffsetAve + CalOffsetNonL 注:实际应用中为提高动态特性,需在特定时间内调用一次误差补偿程序以实时更新补偿量。

图7. 两点校准实施实例

三、校准中常见的问题

如图 8 所示,C2000 产品 ADC 模块有不同静态误差特性,利用上述误差补偿的算法来实现 ADC 误差校准。针对单点方案, 无论是参考电压源或高精度电阻, 对参考器件特性要求很高。 针对两点方案, ADC 校准效果取决于参考点选择, 以及校准算法,要求实时性。然而, F28P65x 新一代 Type-4 ADC 模块硬件计算模块可以保证校准实时性, 同时减小 CPU 的带宽。

图8. 不同 C2000 产品系列 ADC 误差特性(左图-校准前;右图-校准后)

四、总结

本案例通过实验验证 ADC 两点校准的有效性,同时在 C2000 系列芯片中导入应用(包含但不限 于 F280013x/F28002x/F28003x/F28004x/F28P6x/F28P5x)。若进一步优化算法, ADC 高精度可 进一步提升,实际应用中可根据使用场景进行适配。但需注意的是确保两个输入参考点的稳定、 准确。此外,最新一代 C2000 F28P65 ADC 模块的全新特性(求和、平均、求最大/小值)在 ADC 误差校准过程中可以提供更高效的处理过程,使得 ADC 动态校准具备了实际可行的可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件篇---CPUGPUTPU

文章目录 第一部分:处理器CPU(中央处理器)1.通用性2.核心数3.缓存4.指令集5.功耗和发热 GPU(图形处理器)1.并行处理2.核心数量3.内存带宽4.专门的应用 TPU(张量处理单元)1.为深度学习定制2.低精…

03-机器学习-数据获取

一、流行机器学习数据集 主流机器学习数据集汇总 数据集名称描述来源MNIST手写数字图像数据集,由美国人口普查局员工书写。MNIST官网ImageNet包含数百万张图像,用于图像分类和目标检测。ImageNet官网AudioSet包含YouTube音频片段,用于声音分…

doris:STRUCT

STRUCT<field_name:field_type [COMMENT comment_string], ... > 表示由多个 Field 组成的结构体&#xff0c;也可被理解为多个列的集合。 不能作为 Key 使用&#xff0c;目前 STRUCT 仅支持在 Duplicate 模型的表中使用。一个 Struct 中的 Field 的名字和数量固定&…

一次端口监听正常,tcpdump无法监听到指定端口报文问题分析

tcpdump命令&#xff1a; sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各个部分的详细解释&#xff1a; 1.tcpdump: 这是用于捕获和分析网络数据包的命令行工具。 2.-i ens2f0: 指定监听的网络接口。ens2f0 表示本地网卡&#xff09;&#xff0c;即计算机该指定网络接口捕…

“新月智能武器系统”CIWS,开启智能武器的新纪元

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章链接&#xff1a;星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 “新月之智”智能战术头盔系统&#xff08;CITHS&#xff09;-CSDN博客 目录 智能武…

实验六 项目二 简易信号发生器的设计与实现 (HEU)

声明&#xff1a;代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog&#xff08;或VHDL&#xff09;、图形描述方式、IP核&#xff0c;结合数字系统设计方法&#xff0c;在Quartus开发环境下&#xff…

SCRM系统如何提升客户管理及业务协同的效率与价值

内容概要 在当今商业环境中&#xff0c;SCRM系统&#xff08;社交客户关系管理系统&#xff09;正逐渐受到越来越多企业的关注和重视。随着科技的发展&#xff0c;传统的客户管理方式已经无法满足快速变化的市场需求&#xff0c;SCRM系统通过整合客户数据和社交网络信息&#…

[免费]微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序智能商城系统(uniappSpringboot后端vue管理端)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序智能商城系统(uniappSpringboot后端vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…

PID算法的数学实现和参数确定方法

目录 概述 1 算法描述 1.1 PID算法模型 1.2 PID离散化的图形描述 1.3 PID算法的特点 2 离散化的PID算法 2.1 位置式PID算法 2.2 增量式PID算法 2.3 位置式PID与增量式PID比较 3 控制器参数整定 3.1 PID参数确定方法 3.1.1 凑试法 3.1.2 临界比例法 3.1.3 经验法…

《DeepSeek R1:大模型最简安装秘籍》

DeepSeek R1&#xff1a;AI 大模型界的新起之秀 在人工智能的璀璨星空中&#xff0c;大模型如繁星般闪耀&#xff0c;而 DeepSeek R1 无疑是其中一颗冉冉升起的新星&#xff0c;自问世以来便吸引了全球的目光&#xff0c;在人工智能领域占据了重要的一席之地。 从性能表现上看…

【论文阅读】RAG-Reward: Optimizing RAG with Reward Modeling and RLHF

研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何优化检索增强生成&#xff08;RAG&#xff09;系统&#xff0c;特别是通过奖励建模和人类反馈强化学习&#xff08;RLHF&#xff09;来提高大型语言模型&#xff08;LLMs&#xff09;在RAG任务中的效果。研究难点&…

【数据结构】(3)包装类和泛型

一、包装类 1、什么是包装类 将基础类型包装成的类就是包装类。由于基础类型不是继承 Object 类的类&#xff0c;所以在泛型不能直接支持基础类型&#xff0c;为了解决这个问题&#xff0c;就需要把基础类型转换为对应的包装类。 基础类型对应的包装类 基础类型包装类byteByte…

DBUtils中QueryRunner(空参,传数据源)构造方法的区别及应用场景

关于学习Spring框架时重构DAO层时&#xff0c;遇到的QueryRunner构造方法的问题&#xff0c;回忆MySQL中DBUtils部分 1. 空参构造方法 new QueryRunner() 特点&#xff1a; 不绑定数据源&#xff1a;QueryRunner 实例内部没有 DataSource&#xff0c;因此无法自动获取连接。 …

C++11线程

C11提供了线程库&#xff0c;下面我们来看一下如何使用。 线程的创建 头文件 要创建一个线程需要包一个线程头文件:#include <thread> 我们先来看看thread支持的构造方式。 支持默认构造&#xff0c;直接使用thread创建一个空的线程对象。 也支持带参的构造&#x…

梯度提升用于高效的分类与回归

人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 决策树(Decision Tree) 实现 梯度提升(Gradient Boosting) 主要是模拟 GBDT(Gradient Boosting Decision Trees) 的原理,即: 第一棵树拟合原始数据计算残差(负梯度方向)用新的树去拟合残差累加所有树的预测值重…

Golang 并发机制-3:通道(channels)机制详解

并发编程是一种创建性能优化且响应迅速的软件的强大方法。Golang&#xff08;也称为 Go&#xff09;通过通道&#xff08;channels&#xff09;这一特性&#xff0c;能够可靠且优雅地实现并发通信。本文将揭示通道的概念&#xff0c;解释其在并发编程中的作用&#xff0c;并提供…

Unity开发游戏使用XLua的基础

Unity使用Xlua的常用编码方式&#xff0c;做一下记录 1、C#调用lua 1、Lua解析器 private LuaEnv env new LuaEnv();//保持它的唯一性void Start(){env.DoString("print(你好lua)");//env.DoString("require(Main)"); 默认在resources文件夹下面//帮助…

笔记:使用ST-LINK烧录STM32程序怎么样最方便?

一般板子在插件上&#xff0c; 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件&#xff1a;ST-LINK Utility&#xff0c;Keil_5; ST_Link 接口针脚定义&#xff1a; 按定义连接ST_Link与电路板&#xff1b; 打开STM32 ST-LINK Uti…

网络测试工具

工具介绍&#xff1a; 这是一个功能完整的网络测速工具&#xff0c;可以测试网络的下载速度、上传速度和延迟。 功能特点&#xff1a; 1. 速度测试 - 下载速度测试 - 上传速度测试 - Ping延迟测试 - 自动选择最佳服务器 2. 实时显示 - 进度条显示测试进度 - 实时显示测试状…

java每日精进1.31(SpringSecurity)

在所有的开发的系统中&#xff0c;都必须做认证(authentication)和授权(authorization)&#xff0c;以保证系统的安全性。 一、基础使用 1.依赖 <dependencies><!-- 实现对 Spring MVC 的自动化配置 --><dependency><groupId>org.springframework.bo…