ADC采样过程中遇到的问题

ADC是从模拟到数字世界的桥梁,当前ADC模块基本是MCU的标配,而且在转换速度和精度都有很好的表现,如NXP Kinetis KE15内部有2个16bit SAR型ADC模块(以精度制胜),可以配合EDMA完美实现双ADC的同步采样,STM32G4系列也有2个12bit但速度可达5M的ADC(以速度见长)。

相比很多以前需要MCU+外置ADC应用的场合来说,在成本上具有很大的优势。这些ADC通常都是SAR型(逐次逼近型)的,相比较∑Δ类型的ADC来说通常速度要快很多,但是精度会差些,但已足够满足大部分的应用。然而想要在实际应用中达到标称的精度,仅仅依赖ADC模块本身是不够的,实际的测量精度还会受到诸多外在因素的影响,例如:

  • ADC时间配置(包括采集时间、转换时间、采样时间、采样时钟抖动等等)
  • 电源性能(噪声和内部阻抗)
  • 数据采集系统中数字和模拟部分的隔离情况
  • 内部阻抗与外部阻抗的匹配
  • 输入/输出开关切换的影响
  • PCB布局布线

但是在实际应用中发现,ADC引脚外部的RC电路的电阻和电容的取值对ADC的性能影响比较大,如有客户反馈在ADC采样期间会在ADC输入端观察到严重的电压扰动(电压跌落/电压尖峰),如下图1 所示,从而影响实际采样精度。这种现象在多通道顺序采样,且前后两个连续采样通道信号电压差比较大时,现象会更加明显,因为ADC引脚的RC重新充电需要时间,这种扰动来源于SAR型ADC内部固有的采样电路,是不可避免的。

那既然无法避免,如何采取措施避免这种扰动对ADC采样的影响呢,尽可能的提高ADC的精度呢?答案是选择合适的采样时间和ADC采样引脚RC电路中电阻和电容的值,从原理上讲,其目的是保证在采样时间Taq内,采样电容Csh充分充电,使其两端电压与待测输入电压之间的差值达到一个可接受的范围内(通常在采样时间结束时刻,两者的差值不能超过满量程的 0.5LSB)。NXP AN4373文档对这块进行了深入的探讨,但是文章冗长不好理解,本文档尝试化繁为简先介绍RC值求取的公式理论推导,然后给出具体实例,方便理解。

理论分析

在一般的采样过程中,我们将采样时间内的待测输入信号当作一个有着恒定电压的直流电压源。通常设计人员会假设该电压源有着很大的内阻(即Rin>>Rsh)。在此假设下,采样电容充电期间将会出现两个明显不同的时间段,如图3所示。图中所绘为采样电容(红色)和输入电容(绿色) 两端的电压波形,其中,采样电容是指外部的电容,输入电容是指ADC内部电容。

图3所示为输入电容上的初始电压大于采样电容上的初始电压的情况(即Vcin>Vcsh)。此时,输入电容两端的电压将出现电压降落。反之,当Vcin<Vcsh时,输入电容两端的电压将出现电压尖峰。

可以看到,图3中采样电容Csh两端的电压曲线可以划分为两个时间段,高输入阻抗阶段和低输入阻抗阶段,在高输入阻抗的情况下,时间段Ⅱ的曲线变化要比时间段Ⅰ缓慢许多。其中,时间段Ⅰ采样电容充电来自于外部输入电容Cin,时间段Ⅱ采样电容充电来自于外部流过Rin的外部电压输入因而,图2所示的等效电路可以根据时间段的不同划分为两个新的等效电路,如图4 所示。

首先,先讨论时间段I内采样电容充电的波形,如上面图5所示。通过一系列公式推导(此处忽略推导过程,详见AN4373),可以得出电压降落/电压尖峰的幅度大小由后面的公式如下:

其中,α为输入电容和采样电容之比:

根据以上公式,可以发现输入电容与采样电容的比值越大,产生的电压降落(或电压尖峰)的幅度将越小。接着,讨论时间段II内采样电容充电的波形,其波形如下图6所示,而为了提高精度,我们的目标是保证图7中Vcx在Taq点采样的电压接近于真实值,也就是Vin-Vcx<0.5 LSB。


而想要使采样电容两端电压与实际待测电压之间的误差小于0.5LSB,则采样保持开关必须在采样 时间Taq内保持闭合,Taq需要满足:

另外,如果采样时间Taq已经确定(对于Kinetis,软件可以设置),其它的变量包括Csh、Vfsr都是datasheet决定的,未知的两个变量分别为Cin和Rin,对于Kinetis,通常选择Cin为33pf,则对于设计者来说只需要考虑输入电阻Rin,其计算方法是:

Note:具体为何是33pF?AN4373文档表述为:参照数据手册8.2节中的建议,每个 ADC 输入端接不小于 33 pF的输入电容和不小于10 Ω 的输入电阻。需要注意的是,这个值是最小的值,实际选取可以适当大一些。通常在选择设计外部RC元件时,我们常常犯这样的错误,希望通过增加输入电阻来降低输入电流,或是实现测量源和ADC之间的阻抗隔离。现在考虑这样的情况,如果增加到10 kΩ,使得在采样时间内不能充分充电,那么采样值也会不准确。所以,对于硬件设计者来说,问题的焦点集中在外部电阻的设计。

实例分析

此处以Kinetis为例(同样使用其他配备SAR型ADC的MCU),ADC时钟为12M,16bit模式,采样时间设置尽可能的小(ADLSMP=0, ADLSTS=3,ADHSC=1),按照以上设置,ADC理论计算的总转换时间约为2.7 μs,采样时间Taq=6xADCK cycle=6x1/12=500ns,其中,为何乘数是6,请参见ADLSTS的配置,理论上可以设置更长,对精度有好处,但会影响速度,需要用户去平衡,本示例是按照最快速度去计算的。

按照以下公式片刻计算得出合适的Rin,Taq上面得出是500ns,从Kinetis datasheet上可以查到,输入电容Cadin或者Csh最大值为10pF, 数据手册中对Cin输入电容没有限制(数据手册中表述为Cas,选择为33pF,



忽略其他的寄生参数, 现在我们得到了计算外部 RC 元件取值所需要的所有参数。

  • Taq=500ns, 取决于软件配置
  • Cin=33pf,取决于经验
  • Csh=10pf,取决于datasheet
  • Vin=3.3V,取决于参考电源
  • Vcsh=0V,求取最差情况,就是连续采集的两个通道差值最大,分别为VCC和GND
  • Vfsr=3.3V,同上
  • N=16,精度

代入公式,可以计算出Rin的最大取值为:

其中:

计算的输入电阻最大取值表示我们可以在模拟输入端加上的最大电阻, 同时又不会损失采样的精度。如果选用超过最大取值的电阻,则将导致转换结果的错误。datasheet数据手册中给出的最大取值5kΩ,原因在于,其计算的配置与本例中给出的最大取值因条件不同而不同(数据手册中为 12/13-bit分辨率模式以及更低的ADC 时钟频率)。其电压跌落也能通过公式计算出来。

如图 11 所示,采样电容的充电过程在500 ns的采样时间内已经完成。因此,可以预见在结果寄存器中能够得到准确的转换结果。ADC0 模块的 DAD0 通道实际结果稳定在 65535(这与理想值的偏差为 0,即没有错误)。

图12是将输入电阻从 1.1 kΩ 改为 5.1 kΩ 时的电压波形,从图中能明显观察到在 500 ns 的采样时间内,采样电容的充电过程还没有完成。因此, 结果寄存器中的转换结果不可能正确, ADC0模块的 DAD0 通道实际结果在 64750 附近变化。

总结

  • 在采样时间Taq内,采样电容Csh必须充分充电,使其两端电压与待测输入电压之间的差值达到一个可接受的范围内。通常在采样时间结束时刻,两者的差值不能超过满量程的 0.5LSB。
  • 如果采用了高阻抗的输入电阻(更高的外部元件时间常数),则采样电容Csh将会首先由外部输入电容Cin的能量充电(更低的输入元件时间常数)。采样电容上的充放电过程导致了输入电容Cin两端电压的电压降落(或电压尖峰)。之后采样电容的充电过程由于较高的输入阻抗而变化的缓慢。
  • 因此,外部 RC 元件的取值会从本质上影响ADC转换的精度,为了获得最佳的 ADC 性能,我们需要小心对待并设计外部 RC 元件,在选取采样时间时也必须参考采样电容充电的时间常数。其他需要满足的条件,详见器件的参考手册与数据手册。

示例中计算电阻R是基于33pF电容的,实际使用中,用户还需要对信号和外部可能的干扰信号的频率等综合考虑,但计算公式和选取思路是一样的,即在采样时间Taq内,采样电容Csh必须充分充电。

尽管示例中选取Kinetis MCU作为计算对象,但实际该计算方法也适用于其他的SAR型ADC。

Note:本文所涉及到的参数名字可能和数据手册中的表述有所不同。例如:Rin=Ras(模拟源电阻),Cin=Cas(模拟源电容),Rsh=Radin(输入电阻),Csh=Cadin(采样电容),等式左边为本文所用符号,等式右边为数据手册用到的符号。

参考:痞子衡嵌入式

ADC外部RC电路电阻和电容选取计算方法相关推荐

  1. 电阻、电容、电感在电路中的作用及大致选择的条件

    #电阻电容电感# 一.电阻 1.定义 导体对电流阻碍作用的大小:电阻越大,对电流的阻碍越大,即电流越小:电阻越小,对电流的阻碍越小,即电流越大. 2.作用 1)限流.比方说在驱动发光二极管时,加一个电 ...

  2. 使用AD8618设计ADC信号调理电路随笔

    使用AD8618设计ADC信号调理电路随笔 最近需要设计DCDC控制板的信号调理电路,受益良多,记录一下. 1.电压电流传感器参数如下: 2.输出电压±5V,DSP的ADC输入信号为0-3V,留出裕量 ...

  3. 模拟开关和多路复用器的基础参数(导通电阻,电容,漏电流,关断隔离等)介绍

    在测试测量相关应用中,模拟开关和多路复用器有着非常广泛的应用,例如运放的增益调节.ADC分时采集多路传感器信号等等.虽然它的功能很简单,但是仍然有很多细节,需要大家在使用的过程中注意.所以,在这里为大 ...

  4. RC电路(积分电路,微分电路)

    RC电路是电阻器电容器电路(RC电路)或者RC过滤器,RC网络是电路a和电容器驾驶的组成由电阻器电压或当前来源.一次RC电路由一个电阻器和一台电容器组成,是RC电路的简单例子.RC电路在模拟电路.脉冲 ...

  5. 基于RC电路的DA14585测量NTC电阻阻值

    本文主要讲解如何使用RC电路实现环境温度测量,在通常情况下,我们会采用ADC分压的方式,但是这里对ADC有精度要求,一般为12bit 或者14bit.但是苦于DA14585的ADC是10bit,达不到 ...

  6. AVX | 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~

    所谓RC电路,就是电阻R和电容C组成的一种分压电路.如下图1所示:输入电压加于RC串联电路两端,输出电压取自于电阻R或电容C.由于电容的特殊性质,对下图(a)和(b)不同的输出电压取法,呈现出不同的频 ...

  7. 自举电路工作原理和自举电阻和电容的选取

    自举电路的工作原理 如下图自举电路仅仅需要一个15~18V的电源来给逆变器的驱动级提供能量,所有半桥底部IGBT都与这个电源直接相连,半桥上部IGBT的驱动器通过电阻Rboot和二极管VF连接到电源V ...

  8. 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~

    所谓RC电路,就是电阻R和电容C组成的一种分压电路.如下图1所示:输入电压加于RC串联电路两端,输出电压取自于电阻R或电容C.由于电容的特殊性质,对下图(a)和(b)不同的输出电压取法,呈现出不同的频 ...

  9. 电工技术(6)—RC电路的响应

    公式一定要记住,公式一定要记住,公式一定要记住,重要的事情敲三遍. 一:RC电路的零输入响应 零输入响应: 电源激励,输入信号为零,仅由电容元件的初始储能所产生的电路的响应. 实质:RC电路的放电过程 ...

最新文章

  1. Android开发ADB的安装
  2. 「大咖云集硅谷AI大会」人工智能商业化的趋势与挑战
  3. C/C++基础知识点(四)
  4. 如何检查并unregister本地注册的Chrome service worker
  5. python做请求转发_RequestDispatcher实现请求转发
  6. P1829-[国家集训队]Crash的数字表格/JZPTAB【莫比乌斯反演】
  7. 前端学习(3334):ant design中加入icon
  8. 【转】CT基本概念(必须掌握)!!!!!!!!!!!!!!
  9. Android系统使用感受——记录我的三星GT-S5830
  10. 如何阅读python源码_如何阅读源代码(转)
  11. BAT程序员手把手带你学算法-数组篇(理论知识剖析+5道经典面试题目)
  12. Taskctl是什么软件,有什么用?
  13. 算法入门基础知识总结
  14. PHP做一个直角三角形,三角形角度(直角三角形懒人计算器)
  15. QueryDSL 大于、小于、大于等于、小于等于、等于、不等于方法
  16. 神经网络预测参数有哪些,神经网络预测参数包括
  17. Mac OS 关闭系统更新提示小红点
  18. 推荐很nice英文文献翻译软件
  19. 利用 POI 修改插入图表
  20. python 响铃_python——字符串-阿里云开发者社区

热门文章

  1. python一键导出百度网盘目录文件
  2. java日历翻动效果_JavaLayal.SET(日历,星期一,日历,星期日),它会向后、向前或未知地滚动吗?...
  3. linux离线安装中文字体
  4. 使用EXCEL制作核酸检测结果异常人员活动轨迹地图
  5. 继中国区裁员后 甲骨文西雅图办公室再裁员数百人
  6. Redis数据操作(redis入门)
  7. eNSP防火墙任务配置
  8. 全球与中国零卡路里饮料市场深度研究分析报告
  9. fsolve matlab 含参_fsolve 解有参数的多个方程
  10. js 获取ulr问号后参数,返回Object对象