华大MCU ADC采集问题分析
2020年01月22日 18:25 发布者:白虎姐
从早期的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的典型应用如下图所示:可设定其与 PCLK 的关系,如下表:下表为ADC 时钟频率F_ADC和 PCLK 分频比关系:https://mmbiz.qpic.cn/mmbiz_png/E5VdJKmytFibIric7zlQbMSiasqxe9bOsorhKkCUQJ65UU2UsmhTxicGibGAwLMf1ZAs8vLfqrF3icpDHI02GYou6ibicA/640?wx_fmt=png>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