STM32 精准采集ADC电压,误差分析

2023-05-16

ADC模块采集电压流程

数字世界和模拟世界的桥梁,对于嵌入式软件而言,大家止于采集功能的实现。

本文目的在于深入理解ADC,积累技术做出更加稳定优秀的产品。

在这里插入图片描述
STM32 大部分系列都是使用SAR 逐次逼近型电压采集
VIN是采集的模拟输入口,VREF表示参考电压。Sa PIN和内部ADC的开关。Sb 接地开关。

电压采集阶段
在这里插入图片描述
电压采集阶段就是内部电容充电的过程。Sb闭合后ADC内部(这里称之为采样保存电路,并不是转换器核心)的电容会进行充电,这个过程需要消耗一定的时间。一但采集完成,相当于复制了一份模拟输入引脚的 电压值。采集阶段完成后这个时候VIN已经不需要了,也就是说这个Pin 上的电压已经采集完毕。
在这里插入图片描述
等效电路就是VIN对电容2C进行充电。
前面说道这里是采用保持电路,所以有保持阶段
在这里插入图片描述
这个阶段就是各个电容充电完毕,在ADC核心转换器工作前的这断时间。这个时候VIN PIN模拟输入引脚已经和ADC断开了。Sb开路。
也就是说实际上ADC 转换核心转换的是采样保持电路的电压。所以务必要根据手册,明确采样阶段最小用时,确保充电阶段完成。
在这里插入图片描述
其等效电路入上图所示电容器一断的电压为-VIN

转换阶段
这个阶段的重点在于每次二分。
在这里插入图片描述

在这里插入图片描述
这里设计到一些电路的知识,如果是软件开发会比较难懂
在这里插入图片描述
在这里插入图片描述

具体的过程讲起来比较复杂,软件工程师只需要对其逐次逼近转换的二分思路有理解即可。

这个可能会因为各个芯片的转换核心而异

在这里插入图片描述
本节重点:
1.ADC的采样保持电路 ,采集VIN电压,形成副本供ADC转换核心使用
2.电压转换逐次逼近转换的二分思路 0.5+0.25+0.125+…=1
在这里插入图片描述
关于采样时间,采样时间是电容充电的过程,如上图所示,实线代表充电过程虚线代表放电。
t =RC, C 为采样电容,R为充电回路的电阻。
一般来说需要5 RC采样时间,这样内部电容可以精准的采集到输入电压。
在这里插入图片描述
5RC 时间大概采集到两端电压的99.3%
在这里插入图片描述
6RC 时间大概采集到两端电压的99.8%
这个电压值永远都无法充电到100%V,一般来说5RC的时间,认为充满。

5RC 充满到99.3%,还有千分之七的电压未采集。 7/1000
一般的ADC 12位 1/4049的采样精度。这个时候需要去看产品的设计要求。一般情况下不需要做补偿。

ADC module 转换误差

对于STM32 ADC,电压的最小可检测增量变化用LSB表示为:

1 LSB 表示ADC模块可分辨的最小电压
12 位ADC 其一个单位表示V* 1/4096
10 位ADC 其一个单位表示V* 1/1024

为了后面书写方便 1LSB的系数表示为 12 位ADC P = 1/4096 ,10 位ADC P= 1/1024

满量程转换电压V
V 满量程转换电压,这部分不同的ADC和电路有不同的设计
V =(VREF+)-(VREF-) 一般采用这种

V =(VREF+)-(VSSD)
其中VSSD可以为GND。这取决于电路设计。

resault = Vin/V *P 其中Vin为需要采集的电压
Vin在不同的ADC模块中有不同的配置
Vin = Vi -VGND,对地电压
Vin = Vp -Vn 差分输入电压。
Vin = Vp- Vref-
一般而言是最后一种,取决于电路的连接情况和ADC模块。

把ADC作为一个系统而言,Vin是系统的输入,resault 是系统的输出

V是系统内部的电压,其如果变化,那么输出结果变化。转换结果的稳定性就会受到影响。
在这里插入图片描述
ADC器件内部的误差

1.偏移误差 offset

offset一般指的是偏移误差,较正确值产生的一段位移。

理想情况下,当模拟输入介于0.5 LSB和1.5 LSB之间时,数字输出应为1。

V >0.5 LSB 输出1,V<0.5LSB 输出0,实际上 V>0.5LSB +W 时输出才为1,V<0.5LSB +W 为0
就会有下面的曲线,W>0 也就是Eo >0
在这里插入图片描述

w < 0 时
在这里插入图片描述
可通过应用固件轻松校准偏移误差。也就是在ADC初始化的时候 calibration

ADC Calibration 是一个很复杂的学问。我们只需要记得,一定要开启。

增益误差是指ADC实际传输特性曲线和理想传输特性曲线的偏差程度。增益误差的单位是%FSR(满量程值)。如果没有校准,那么增益误差会限制信号输出的准确性
在这里插入图片描述
红线为理想ADC的传输特性曲线,蓝线为实际ADC的传输特性曲线。
当然蓝色曲线在红色上方误差为 + ,再下方是为 -

微分线性误差
手册用 Linearity error 来表示。他表示了ADC器件在所有的数值点上对应的模拟值,和真实值之间误差最大的那一点的误差值。
输出数值偏离线性最大的距离
在这里插入图片描述
积分线性误差为任何实际转换和端点相关线间的最大偏离。
在这里插入图片描述
总未调整误差
总未调整误差( TUE)为实际和理想传输曲线间的最大偏离。此参数指定可能发生的会导致
理想数字输出与实际数字输出之间最大偏离的总误差。
在这里插入图片描述

ADC环境导致的误差

其中有很多是硬件工程师需要关注的问题,软件工程师需要对误差的来源有认识。
在必要的情况下,要求硬件工程师一起参与问题的分析。

1.参考电压噪声:电源的噪声导致参考电压波动,从而对ADC转换值产生影像
2.参考电压/电源调节:负载及其输出阻抗导致电源输出下降,影响到参考电压

3.外部参考电压参数
当使用外部参考电压源( VREF+引脚上)时,该外部参考源有一些重要参数。必须考虑三个
参考电压规格:温度漂移、电压噪声和长期稳定性

4.模拟输入信号噪声
在采样时间内,小而高频率的信号变化可导致较大转换误差。

5.最大输入信号幅度的ADC动态范围匹配不佳
被采集的信号电压波动范围,占ADC总量程的比例。

6.模拟信号源电阻的影响
在源和引脚之间的模拟信号源的阻抗或串联电阻( RAIN),可能会因为流入引脚的电流而导
致其上的电压降。通过电阻为RADC的开关控制内部采样电容( CADC)的充电。
在这里插入图片描述
7.PCB源电容和寄生电容的影响
在转换模拟信号时,必须考虑源电容和模拟输入引脚上的寄生电容
一般情况下低频信号不用考虑,当然需要结合RC时间常数来考虑
在这里插入图片描述
8.注入电流的影响
任何模拟引脚(或紧邻的数字输入引脚)上的负注入电流都可能在ADC输入中产生泄漏电流。
在这里插入图片描述

9.温度影响
温度对ADC精度有重要影响。它主要产生两种重要误差:偏移误差漂移和增益误差漂移。这些误差可以在微控制器固件中得到补偿
一般来说会制作一张温度和转换值的对应表格,用来修正温度对ADC的影像。

10.I/O引脚串扰
由于I/O之间的电容耦合,切换I/O可能会在ADC的模拟输入中产生一些噪声。彼此距离很
近或交叉的PCB走线可能会产生串扰。
内部切换数字信号和I/O会产生高频噪声。由于电流浪涌,切换高灌电流I/O可能导致电源
电压小幅下降。 PCB上与模拟输入走线交叉的数字走线可能影响模拟信号

在这里插入图片描述
11.EMI产生的噪声
在这里插入图片描述

如何得到最佳ADC精度

ADC自校准功能或通过微控制器固件可以轻松补偿偏移误差和增益误差。

参考电压/电源噪声最小化(硬件设计),一般来说使用噪声小的电源,增加滤波电路。

MCU端去耦,引脚间产生耦合
在这里插入图片描述

参考电压/电源调节
电源的负载会产生变化,需要保证电压供给VREF 不会应为负载变化而变动

模拟输入信号噪声消除

1.多次求平均值
2.添加外部滤波器
3.添加白噪声或三角波扫描来改善分辨率。软件工程师只需要去求平均值。
4.将ADC动态范围与最大信号幅度进行匹配
在这里插入图片描述
使用前置放大器。相对来说使用Gain的器件会引入误差,需要考虑是否划算。
在这里插入图片描述
5.模拟源电阻 (硬件方法)
6.源频率条件 vs. 源和寄生电容 (硬件 方法)
7.温度影响补偿 前面说过用查表
8.注入电流最小化(硬件方法)
9.I/O引脚串扰最小化
在这里插入图片描述
10.减少EMI所致噪声(硬件方法)
11.将模拟和数字布局分开(硬件方法)
12.隔离模拟和数字电路电源(硬件方法)

提高精度的软件方法

1.平均采样 多次采样会消耗跟多时间
2.数字滤波
3.AC测量的快速傅里叶变换
4.ADC校准:偏移、增益、位权重校准
5.使CPU生成的内部噪声最小化
软件上比较高端的操作,在采样和转换周期数字静默

实践方法

1.多次求平均值

在这里插入图片描述
多次就平均值的 方法比较常见。采样N次,求N次采样的平均值。如果N为2的倍数,可以用位移的方法快速求得平均值。
在这里插入图片描述
总转换时间 = (采样数 * ADC 转换时间) + 计算时间
额外的开销在与采样次数 和 计算时间。

uint16_t ADC_GetSampleAvgN(uint8_t N)
{
uint32_t avg_sample =0x00;
uint16_t adc_sample[8]={0,0,0,0,0,0,0,0};
uint8_t index=0x00;
/* 得到 N 个 ADC 采样 */
for (index=0x00; index<N; index++)
{
/* ADC 开始转换 */
ADC_SoftwareStartConv(ADC1);
/* 等待转换结束 */
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
/* 储存 ADC 采样 */
adc_sample[index] = ADC_GetConversionValue(ADC1);
}
/* 累加 N 个 ADC 采样 */
for (index=0; index<N; index++)
{
avg_sample += adc_sample[index];
}
/* 计算 N 个 ADC 采样的均值 */
avg_sample /= N;
/* 返回均值 */
return avg_sample;
}

基于先取 N 个 ADC 采样,将它们从最大值到最小值 (或相反顺序)排序,然后删除两端的 X 个采样。
此平均方法比之前一个更有效,因为它删除了会影响平均的两端值,而且它在执行时间和转换精度之间给出了一个较好的折中。
在这里插入图片描述
同样额外的开销是计算时间。

ADC 的软件滤波方法

1.限制幅度滤波
两次采样值的差值如果过大,则认为最近一次的值采集误差较大,舍去。

该方法需要对采样值的变化幅度有所认知。也就是信号在采样间隔下的波动范围。采样值的波动超过原始信号的波动幅度认为采集到的数据
收到干扰,故舍弃采样值。

2.中间值
采样多次,按照数值大小排列,去中间值为采样值

对于信号的波动速度比较慢的信号效果比较好

3.求平均值
采样多次直接求平均

采样多次意味着时间跨度较长,平均值的意义是一段时间的中间值。所以灵敏度比较低
适合随机扰动的系统

4.递推平均

按照时间顺序,设定窗口大小,移动窗口进行采样

5.中值平均

采样N个值,去掉最大最小
计算平均值

6.限幅平均
根据1方法,求平均值

7.一阶低通
y=K本次结果+(1-K)上次结果

8.加权平均
采样多次,每次采样的结果分配权重,取得平均值

9。消抖
在一段时间内采样值波动幅度在可接收范围内,认为抖动消除

10.限制幅度消除抖动
1,9方法结合

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 精准采集ADC电压,误差分析 的相关文章

随机推荐

  • 硬件中断和软件中断的区别

    中断 中断指当出现需要时 xff0c CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程 即在程序运行过程中 xff0c 系统出现了一个必须由CPU立即处理的情况 xff0c 此时 xff0c CPU暂时中止程序的执行转而处理这
  • 嵌入式C语言自我修养笔记1-ARM体系结构与编译运行

    目录 ARM 体系结构ARM 体系结构ARM 汇编指令ARM 寻址方式ARM 伪指令C 与汇编混合编程 程序编译链接与安装运行预处理过程编译过程链接过程程序安装apt get链接静态库动态链接共享库插件工作原理Linux 内核模块运行机制L
  • Renode应用:在RISC-V核上运行FreeRTOS

    本篇记录通过Renode在RISC V核上运行FreeRTOS demo的情况 本来不准备写这一篇 xff0c 但是发现近期工作学习密度实在太大 xff0c 上周工作的中间结果这周竟然完全想不起来了 xff0c 不得不又花了一些时间从头摸索
  • VideoStream流媒体(VOD视频点播)系统平台

    软件介绍 xff1a VideoStream是集流媒体视频服务和流媒体应用管理为一体的综合流媒体服务系统 xff0c 本产品通过宽带IP网络为教育系统 各类运营商 政府企业等用户提供音视频服务的应用 系统特点 xff1a 1 采用WEB端口
  • c语言实现模拟FTP服务器项目

    下载源码后 xff0c 直接可以在ubuntu中编译运行 xff1a FTP服务器程序功能 xff1a 客户端 xff1a 1 输入命令 xff1a help 查看FTP服务器所支持的所有命令 2 输入名 xff1a ls 查看服务器上可以
  • 基于ArUco的视觉定位

    参考如下 博客 基于ArUco的视觉定位 1 3 https www freesion com article 4265319144 基于ArUco的视觉定位 4 https www pianshen com article 2491452
  • 伺服电机和步进电机的区别

    硬件型号 xff1a 三菱伺服电机HG KR43J 系统版本 xff1a 电机系统 1 控制的方式不同 步进电机 xff1a 通过控制脉冲的个数控制转动角度的 xff0c 一个脉冲对应一个步距角 伺服电机 xff1a 通过控制脉冲时间的长短
  • ubutnu更换国内源后,更新一直出现404,Not Found的问题

    1 问题 题主系统是ubuntu16 04 64位系统 尝试更换国内各种源 连ubuntu官方源都尝试了 sudo vim etc apt sources list修改为 deb https mirrors tuna tsinghua ed
  • Python+Flask实现股价查询系统。Python绘制股票k线走势

    文章目录 一 实现效果图二 实现思路1 获取数据 2 可视化数据三 源码获取 一 实现效果图 打开默认显示半年线 xff0c 可以通过可视化类型选择可视化k线图 高低点等 xff08 目前只完成了初版 xff0c 当查询的股票数据返回为空时
  • Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16

    今天在ubutun中在安装redis过程中 xff0c 安装gcc时遇到了Failed to fetch http mirrors tuna tsinghua edu cn ubuntu pool main g gcc 5 g 43 43
  • 切换日语输入法找不到MicrosoftIME键盘选项了

    去微软官方下载一个 Microsoft IME office 2010后 xff0c 安装解决 转载于 https www cnblogs com tupx p 3816026 html
  • msgid 属性

    Android源码中的String xml文件 xff0c msgid这个属性是干嘛的 xff1f 全局资源 xff0c 方便引用 比如在布局的text和activity中用到 转载于 https www cnblogs com Ph on
  • 2017年09月23日普级组 数列

    Description 小S今天给你出了一道找规律题 xff0c 题目如下 xff1a 有如下的数列1 xff0c 11 xff0c 21 xff0c 1211 xff0c 111221 xff0c 312211 xff0c 小S问你这个数
  • python 机器学习实战:信用卡欺诈异常值检测

    今晚又实战了一个小案例 xff0c 把它总结出来 xff1a 有些人利用信用卡进行诈骗等活动 xff0c 如何根据用户的行为 xff0c 来判断该用户的信用卡账单涉嫌欺诈呢 xff1f 数据集见及链接 xff1a 在这个数据集中 xff0c
  • Virtual Serial Port Driver 虚拟串口工具软件 使用介绍

    一般来说 xff0c 电脑的外部设备可以用过各种端口和电脑连接 常见的有USB xff0c VGA xff0c DVI等等 在工业领域或者是软件开发领域 xff0c 我们常常需要用简单低成本快捷的方式 xff0c 完成电脑和设备的连接 那么
  • Freertos 源码分析 队列queue

    队列queue xff08 零 xff09 队列的基础概念和形态 xff08 一 xff09 Freertos 队列 queue c FreeRTOS Kernel 10 4 6 include queue h Freertos队列模块包含
  • Freertos 任务TASK(一) 任务创建

    任务的创建 Freertos 的任务创建难点 1 xff09 堆栈生长的方向 2 xff09 64字节的对齐 3 xff09 任务堆栈初始化 Freertos 的任务使用任务控制块来进行管理 xff0c 是对任务的抽象 任务本身就是一段可执
  • Freertos Cortex-M3上下文切换

    上下文切换是操作系统实现虚拟化的核心功能 xff0c 操作系统对任务的管理通过上下文切换完成 Freertos 在STM32F103上的上下文切换是本文介绍的内容 STM32F103 采用 Cortex M3 内核 上下文切换的本质是对现场
  • STM32CubeMX配置freertos配置任务(一)

    使用STM32CubeMX 配置Freertos 生成一个任务点亮LED stm32cubemx STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具 xff0c 允许用户使用图形化向导生成C 初始化
  • STM32 精准采集ADC电压,误差分析

    ADC模块采集电压流程 数字世界和模拟世界的桥梁 xff0c 对于嵌入式软件而言 xff0c 大家止于采集功能的实现 本文目的在于深入理解ADC xff0c 积累技术做出更加稳定优秀的产品 STM32 大部分系列都是使用SAR 逐次逼近型电