从早期的8位,10位到12位ADC,现在ADC模块已经成为了单片机的标配。但是ADC使用的时候采出来的数据一定是准确的吗?其实工程师朋友们在使用的时候如果不注意的话,得到的采样值会与实际之前存在一定的误差。这是由于SAR ADC的结构所决定的,SAR ADC的标准结构如下图: 在采样过程中开关处于闭合状态,并对采样电容进行充电。如果采样的速度过快或者输入电流过小会造成电容Csh充电不满,得到的采样值会低于实际值。当电路输入为小电流时,为了保护外部电路,防止由于电容突然与自己的输出相连而对外部电路形成冲击,我们在片上集成了一个模拟缓冲器如下图方框里所示。
缓冲器更像是一个阻抗变换器,它会把自己输出端电容量的变化转化为其输入端电容量的变化。可以通过对寄存器ADC_CR0中的BUFEN位进行配置来选择是否启用缓冲器。当缓冲器打开后最大的采样速率为200sps,其它情况下的采样速率如下表:
注意不同电压与采样率的问题:2.4v以上,最大采样率是1Msps,2.4v以下,最大采样降低为500KSps, 低于2.2v,最大采样率降低为200Ksps,注意不同参考源与采样率的问题:使用内部Vref时,最大采样率为200KSPS,达不到1MSPS。
知道了模块的原理后如何提高采样的精度? 第一种方法是找到噪声源,回避这个噪声源,比如在噪声源稳定,或者消失的时候,进行采样。就像电机驱动一样,ADC不会在PWM切换时 采样信号,因为PWM切换瞬间,噪声是最大的。 第二种方法是无法回避这个噪声源,那么我们的产品是有内部累加器的,比如进行16次采样,读取累加器高12位,就是16次采样的平均值,芯片内部都已经集成这个累积,求平均的硬件算法。 第三种方法是输入端加一个电容,进行去耦以及降低噪声影响,再使用ADC进行采样。 第四种方法是细节描述,比如在采样的几个cycle时,最好MCU的IO停止翻转驱动,因为这样会影响电源噪声。 最重要的是:外部Vref的这个GPIO 在ADC采样时,必须停止翻转,因为共享一个PAD,GPIO的翻转会把噪声引入ADC的Vref。 第五种方法是细节描述,比如采样的的几个cycle时,我们可以配置采样时间,加大sample的时间,这样可以更精确的采样信号。华大单片机ADC使用时推荐如下: ADC的典型应用如下图所示: 对于0.5LSB 采样误差精度要求的条件下,外部输入阻抗的计算公式如下: 其中F_ADC为 ADC 时钟频率,寄存器 ADC_CR0<3:2>可设定其与 PCLK 的关系,如下表: 下表为ADC 时钟频率F_ADC和 PCLK 分频比关系: M 为采样周期个数,由寄存器ADC_CR0<13:12>设定。
下表为采样时间t_sa和 ADC 时钟频率F_ADC的关系: 下为ADC 时钟频率F_ADC和外部电阻R_AIN的关系(M=12,采样误差 0.5LSB 的条件下):
R_AIN(KOhm) F_ADC(KHz) 10 5600 30 2100 50 1300 80 820 100 660 120 550 150 450 尽量减小ADC输入端口AIN_X 的寄生电容C_PARACITIC; 除了考虑R_AIN值外,如果信号源V_AIN的内阻较大时,也需要加入考虑 华大单片机-中国芯,中国梦中国人用自己的“芯” • 如有技术与价格疑问,可以随时拨打电话或QQ咨询 • 我司有强大的技术团队,可根据您的要求进行研发设计,量身定做,客户满意是我们的最高宗旨~! • 电话:18124577713 QQ:783592501 • 华大MCU交流QQ群: 164973950
|