本帖最后由 z1278064213 于 2019-6-5 09:03 编辑
背景介绍
恩智浦的Kinetis产品,多数都包含至少一个16位的SAR型ADC模块,相对很多以前需要MCU+外置ADC应用的场合来说,在成本上具有很大的优势,但是想要在实际应用中达到标称的精度,仅仅依赖ADC模块本身是不够的,实际的测量精度还会受到一系列外在因素的影响。
例如:
1.ADC时间配置(包括采集时间、转换时间、采样时间、采样时钟抖动等等)
2.电源性能(噪声和内部阻抗)
3.数据采集系统中数字和模拟部分的隔离情况
4.内部阻抗与外部阻抗的匹配
5.输入/输出开关切换的影响
6.PCB布局布线
但是在实际应用中发现,ADC引脚外部RC电路的电阻和电容取值,对ADC的性能影响比较大。如有客户反馈在ADC采样期间,会在ADC输入端观察到严重的电压扰动(电压跌落/电压尖峰),如下图1 所示。
图1. ADC采样时输入端的电压降落
这种现象在多通道顺序采样,且前一通道信号为地信号时,现象更加明显。这种扰动与SAR型ADC内部固有采样电路的特性相关,是不可避免的。
如何采取措施避免这种扰动对ADC采样的影响,尽可能的提高ADC的精度呢?答案是选择合适的采样时间,和ADC采样引脚RC电路中电阻和电容的数值。
从本质上讲,其目的是保证在采样时间Taq内,采样电容Csh充分充电,使其两端电压与待测输入电压之间的差值,处于一个可接受的范围内(通常在采样时间结束时刻,两者的差值不能超过满量程的0.5LSB)。
恩智浦的AN4373文档对这个问题进行了深入的探讨,但是文章冗长不好理解,本文化繁为简先介绍RC值求取的公式理论推导,然后给出具体实例,方便读者理解。
理论推导
在一般的采样过程中,我们将采样时间内的待测输入信号,当作一个有着恒定电压的直流电压源。通常设计人员会假设该电压源有着很大的内阻(即Rin>>Rsh)。在此假设下,采样电容充电期间将会出现两个明显不同的时间段,如图3所示。图中所绘为采样电容(红色)和输入电容(绿色)两端的电压波形,其中输入电容是指ADC引脚外部的电容Cin,采样电容是指ADC内部电容Csh。
图2. 等效的采样电路
图3. 输入电容和采样电容两端的电压波形
图3所示为输入电容上的初始电压大于采样电容上的初始电压的情况(即Vcin>Vcsh)。此时,输入电容两端的电压将出现电压降落。反之,当Vcin<Vcsh时,输入电容两端的电压将出现电压尖峰。
可以看到,图3中采样电容Csh两端的电压曲线,可以划分为两个时间段,高输入阻抗阶段和低输入阻抗阶段。在高输入阻抗的情况下,时间段Ⅱ的曲线变化要比时间段Ⅰ缓慢许多。其中,时间段Ⅰ采样电容充电来自于外部输入电容Cin,时间段Ⅱ采样电容充电来自于外部流过Rin的外部电压输入,因而图2所示的等效电路,可以根据时间段的不同划分为两个新的等效电路,如图4 所示。
图4. 等效电路 a.时间段I,b. 时间段II
图5. 时间段Ⅰ内采样电容充电的电压波形
首先,先讨论时间段Ⅰ内采样电容充电的波形,如上面图5所示。通过一系列公式推导(此处忽略推导过程,详见AN4373),可以得出电压降落/电压尖峰的幅度大小由后面的公式如下:
其中,α为输入电容和采样电容之比:
根据以上公式,可以发现输入电容与采样电容的比值越大,产生的电压降落(或电压尖峰)的幅度将越小。
接着,讨论时间段Ⅱ内采样电容充电的波形,其波形如下图6所示,而为了提高精度,我们的目标是保证图7中Vcx在Taq点采样的电压接近于真实值,也就是Vin-Vcx<0.5 LSB。
图6. 时间段Ⅱ内采样电容充电的电压波形
图7. 采样时间内的电压波形
而想要使采样电容两端电压与实际待测电压之间的误差小于0.5LSB,则采样保持开关必须在采样时间Taq内保持闭合,Taq需要满足:
另外,如果采样时间Taq已经确定(对于Kinetis,软件可以设置),其它的变量包括Csh、Vfsr都是datasheet决定的,未知的两个变量分别为Cin和Rin,对于Kinetis,通常选择Cin为33pf,则对于设计者来说只需要考虑输入电阻Rin,其计算方法是:
[注]:具体为何是33pF?AN4373文档表述为:参照数据手册8.2节中的建议,每个ADC输入端接不小于33pF的输入电容和不小于10Ω的输入电阻。需要注意的是,这个值是最小的值,实际选取可以适当大一些。通常在选择设计外部RC元件时,我们常常犯这样的错误,希望通过增加输入电阻来降低输入电流,或是实现测量源和ADC之间的阻抗隔离。现在考虑这样的情况,如果增加到10kΩ,使得在采样时间内不能充分充电,那么采样值也会不准确。所以,对于硬件设计者来说,问题的焦点集中在外部电阻的设计。
示范实例
以Kinetis为例,ADC时钟为12M、16位模式,采样时间设置尽可能的小(ADLSMP=0,ADLSTS=3,ADHSC=1)。按照以上设置,ADC理论计算的总转换时间约为2.7μs,采样时间Taq=6xADCK周期=6x1/12=500ns,其中,为何乘数是6,请参见ADLSTS的配置,理论上可以设置更长,对精度有好处,但会影响速度,需要用户去平衡。本示例是按照最快速度去计算的。
按照以下公式片刻计算得出合适的Rin,Taq上面得出是500ns,从Kinetis datasheet上可以查到,输入电容Cadin或者Csh最大值为10pF, 数据手册中对Cin输入电容没有限制(数据手册中表述为Cas,选择为33pF)
忽略其他的寄生参数, 现在我们得到了计算外部 RC 元件取值所需要的所有参数。
1.Taq=500ns, 取决于软件配置
2.Cin=33pf,取决于经验
3.Csh=10pf,取决于datasheet
4.Vin=3.3V,取决于参考电源
5.Vcsh=0V,求取最差情况,就是连续采集的两个通道差值最大,分别为VCC和GND
6.Vfsr=3.3V,同上
7.N=16,精度
代入公式,可以计算出Rin的最大取值为
其中
计算的输入电阻最大取值表示我们可以在模拟输入端加上的最大电阻, 同时又不会损失采样的精度。如果选用超过最大取值的电阻,则将导致转换结果的错误。数据手册中给出的最大取值5kΩ,原因在于,其计算的配置与本例中给出的最大取值因条件不同(数据手册中为12/13-bit分辨率模式以及更低的ADC时钟频率)。其电压跌落也能通过公式计算出来。
如图8所示,采样电容的充电过程在500ns的采样时间内已经完成。因此,可以预见在结果寄存器中能够得到准确的转换结果。ADC0模块的DAD0通道实际结果稳定在65535(这与理想值的偏差为0,即没有错误)。
图8. 正确的采样时间配置 - 测量结果为65535
图9是将输入电阻从1.1kΩ改为5.1kΩ时的电压波形,从图中能明显观察到在500ns的采样时间内,采样电容的充电过程还没有完成。因此,结果寄存器中的转换结果不可能正确,ADC0模块的DAD0通道实际结果在64750附近变化。
图9. 不正确的采样时间配置 - 测量结果为64750
总结
在采样时间Taq内,采样电容Csh必须充分充电,使其两端电压与待测输入电压之间的差值达到一个可接受的范围内。通常在采样时间结束时刻,两者的差值不能超过满量程的0.5LSB。
如果采用了高阻抗的输入电阻(更高的外部元件时间常数),则采样电容Csh将会首先由外部输入电容Cin的能量充电(更低的输入元件时间常数)。采样电容上的充放电过程导致了输入电容Cin两端电压的电压降落(或电压尖峰)。之后采样电容的充电过程由于较高的输入阻抗而变化的缓慢。
因此,外部RC元件的取值会从本质上影响ADC转换的精度,为了获得最佳的ADC性能,我们需要小心对待并设计外部RC元件,在选取采样时间时也必须参考采样电容充电的时间常数。其他需要满足的条件,详见器件的参考手册与数据手册。
信号的频率等综合考虑,但计算公式和选取思路是一样的,即在采样时间Taq内,采样电容Csh必须充分充电。
[注] 本文所涉及到的参数名字可能和数据手册中的表述有所不同。 例如:Rin=Ras(模拟源电阻),Cin=Cas(模拟源电容),Rsh=Radin(输入电阻),Csh=Cadin(采样电容),等式左边为本文所用符号,等式右边为数据手册用到的符号。
作者:喻宁宁 文章出处:恩智浦MCU加油站
|