第7章 ADDACMP和TSI模块Word文档下载推荐.docx
《第7章 ADDACMP和TSI模块Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第7章 ADDACMP和TSI模块Word文档下载推荐.docx(33页珍藏版)》请在冰点文库上搜索。
![第7章 ADDACMP和TSI模块Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/7abbc45a-221b-41dd-ac15-3aeb0a0b31fb/7abbc45a-221b-41dd-ac15-3aeb0a0b31fb1.gif)
若要得到更高的精度,可以通过建立其他误差模型分析方式来实现。
4.物理量回归
在实际应用中,得到稳定的A/D采样值以后,还需要把A/D采样值与实际物理量对应起来,这一步称为物理量回归。
A/D转换的目的是把模拟信号转化为数字信号,供计算机进行处理,但必须知道A/D转换后的数值所代表的实际物理量的值,这样才有实际意义。
例如,利用MCU采集室内温度,A/D转换后的数值是126,实际它代表多高温度呢?
如果当前室内温度是25.IV,则A/D值126就代表实际温度25.℃。
7.1.2A/D转换常用传感器简介
传感器是指把物理量或化学量转变成电信号的器件,它是实现测试与自动控制系统的首要环节。
例如,电子计价枰中所安装的称重传感器,是电子计价枰的重要部件,它担负着将重量转换成电信号的任务,该电信号被放大器放大并经A/D转换后,由显示器件给出称重信息。
如果没有传感器对原始参数进行精确可靠的测量,无论是信号转换或信息处理都将无法实现。
传感器的种类可分为力、热、湿、气、磁、光、电等。
各种传感器都是根据相关材料在不同环境下会表现出不同的物理特性研制而成的。
下面介绍一些简单的传感器。
1.温度传感器
温度传感器是利用一些金属、半导体等材料与温度有关的特性制成的,这些特性包括热膨胀、电阻、电容、磁性、热电势、热噪声、弹性及光学特征,根据制造材料将其分为热敏电阻传感器、半导体热电偶传感器、PX结温度传感器和集成温度传感器等类型。
热敏电阻传感器是一种比较简单的温度传感器,其最基本电气特性是随着温度的变化自身阻值也随之变化。
图7-2(a)是XTC热敏电阻。
(a)NTC热敏电阻(b)热敏电阻的简单采样电路
图7-2热敏电阻及其采样电路
在实际应用中,将热敏电阻接入图7-2(b)的采样电路中,热敏电阻和一个特定阻值的电阻串联,由于热敏电阻会随着环境温度的变化而化,因此A/D采样点的电压也会随之变化,A/D采样点的电压
式中,X是一特定阻值,根据实际热敏电阻的不同而加以选定。
假如热敏电阻阻值增大,采样点的电压就会减小,A/D值也相应减小;
反之,热敏电阻阻值减小,采样点的电压就会增大,A/D值也相应增大。
所以采用这种方法,MCU就会获知外界温度的变化。
如果想知道外界的具体温度值,就需要进行物理量回归操作,也就是通过A/D采样值,根据采样电路及热敏电阻温度变化曲线,推算当前温度值。
2.光敏电阻器
光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;
入射光强,电阻减小;
入射光弱,电阻增大。
光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。
通常,光敏电阻器都制成薄片结构,以便吸收更多的光能。
当它受到光的照射时,半导体片(光敏层)内就激发出电子—空穴对,参与导电,使电路中电流增强。
一般光敏电阻器结构如图7-3(a)所示。
图7-3(b)给出了简单的光敏电阻采样电路,其中A/D采样点的电压的计算方法类似于上述热敏电阻A/D采样点电压的计算。
图7-3光敏电阻及其采样电路
3.灰度传感器
所谓灰度,也可认为是亮度,简单地说就是色彩的深浅程度。
灰度传感器的主要工作原理是使用两只二极管,一只为发白光的高亮度发光二极管,另一只为光敏二极管。
发光二极管发出超强白光照射在物体上,通过物体反射回来落在光敏二极管上,由于受照射在它上面的光线强弱的影响,光敏二极管的阻值在反射光线很弱(也就是物体为深色)时为几百千欧,—般光照度下为几千欧,在反射光线很强(也就是物体颜色很浅,几乎全反射时)为几十欧。
这样就能检测到物体的颜色的灰度了。
7.1.3A/D转换模块概要与编程要点
1.A/D模块简介概要
由于K60的ADC模块的时钟频率最高可配置为50MHz,最快采样周期为4个时钟,所以采样速率最高可达12.5MHz。
K60共有2个ADC模块,每个ADC模块包含27个寄存器。
ADC模块由于使用了线性逐次逼近算法,所以具有最高可达16位的分辨率。
同时ADC具有差分输入和单端输入两种采集模式。
差分输入模式具有4路,每路有可以分别配置为16位、13位、11位和9位四种采集精度;
单端输入模式具有24路,每路可以分别配置为16位、12位、10位和8位四种采集精度。
当K60的ADC模块配置为差分模式时,将4对差分引脚视为差分输入源,将该对引脚的电压差值作模数转换的测量值,而且相应的结果寄存器会出现符号位。
当差分引脚DP的电压比DM高时,符号位为0。
当差分引脚DP的电压比DM低时,符号位1。
虽然差分可以带符号,但这里还是建议读者设置DP端的电压值高于DM端的电压值。
如果ADC模块配置位为非差分模式时,那么差分模式下的所有差分输入正端将视为单端模式的输入端。
其实单端输入可以理解为另一端电压值永远为0V的差分输入。
2.A/D模块寄存器
ADC模块共有2个通道,每个道共有28个寄存器。
表7-2列出了ADC0道的28个寄存器的内存映射,ADC0通道的寄存器名、复位值和该通道相同,基地址则从400B_B000开始。
表7-2ADC0通道寄存器映射
绝对地址
寄存器名
宽度
进入方式
复位值
4003_B000
ADC状态控制寄存器1(ADC0_SC1A)
32
R/W
0000_001Fh
4003_B004
ADC状态控制寄存器1(ADC0_SC1B)
4003_B008
ADC配置寄存器1(ADC0_CFG1)
0000_0000h
4003_B00C
ADC配置寄存器2(ADC0_CFG2)
4003_B010
ADC数据结果寄存器(ADC0_RA)
R
4003_B014
ADC数据结果寄存器(ADC0_RB)
4003_B018
比较值寄存器(ADC0_CV1)
4003_B01C
比较值寄存器(ADC0_CV2)
4003_B020
状态和控制寄存器2(ADC0_SC2)
4003_B024
状态和控制寄存器3(ADC0_SC3)
4003_B028
ADC偏移校正寄存器(ADC0_OFS)
0000_0004h
4003_B02C
ADC加方增益寄存器(ADC0_PG)
0000_8200h
4003_B030
ADC减方增益寄存器(ADC0_MG)
4003_B034
ADC加方通用校准值寄存器(ADC0_CLPD)
0000_000Ah
4003_B038
ADC加方通用校准值寄存器(ADC0_CLPS)
0000_0020h
4003_B03C
ADC加方通用校准值寄存器(ADC0_CLP4)
0000_0200h
4003_B040
ADC加方通用校准值寄存器(ADC0_CLP3)
0000_0100h
4003_B044
ADC加方通用校准值寄存器(ADC0_CLP2)
0000_0080h
4003_B048
ADC加方通用校准值寄存器(ADC0_CLP1)
0000_0040h
4003_B04C
ADC加方通用校准值寄存器(ADC0_CLP0)
4003_B050
ADCPGA寄存器(ADC0_PGA)
4003_B054
ADC减方通用校准值寄存器(ADC0_CLMD)
4003_B058
ADC减方通用校准值寄存器(ADC0_CLMS)
4003_B05C
ADC减方通用校准值寄存器(ADC0_CLM4)
4003_B060
ADC减方通用校准值寄存器(ADC0_CLM3)
4003_B064
ADC减方通用校准值寄存器(ADC0_CLM2)
4003_B068
ADC减方通用校准值寄存器(ADC0_CLM1)
4003_B06C
ADC减方通用校准值寄存器(ADC0_CLM0)
在ADC模块的编程过程中,主要需要配置ADC模块的时钟、转换为单端或者差分、转换精度、触发源以及转换通道等功能,因此需要用到ADC的控制寄存器、配置寄存器以及状态寄存器等。
本章详细介绍的寄存器有配置寄存器1、状态和控制寄存器1、状态和控制寄存器2和状态和控制寄存器3
1.ADC配罝寄存器1(ADCx_CFG1)
配置寄存器1选择ADC的运行模式、时钟源、时钟分频,并可以配置低功耗或长采样时间。
ADLPC——低功耗配置。
该寄存器控制功耗配置的逐次逼近转换器。
当采用优化功耗时,不需要更改的采样速率。
0:
正常功耗配罝。
1:
低功耗配置。
功耗的减小以最大时钟速率为代价。
ADIV——时钟分频选择。
该位选择时钟分频比,用以生成ADC模块的内部时钟ADCK。
00:
分频比为1,时钟速率为输人时钟。
01:
分频比为2,时钟速率为(输入时钟)/2。
10:
分频比为4,时钟速率为(输入时钟)/4。
11:
分频比为84,时钟速率为(输入时钟)/8。
ADLSMP——采样时间配置。
该位根据转换模式的选择来配罝不同的采样时间,通过调整它来适应采样周期,以允许高阻抗的精确采样或低阻抗输入的最低转换速率。
在连续转换使能且不需要高转换速率的时候,长的采样时间也可以用来降低整体的功耗。
当ADLSMP=1时,选择为长采样时间,此时配置ADLSTS[1:
0]可以选择长采样时间的程度。
短采样时间。
1:
长采样时间。
MODE——转换模式选择,用来选择ADC模块的精度模式。
DIFF=0时,为单端8位精度转换;
DIFF=1时,为差分9位精度转换并输出二进制补码。
DIFF=0时,为单端12位精度转换;
DIFF=1时,为差分13位精度转换并输出二进制补码。
DIFF=0时,为单端10位精度转换;
DIFF=1时,为差分11位粮度转换并输出二进制补码。
DIFF=0时,为单端16位精度转换;
DIFF=1时,为差分16位精度转换并输出二进制补码。
ADICLK——输入时钟选择。
该位通过选择时钟输人源来生成内部时钟ADCK。
注意,当选择的时钟源为ADACK时,不必在转换开始前激活它。
当选择为ALTCLK并且在转换前未激活(ADACKEN=0)时,异步时钟会在转换开始时被激活并在结束时关闭。
因此,在时钟源被重新激活的时候相应的时钟会有一个启动延时。
总线时钟。
总线时钟2分频。
备用时钟(ALTCLK)。
异步时钟(ADACK)。
2.ADC状态和控制寄存器1(ADCx_SC1n)
状态寄存器ADCx_SCln分为两个寄存器,分别是SC1A和SC1B。
SC1A寄存器可用于软件和硬件触发两者模式的操作。
为了允许ADC的连续转换可以被内部外设触发,ADC有不止一个状态和控制寄存器,每个转换对应一个寄存器。
只有在硬件触发的模式下,才可以配置SC1中的SC1B寄存器。
在任何一个时间点上,仅有一个SC1n寄存器为控制ADC转换的激活状态。
当SC1n正在控制转换过程时是可以更新SC1A的。
向SC1A寄存器写人的时候会中止一个当前正在运行的转换。
在软件触发模式下(ADTRG=0),写入SC1A寄存器会初始化一个新的转换(如果ADCH不等于全1状态)。
同样,写人任何SC1n寄存器会中止当前SC1n控制的转换。
由于SC1B不能用来软件触发操作,因此写入SC1B奇存器不会初始化一个新的转换。
COCO——转换完成标志。
该位为只读位,如果比较功能没有使能(ACFE=0)且硬件平均功能没有使能(AVGE=0),每次转换完成时该位会罝位。
当比较功能使能后(ACFE=l),COCO标志仅当转换完成后的比较结果为真值时才置位。
当硬件平均功能使能后(AVGE=1),COCO标志在选定的转换数目完成后置位(由AVGS位决定)。
SC1A的COCO标志也会在校准序列完成后罝位。
当对应的SC1n寄存器写入或者对应的Rn寄存器被读取后,COCO标志会被淸除。
转换没有完成。
转换完成。
AIEN——中断使能。
该位使能转换完成中断。
当COCO被置位,并且AIEN为高时,一个中断会被触发。
转换完成中断禁用。
转换完成中断使能。
DIFF——差分模式使能。
该位配置ADC运行于差分输入模式。
当使能该位后,该模式自动选择差分通道、改变转换算法和转换完成的周期数。
单端转换。
差分转换。
ADCH——输人通道选择。
ADCH的5位用来选择输入的通道号。
输人通道的解码还取决于DIFF位的值。
DAD0〜DAD3为对应差分输人的DADPx和DADMx成对引脚。
当通道选择位的所有位为1时(ADCH=11111),逐次逼近转换算法子系统会关闭。
该特性可以用来明确地禁用ADC转换并且隔离通道的所有输人源。
通过中止连续转换可以避免一个额外的单次转换被执行。
没有必要在连续转换禁用的时候设置该位为全1以起到降低ADC功耗的作用,因为该模块会在一个转换完成后自动进入低功耗模式。
00000:
DIFF=0,DADP0为输入;
DIFF=1,DAD0为输入。
00001:
DIFF=0,DADP1为输人;
DIFF=1,DAD1为输入。
00010:
DIFF=0,DADP2为输入;
DIFF=1,DAD2为输入。
00011:
DIFF=0,DADP3为输人;
DIFF=1,DAD3为输入。
00100:
DIFF=0,AD4为输入;
DIFF=1,保留状态。
00101:
DIFF=0,AD5为输入;
00110:
DIFF=0,AD6为输入;
00111:
DIFF=0,AD7为输人;
01000:
DIFF=0,AD8为输入;
01001:
DIFF=0,AD9为输人;
01010:
DIFF=0,AD10为输入;
01011:
DIFF=0,AD11为输人;
01100:
DIFF=0,AD12为输人;
01101:
DIFF=0,AD13为输入;
01110:
DIFF=0,AD14为输人;
01111:
DIFF=0,AD15为输人;
10000:
DIFF=0,AD16为输入;
10001:
DIFF=0,AD17为输入;
DIFF=1,保留状态。
10010:
DIFF=0,AD18为输人;
10011:
DIFF=0,AD19为输入;
10100:
DIFF=0,AD20为输入;
10101:
DIFF=0,AD21为输入;
10110:
DIFF=0,AD22为输入;
10111:
DIFF=0,AD23为输人;
11000:
保留状态。
11001:
11010:
DIFF=0,温度传感器(单端)为输入;
DIFF=1,温度传感器(差分)为
输入。
11011:
DIFF=0,带隙(单端)为输入;
DIFF=1,带隙(差分)为输人。
11100:
11101:
DIFF=0,VREFSH为输入;
DIFF=1,—VREFSH(差分)为输入。
电压参考的选择由SC2寄存器的REFSEL位决定。
11110:
11111:
模块禁用。
3.ADC状态和控制寄存器2(ADCx_SC2)
SC2寄存器包含转换活跃、硬件/软件触发选择、比较功能和电压参考选择等配置。
ADACT——转换活跃。
该位指明当前是否处于一个转换或硬件平均处理中。
初始化一个转换后,ADACT置位;
当转换完成或者中止后,该位被淸零。
0:
没有在转换。
1:
正在转换。
ADTRG——转换触发选择。
ADTRG选择触发类型来初始化一个转换,有软件触发和硬件触发两个类型可以选择。
当选择软件触发时,通过写SC1A寄存器可以初始化一个转换。
当选择硬件触发时,则随着一个ADHWTSn脉冲输人后的ADHWT使能而触发一个转换初始化。
软件触发选择。
1:
硬件触发选择。
ACFE——比较功能使能。
比较功能禁用。
比较功能使能。
ACFGT——比较功能大于使能。
ACFGT根据ACREN的值来配置比较功能,以检查转换结果与对应的比较值寄存器(CV1和CV2)。
为了使该位有效,则ACFE位必须置位。
如果配置小于阈值,则范围之内的和范闲之外的值将不被包含,该功能取决于CV1和CV2寄存器的值。
1:
如果配罝为大于或等于阈值,则范围之内的和范闲之外的值将被包含,该功能取决于CV1和CV2寄存器的值。
ACREN——比较功能范围使能。
ACREN配置比较功能来检查转换的结果是否在CV1和CV2寄存器的范围内或范围外。
为了使ACFGT位有效则ACFE位必须置位。
DMAEN——DMA使能。
DMA禁用。
DMA使能,任何ADC的转换完成后都会置位COCO标志以触发一个DMA请求。
REFSEL——电压参考选择,用于转换的电压参考源。
00:
默认电压参考源引脚对(外部引脚VREFH和VREFL)。
01:
备用参考对(VALTH和VALTL),可以是附件的外部引脚或者内部源,取决于MCU的配置。
10:
保留选项。
11:
4.ADC状态和控制寄存器3(ADCx_SC3)
SC3及寄存器控制ADC模块的校准、连续转换以及硬件平均功能。
CAL——校准。
置位CAL的时候开始一个校准序列。
处于校准过程中该位保持置位,校准序列完成后该位淸零。
必须检查CALF位来决定校准序列的结果,一旦校准开始,校准过程便不能通过写ADC寄存器来中断,否则校准结果就是不正确的,且CALF将被罝位。
S位CAL位将中断任何转换。
CALF——校准失败标志。
在校准序列完成前,如果ADTRG=1,则任何ADC寄存器被写入或者进人任何停止模式校准序列都将失败。
向该位写1将会清零该位。
校准正常完成。
校准失败。
ADC精确度规格将不保证。
ADCO——连续转换使能。
如果硬件平均功能使能(AVGE=1),那么在初始化转换后,一个转换或者一组转换将开启。
如果硬件平均功能使能(AVGE=1),那么在初始化转换后,连续转换或者多组转换将开启。
AVGE——硬件平均使能。
硬件平均功能禁用。
硬件平均功能使能。
AVGS——硬件平均选择,决定多少个ADC转换来平均出一个结果。
4个采样平均。
01:
8个采样平均。
16个采样平均。
32个采样平均。
3.编程要点
对于ADC模块的编程,我们只要了解ADC状态控制寄存器SCI(ADCStatusandControlRegisters1)、ADC配置寄存器CFG1和CFG2(ADCConfigurationRegister1、2)三个寄存器就能使用K60的ADC模块了。
读者若要了解其寄存器详细信息请参见芯片手册。
下面着重介绍ADC模块编程要点。
1)初始化
在开始ADC之前,需要初始化ADC模块,ADC模块初始化的顺序如下。
(1)配置SIM_SCGC6,使能ADC的时钟,使能A/D通道的引脚复用功能为ADC功能。
(2)配置ADC配置寄存器(CFG),选择用于产生内部时钟输入时钟源和分频因子,同时可以配置ADC的选择采样时间和低功耗功能。