【概述】
【ADC通用应用模型】
【配置阶段】
【使用阶段】
【在KL26上接地气】
【总结】
----我是可爱的分割线----
【概述】
大多数Kinetis芯片上使用的ADC都是SAR ADC(successive approximation ADC),例如我们熟悉的K60, K64, KL25及最近在社区里比较火的KL26。这个SAR ADC是一个非常好用的模块,一方面是说它在功能上可以很容易地执行模拟量到数字量的转换,但如果你深入了解一下这个ADC模块的软件编程模型,就会发现其中无处不体现着设计模型的经典。在下文中,我们将统一使用“KL26的ADC”指代我们今天要了解的这个漂亮的小东西。
当然,在这个文档里,我们的重点在于如何以最快、最简便和最好用的方式将这个ADC模块添加到应用程序当中,至于这个ADC经典的编程模型,以后我们还会在合适的时间详细讨论。对于忙碌的嵌入式软件工程师来讲,有太多的原理图要看,要写很多关于项目的程序和文档,实在没有时间去深究芯片内部一个功能模块的奥妙,好吧,那么我们这篇文档就有意义了,因为,因为通过这篇文档就是提供了一个“快餐”式的说明,能用起来就OK。
【ADC通用应用模型】
在单片机中使用任何一款ADC, 不论是哪家公司设计的IP,对ADC应用的模型基本上是相似的,主要包含两个阶段:配置阶段和使用阶段。呵呵,这里是有点废话了,因为所有的IP模块几乎都是以这两个阶段进行编程的。当我们要在应用程序中使用这些ADC的时候,只要对号入座,找到相应的代码填写到程序中即可。
【配置阶段】
对于一般的ADC来讲,配置阶段要做哪些必要的工作呢?
· 参考电压源。从ADC转换的本质来看,无非是拿外部采样回来的模拟信号同参考电压进行比较,“我是你的几分之几”,最终得到一个量化的参考值。在这个比较过程中,比较的次数就对应着转换的分辨率,然而,能执行更多次比较的关键在于ADC内部能够对参考电压进行细分,从而能够提供精细的分辨粒度。
· 驱动时钟。这是单片机上所有模块都必须的,要驱动数字系统工作。通常情况下,单片机会将某个总线上的时钟引出来一条信号线连接到模块上,如果模块内部希望调整这个时钟,还可以设计一个分频因子的选项,将这个从总线上引出来的时钟信号分频后再输入到模块里。同时,为了低功耗应用的需求(公共使用的总线时钟可能被停掉以降低功耗),模块内部也可以专门设计一个独立的时钟。
· 分辨率。分辨率之于ADC,就如波特率之于串行总线通信类的模块一样,标识了ADC模块的工作性能。
至于其它的功能,各家实现的ADC都有自己的特点,比如说对齐方式、单端差分、硬件平均、比较触发等等,都属于附加功能,用起来可以提升某些应用的性能,不用的话软件也可以搞定。
总之,只要选择好参考电压源、驱动时钟和分辨率,ADC基本上就可以工作了。如果你要跟我抬杠的话,好吧,供电和引脚也要考虑到。
|