700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 模数转换ADC模块

模数转换ADC模块

时间:2022-07-10 16:53:20

相关推荐

模数转换ADC模块

通用基础知识

ADC模块是嵌入式应用中重要的组成部分,是嵌入式系统与外界连接的纽带,是在测控系统中的重要内容。

ADC模块:即模数转换模块/AD转换模块,功能是将电压信号转换为相应的数字信号。实际应用中,这个电压信号可能由温度、湿度、压力等实际物理量经过传感器和相应的变换电路转化而来。经过AD转换,MCU就可以处理这些物理量。

转换精度

指数字量变化一个最小量模拟信号的变化量,也称分辨率,一般用ADC模块的位数来表示。通常ADC模块的位数有8位、10位、12位、14位、16位等。设采样位数为n,则最小的能检测到的模拟量变化值为½ⁿ

例如某一个AD转换模块是12位,若参考电压为5V,那这个AD模块可检测到的模拟量变化最小值(转换精度)为5/(2¹²)=1.22(mV)。

转换速度

通常用完成一次AD转换所要花费的时间表示AD转换器的转换速度。转换速度与AD转换器的硬件类型及制造工艺等因素密切相关,其特征值为纳秒级。

单端输入和差分输入

单端输入:指AD采集只有一个输入引脚,使用公共地GND作为参考电平。简单但容易受到干扰,由于GND电位始终是0V,因此AD值也会随着干扰而变化。

差分输入:比单端输入多了一个引脚,AD采样值是两个引脚的电平差值,降低了干扰,但是多用了一个引脚。通常两根差分线会布在一起,因此受到的干扰程度接近。

AD参考电压

在进行AD转换时,需要一个参考电压。例如把一个电压分成1024份,每一分的基准必须是稳定的,这个电平来自于基准电压(即AD参考电压)

在要求不是很精确的情况下,AD参考电压使用给芯片功能供电的电源电压。在更为精确的要求中,AD参考电压使用单独电源,要求功率小,波动小,一般电源电压达不到这个精度,否则成本太高。

为了使采集的数据更准确,必须的对采样的数据进行筛选去掉误差较大的毛刺。

滤波方法

通常采用中值滤波和均值滤波来提高采样精度。

中值滤波:将M次连续采样值按大小进行排序,取中间值作为滤波输出。

均值滤波:把N次采样结果值相加,然后除以采样次数N,得到的平均值。

若要得到更好的精度,可以通过建立其他误差模型分析方法来实现。

在实际应用中,得到稳定的AD采样值后,还需要把AD采样值与实际物理量对应起来。

物理量回归

AD转换的目的是把模拟信号转化为数字信号,供计算机进行处理,但必须知道AD转换后的数值所代表的实际物理量的值,这样才有实际意义。

例如,利用MCU采集室内温度,AD转换后的数值是126,实际温度25.1ᵒC。

设AD值为x,实际物理量为y,物理量回归就是寻找x与y之间的函数关系y=f(x)。

KL25 ADC通道输入表

KL25的ADC模块只有一个,记为ADC0,是线性逐次逼近ADC,最高转换精度为16位。

同时具有单端输入和差分输入两种采集模式。

差分模式的精度可配置为16位、13位、11位、9位。

单端模式的精度可配置为16位、12位、10位、8位。

KL25中还有其他形式的模拟输入通道,如芯片内部包含一个温度传感器,他的输出信号接在ADC模拟量个输入通道上,通道号为26。

ADC驱动构件

AD模块具有初始化、采样、滤波等操作。

按照构件化的思想,可将它们封装成独立的功能函数。

AD构件包括头文件adc.c和adc.h文件。

ADC驱动构件头文件

主要包括相关宏定义、AD的功能函数原型说明等内容AD各功能函数的实现。

在adc.h中,给出了定义AD采样次数的宏定义、输入模式的宏定义和A/B通道组的通道选择的宏定义。

adc_init函数需要完成对ADC模块的初始化,需要通过参数的主要有:输入模式(单端or差分)、转换精度、硬件滤波次数。

其他三个参数:转换速度、参考电压和物理量回归是由硬件决定或是需要具体应用程序来完成。

另一个需要初始化时制定的是通道组,用以选择使用KL25中的A通道还是B通道进行AD转换。

adc_read函数仅有一个参数,channel,即所需读AD转换值的通道号。使用这个函数之前,需调用初始化函数对相应通道组进行初始化。

根据以上两个函数,就可以正常使用AD转换功能。

以采集并输出KL25芯片温度为例,介绍ADC构件的使用方法。

ADC工程样例

第一步:adc_init(MUXSEL_A,AD_SINGLE,16,SAMPKE32);初始化A通道,单端输入,16位精度,32次硬件滤波的AD转换;

第二步:advalue=adc_read(26);读取通道26,每次采集32次硬件滤波,赋给16位无符号整形变量advalue;

第三步:float VTemp,temp;VTemp=(advalue*3300)>>16;//或VTemp=(advalue*3300)/65536.0;temp=25-(VTemp-719)/1.715;将读取的AD值通过公式转换成温度,具体公式参考KL25芯片手册。

第四步:printf("%f",temp);在串口调试工具观察温度传感器输出的温度

AD模块构件编程思想

AD初始化需要四个参数,即在进行AD初始化时主要就是对这四个参数进行寄存器配置。

通过对ADC_CFG2寄存器的D4位进行配置,选择使用A组或B组通道。

通过对ADC0_SC1A寄存器的D5位操作,配置是使用单端输入或差分输入,若选择差分输入模式,还需要对ADC模块进行校正。

通过对ADC_CFG1寄存器的D3D2位进行操作,选择ADC模块的采样精度。

对ADC0_SC3寄存器的配置,选择硬件滤波的次数。

关于ADC模块数据的读取,需要了解ADC0_SC1A、ADC0_RA这两个寄存器。

在读取AD数据时,等待ADC0_SC1A寄存器的COCO位被置位,一旦检测到COCO被置位,说明转换完成,即可读取数据结果寄存器ADC0_RA中的数据。

至此一次AD数据就读取完成了。

嵌入式技术基础与实践(第4版)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。