MSP430F2系列16位超低功耗单片机模块原理
第16章模数转换模块ADC10
版本: 1.3
日期: 2007.3.
原文: TI MSP430x2xxfamily.pdf
翻译: 陈军长春工业大学
编辑: DC 微控技术论坛总版主
注:以下文章是翻译TI MSP430x2xxfamily.pdf 文件中的部分内容。由于我们翻译水平有限,有整理过程中难免有所不足或错误;所以以下内容只供参考.一切以原文为准。
详情请密切留意微控技术论坛。
ADC10模块是高性能的10位模数转换器。本章描述了ADC10。在MSP430X20X2系列中配置了ADC10。
11.1 ADC10简介
图11-1:ADC10模块图
ADC10模块支持快速10位模数转换。ADC10模块具有一个10位逐次逼近(SAR)内核,采样选择控制,参考电压产生器和数据传递控制器(DTC)。
DTC允许ADC10采样被转换和存储在任何其它寄存器单元而不需要CPU的干预。模块可以经过用户设置后支持不同的应用.
ADC10模块特征如下:
最大转换速率200ksps;
固定的10位转换;
具有采样保持功能,并可选采样周期;
通过软件或Timer_A初始化转换;
软件选择片内参考电压(1.5V或2.5V);
软件选择内部或外部参考电压;
8个外部输入通道;
内部转换通道:温度检测,VCC,外部参考(+,—);
可选转换时钟源;
单通道单次,单通道多次,序列通道单次和序列通道多次转换模式;
ADC内核和参考电压都可以单独关闭;
自动存储转换结果的数据转换控制器;
ADC10模块的结构框图如上图11-1:
11.2 ADC10的使用
ADC10模块由用户通过软件设定。在下面的章节中讨论了ADC10的设置和使用;
11.2.1 10位ADC内核
ADC内核将一个模拟量的输入转化成10位数字形式,结果保存在ADC10MEM寄存器中。内核利用两个可编程/可选择的参考电平(VR+和VR-)来定义转换范围的最大值和最小值。当输入信号等于或大于VR+时,数字量输出为满范围(03FF);当输入信号等于或小于VR-时,数字量输出为0。转换控制寄存器定义了输入通道和参考电平(VR+和VR-)。转换的结果为直接的二进制形式或二的补码形式。在使用直接二进制形式时,转换公式为:
ADC10模块由ADC10CTL0 和ADC10CTL1两个控制寄存器完成设置。ADC内核使能由ADC10ON位控制。大多数情况下,只有在ENC=0时,ADC10的控制位可以被修改。
在进行转换前ENC位必须设为1。
转换时钟选择:
ADC10CLK可以作为转换时钟和产生采样周期。ADC10时钟源可以用ADC10SSELX
位来选择,也可以由ADC10DIVX位进行1-8分频。可选的时钟源有SMCLK,MCLK,ACLK 和一个内部的振荡器ADC10OSC。
ADC10OSC由内部产生,在5M范围内。但会随着芯片本身,供电电压和温度而不同。
请参考详细介绍ADC10OSC说明的数据手册。
用户必须保证在转换结束前所选择的ADC10CLK都保持在活动状态。如果在转换期间,时钟丢失(或关闭),转换将无法完成,结果无效。
11.2.2 ADC 10输入和多路器
通过模拟输入多路器可以选择8个外部和4个内部模拟信号作为转换信号。输入模拟多路器是一个先关后开型开关,可减少因通道切换而引入的噪声。见下图11-2。它也是一个T型开关,可以减少通道间的耦合。未选择的通道应该与A/D和连接到模拟地(VSS)的中间接点隔离。这样寄生电容与地相接,可以减少噪声。
ADC10利用电荷再分配(charge redistribution)原理。当输入在内部切换时,切换动作可能在输入信号上产生漏电流。在造成问题前,漏电流已经过衰减并稳定下来。
图11-2 模拟多路器
模拟端口选择
ADC10外部输入A0-A4和VeREF+ ,VREF-与P2口(数字CMOS门电路)复用。在有些芯片里可选输入A5-A7与P3口复用(见具体芯片手册)。当模拟信号施加在数字CMOS门电路上时,寄生电流会从VCC流向GND。如果输入电压接近门电路的转换(transition)电平时,就产生寄生电流。禁止端口引脚缓冲,可以消除寄生电流,从而减少总电流消耗。ADC10AEx位可以禁止端口的输入和输出缓冲。
; P2.3 设置为模拟量输入
BIS.B #08h,&ADC10AE ; P2.3 ADC10 function and enable
11.2.3 参考电压产生器
ADC10模块包含一个内置的电压参考,有两个可选的电平。设置REFON使能内部
参考。当REF2_5V = 1时, 内部参考电压为2.5 V;当REF2_5V = 0时,内部参考电压
为1.5 V。内部参考电压可供内部使用,并且REFOUT = 0时,引脚VREF+上的电压可
供外部使用。
外部参考电压可以分别通过引脚A4和A3提供VR+ 和VR-。当使用外部电压参考时,或者当VCC被用作参考电平时,内部参考电平关闭,以减少功耗。
与ADC12一样,ADC10的参考电源可以用外部存储电容。
内部参考电压低功耗特点
ADC10的内部参考电压产生器是为低功耗应用而设计的。参考电压产生器包括一个
band-gap voltage和一个独立的缓冲器。每个系列芯片的电流消耗在具体芯片手册中分别有
详细说明。当REFON = 1,两者都使能;REFON = 0使,两者都禁止。当REFON 变为1时
的总设定时间小于30 μs。
当REFON = 1,所有转换禁止,缓冲器自动禁止,在需要进行转换时,重新使能。当REFBURST = 0时,缓冲器持续打开,允许参考电压持续输出到芯片外部。当REFBURST = 1,ADC10模块没有进行转换时缓冲器自动关闭。当需要时,自动重新打开。内部参考缓冲器也可以对转换速度和功耗设置进行选择。当最大转换速率低于50 ksps时,设置ADC10SR = 1可以减少缓冲器大约50%的电流消耗。
11.2.4 自动关断
ADC10模块为低功耗应用而设计。当ADC10没有进行转换时,内核自动关闭,需要时
自动重新使能。ADC10OSC在需要时也会自动打开,不需要时自动关闭。当内核或振荡器关闭时,它们无电流消耗。
11.2.5 采样和转换时间选择
在采样输入信号SHI的上升沿,模数转换开始。SHI信号源可以通过SHSx位来选择,
包括如下:
ADC10SC 位
Timer_A Output Unit 1
Timer_A Output Unit 0
Timer_A Output Unit 2
SHI信号源的极性可以通过ISSH位来转换。SHTx位可以选择采样周期tsample为4,8,16或64个ADC10CLK周期。在选择的采样周期与ADC10CLK同步后,采样定时器设置SAMPCON为高。采样总时间为tsample加上tsync。SAMPCON由高到低变化时开始模数转换。模数转换需要13个模数转换。如下图11-3。
采样时间注意事项
当SAMPCON = 0时,所有的Ax输入为高阻态。当SAMPCON =1时,在采样时间tsample 期间,被选择的Ax输入相当于一个RC低通滤波器,如下图11-4。内部多路选择导通输入电阻R1(最大2 kΩ)与电容C1(最大20PF)串联。为达到10位的转换精度,电容C1的电压必须得充到源电压VS的1/2LSB范围内。
图11-4 模拟输入等效电路
VI = Ax引脚输入电压
VS= 外部驱动源电压
RS= 外部源内阻
RI = 内部多路选择导通输入电阻
CI = 输入电容
VC= 电容充电电压
RS和R1影响tsample。下列等式可用于计算10位转换精度下的最小采样时间tsample。ADC10SR = 0:
ADC10SR = 1:
用上面给出的R1 C1的值代入,等式变为:
例如,如果RS为10kΩ,在ADC10SR = 0时,tsample必须大于2.63 μs;在ADC10SR = 0时,tsample必须大于4.33 μs。
11.2.6 转换模式
ADC10有四种模式,由CONSEQx选择,见表11-1。
CONSEQx 模式工作
00 单路转换单通路单次转换
01 序列转换多通路单次转换
10 重复单路转换单通路重复转换
11 重复序列转换多通路重复转换
单通道单次模式
该模式对由INCHx选择的单通道进行一次采样和转换。ADC结果写入到ADC10MEM。图11-5表示了单通道单次转换模式的流程。当ADC10SC触发一次转换时,连续的转换也可通过设置ADC10SC位来触发。当使用任何其它触发源来启动转换时,ENC必须在每次转换间隔离,在ENC复位并再次置位前的输入采样信号将被忽略(be toggled,固定)。
序列通道转换模式
该模式对一个序列的通道进行一次采样和转换。序列通道为从INCHx选择的通道到A0。每个ADC结果都存放到ADC10MEM。通道A0转换完成后序列转换结束。图11-6表示了序列通道转换模式。当ADC10SC启动一次序列转换时,连续的序列转换也可通过设置ADC10SC 位来启动。当任何其它触发源用来启动转换时,ENC必须在每次序列转换间隔离,在ENC复位并再次置位前的输入采样信号将被忽略(be toggled,固定)
该模式对由INCHx选定的单通道进行连续采样和转换。每次ADC转换结果都存放到ADC10MEM。图11-7表示了单通道多次转换模式。
该模式对序列通道进行重复采样和转换。序列通道为从INCHx选择的通道到A0。每次ADC 转换结果都存放到ADC10MEM。通道A0转换完成后序列转换结束,下一个启动信号重新启动序列转换。图11-8表示了序列通道多次转换模式。
使用MSC位
为使转换器能自动并尽可能快地进行连续转换,ADC需具备多次采样和转换功能。当MSC=1和CONSEQx > 0时,SHI的第一个上升沿启动第一次转换。前一次转换一旦转换完成,连续的转换将自动启动。SHI上其它的上升沿将被忽略直到序列通道单次转换模式中的序列转换完成或直到单通道多次转换模式或序列通道多次转换模式中ENC位被隔离(toggled,固定)。在使用MSC位过程中ENC位的功能不改变。
停止转换
停止ADC10工作取决于转换模式。停止正在工作的一个转换或转换序列,建议方法如下:
在单通道单次转换模式下复位ENC可以立即停止转换,结果不定。为得到准确结果,在清除ENC前查询ADC10BUSY位直到复位。
在单通道多次转换模式期间复位ENC,可以在当前转换结束时停止转换器。
在序列通道单次转换模式或序列通道多次转换模式期间复位ENC,可以在当前转换结束时
停止转换器。
通过设置CONSEQx=0和复位ENC,可以停止任何转换模式下的转换。此时转换结果无效。
11.2.7 ADC10数据传递控制器
ADC10包括一个数据传递控制器(DTC),可以自动地将转换结果从ADC10EM传递到其它片内存储器单元。设置ADC10DTC1寄存器为一个非0值就可使能DTC。在MSP430x20x2系列芯片中没有DTC。
当DTC使能时,每次ADC10完成转换和将转换结果装载到ADC10MEM后,数据传递启动。无需软件干预来管理ADC10,直到预先定义的转换数据量被传递。每次DTC传递需要一个MCLK周期。为避免DTC传递过程中其它总线竞争,CPU暂停。如果CPU活动,需要一个MCLK周期时间来传递。
当ADC10忙的时候,DTC不能启动。当设置DTC时,程序必须保证当前没有正在进行的转换或序列转换。
; ADC10 活动测试
BIC.W #ENC,&ADC10CTL0 ;
busy_test BIT.W #BUSY, & ADC10CTL1 ;
JNZ busy_test ;
MOV.W #xxx, & ADC10SA ; 可靠
MOV.B #xx, & ADC10DTC1 ;
; 继续设置
一块数据传递模式
如果ADC10TB复位,选择一块数据传递模式。ADC10DTC1中的n值定义了一个
数据块传递的总长度。可以利用16位寄存器ADC10SA在MSP430任何地址范围内定义数据块的起始地址。数据块结束地址为ADC10SA+2n-2。一块数据传递模式见下图11-9。
内部地址指针最初为ADC10SA,内部传递计数器等于n。内部指针和计数器在程序中是已知的。DTC传递ADC10MEM中的数据到由ADC10SA这个指针所指的字地址中。每次传递后,内部地址指针增加2,内部传递计数器减1。
随着ADC10MEM的每次装载,数据继续传递,直到内部传递计数器变为0。其它的DTC数据传递不再进行,直到对ADC10SA再写。在一块数据传递模式下使用DTC时,一个完整的数据块传递完成后,ADC10FLAG标志位置1。图11-10表示了一块数据传递模式的状态图表。
图11-10 一块数据传递模式下的状态图表
两块数据传递模式
如果ADC10TB置1,选择两块数据传递模式。ADC10DTC1中的n值定义了一个数据块传递的长度。可以利用16位寄存器ADC10SA在MSP430任何地址范围内定义第一个数据块的地址范围。第一个数据块结束地址为ADC10SA+2n-2。第二个数据块的地址范围定义为SA+2n 到SA+4n–2.图11-11为两块数据传递模式。
内部地址指针初始等于ADC10SA,内部传递计数器等于n。内部指针和计数器在程序中是已知的。DTC传递ADC10MEM中的数据到由ADC10SA地址指针所指的字地址中。每次传递后,内部地址指针增加2,内部传递计数器减1。
随着ADC10MEM的每次装载,数据继续传递,直到内部传递计数器变为0。在这时数据块一已装满,ADC10IFG标志和ADC10B1位都置1。用户可以通过测试ADC10B1位来判断数据块一是否已装满。
DTC继续传递数据块2。内部传递计数器自动重装‘n’。在下次装载ADC10MEM时,DTC 开始传递转换结果到数据块2。当完成n次传递后,数据块2装满。ADC10IFG标志置1,ADC10B1位清0。用户可以通过测试ADC10B1位是否清0来判断数据块2是否装满。图11-12表示了两块数据传递模式的状态表。
图11-12 两块数据传递模式下的DTC状态表
连续传递
当ADC10CT位被设置为1时,选择连续传递。当数据块一(一块数据传递模式)或数据块二(两块数据传递模式)完成传递后,DTC不停止。内部地址指针和数据传递计数器分别等于ADC10SA和n。数据块一开始后,进行连续传递。如果ADC10CT位被复位,在数据块一(一块数据传递模式下)或数据块二(两块数据传递模式下)完成传递后,DTC 传递停止.
DTC传递周期时间
对于每个ADC10MEM传递,DTC需要一或二个MCLK 周期来实现同步,一个周期
用于实际的传递(CPU停止时)和一个周期的等待时间。因为DTC使用MCLK,DTC
的周期时间取决于MSP430的工作模式和设置的系统时钟。
如果MCLK处在活动状态,但CPU停止时,未重新使能CPU时,DTC使用MCLK时钟源进行每次的传递。如果MCLK时钟源关闭,只在一次传递过程中,DTC重新打开来自DCOCLK 的MCLK。CPU仍然关闭,在DTC传递后,MCLK又关闭。在所有工作模式下的最大DTC周期时间见表11-2。
另外的6微秒用于启动DCOCLK,再数据手册中即为t(LPMx)参数.
11.2.8 使用内部温度传感器
要想使用片内温度传感器,用户需要选择模拟输入通道INCHx = 1010.就象选择外部通道一样,设置其它寄存器,包括参考电平选择,转换寄存器选择等等。
典型的温度传感器传递功能如图11-13。使用温度传感器时,采样周期必须大于30μs.温度传感器偏置误差可能较大,在大多数应用中需要进行校准。参考具体芯片手册的参数。
选择温度传感器后,将自动打开片上参考电平产生器作为温度传感器的电压源。用于温度传感器的参考电平的选择与其它通道一样。
11.2.9 ADC10接地和噪声考虑
作为高精度的ADC,必须注意合理的PCB布局和接地技术,以消除地电流环路,寄生参数影响和噪声。
当电流流经模拟或数字电路的公共回路时,形成地电流环路。如果不认真考虑,这个电流会产生一个小的电压叠加在A/D转换器的参考电压或输入信号上。图11-15的连接方法可以避免这点。
除了接地,因为数字开关及开关电源在电源线路上产生的纹波和噪声脉冲,也会影响转换的结果。无噪声的设计对达到高精度的转换非常重要。
图11-16 ADC10接地和噪声考虑
11.2.10 ADC10中断
与ADC10相关的中断和中断向量见图11-17。不使用DTC时(ADC10DTC1 = 0),当
转换结果装载到ADC1OMEM时,ADC10IFLAG置1。使用DTC时(ADC10DTC1 > 0),当一个数据块传递完成和内部传递计数器‘n’= 0时,ADC10IFLAG置1。如果ADC10IE和GIE都置1,然后ADC10IFLAG产生一个中断申请。当中断申请被响应后,ADC10IFLAG
标志自动复位,也可以通过软件复位。
图11-17 ADC中断系统
11.3 ADC10寄存器
表11-3 ADC10寄存器
寄存器简写寄存器类型地址初始状态
ADC10 输入使能寄存器ADC10AE 读/写04AH Reset with POR ADC10 控制寄存器 0 ADC10CTL0 读/写01B0H Reset with POR ADC10 控制寄存器 1 ADC10CTL1 读/写01B2H Reset with POR
ADC10 存储器ADC10MEM 读01B4H Unchanged ADC10 数据传输控制寄存器 0 ADC10DTC0 读/写048H Reset with POR ADC10 数据传输控制寄存器 1 ADC10DTC1 读/写049H Reset with POR ADC10 数据传输启动地址ADC10SA 读/写01BCH 0200H with POR
ADC10CTL0 ADC10 控制寄存器 0
SREFx Bits 15-13 参考电平选择
000 VR+ = VCC and VR- = VSS
001 VR+ = VREF+ and VR- = VSS
010 VR+ = VeREF+ and VR- = VSS
011 VR+ = VeREF+ and VR- = VSS
100 VR+ = VCC and VR- = VREF-/ VeREF-
101 VR+ = VREF+ and VR- = VREF-/ VeREF-
110 VR+ = VeREF+ and VR- = VREF-/ VeREF-
111 VR+ = VeREF+ and VR- = VREF-/ VeREF-
ADC10SHTx Bits 12-11 ADC10采样保持时间
00 4 x ADC10CLKs
01 8 x ADC10CLKs
10 16 x ADC10CLKs
11 64 x ADC10CLKs
ADC10SR Bit 10 ADC10 采样速率. 该位用于选择最大采样速率下的参考电平缓冲
驱动能力。ADC10SR置1,可以减少参考电平缓冲器的电流消耗。
0 参考电平缓冲器支持最大速率到200 ksps
1 参考电平缓冲器支持最大速率到50 ksps
REFOUT Bit 9 参考电平输出
0 参考输出关闭
1 参考输出允许
REFBURST Bit 8. 参考电压输出控制位. REFOUT 位必须为1..
0 参考电压持续对外输出
1 只有在采样转换期间参考电压持续对外输出
MSC Bit 7 多次采样/转换控制位。只有在序列或多次转换模式下有效。
0 每次采样与转换时,由SHI的上升沿触发。
1 由SHI的第一个上升沿触发采样定时器,后面的采样与转换由前一次转换
完成后立即执行。
REF2_5V Bit 6 参考电压产生器的电压值选择位。REFON 位必须置1。
0 1.5 V
1 2.5 V
REFON Bit 5 参考电压发生器控制位。
0 关闭内部参考电压发生器
1 打开内部参考电压发生器
ADC10ON Bit 4 ADC10 控制位
0 关闭ADC10模块
1 打开ADC10模块
ADC10IE Bit 3 ADC10 中断允许控制位
0 中断禁止
1 中断允许
ADC10IFG Bit 2 ADC10 中断标志位. 如果ADC10MEM 已经装满转换结果,
该位置1。当中断申请被接受后,它自动复位,也可由软件复位。在使用DTC时,当完成一个数据块的传递时,该位置1。
0 无中断产生
1 有中断产生
ENC Bit 1 转换使能位
0 ADC10 禁止
1 ADC10 使能
ADC10SC Bit 0 软件可控的采样/转换控制位。ADC10SC和ENC位必须用一条指令同时置1。ADC10SC位可自动复位
0 无采样/转换开始
1 开始采样/转换
ADC10CTL1 ADC10 控制寄存器1
INCHx Bits 15-12 输入通道选择位。这些位用来选择进行单次转换的通道或进行序列转换的最高通道。
0000 A0
0001 A1
0010 A2
0011 A3
0100 A4
0101 A5
0110 A6
0111 A7
1000 VeREF+
1001 VREF-/VeREF-
1010 温度传感器
1011 (VCC – VSS) / 2
1100 (VCC – VSS) / 2
1101 (VCC – VSS) / 2
1110 (VCC – VSS) / 2
1111 (VCC – VSS) / 2
SHSx Bits 11-10 采样/保持输入信号源选择控制位
00 ADC10SC 位
01 Timer_A.OUT1
10 Timer_A.OUT0
11 Timer_A.OUT2
ADC10DF Bit 9 ADC10 数据格式选择位
0 二进制格式
1 二的补码格式
ISSH Bit 8 采样/保持输入信号反向控制位
0 采样输入信号不反向
1 采样输入信号反向
ADC10DIVx Bits 7-5 ADC10 时钟分频选择位
000 /1
001 /2
010 /3
011 /4
100 /5
101 /6
110 /7
111 /8
ADC10 SSELx Bits 4-3 ADC10时钟源选择
00 ADC10OSC
01 ACLK
10 MCLK
11 SMCLK
CONSEQx Bits 2-1 转换模式选择位
00 单通道单次转换
01 序列通道单次转换
10 单通道多次转换
11 序列通道多次转换
ADC10 BUSY Bit 0 ADC10忙标志位。该位指示一次正在进行的采样或转换操作。
0 表明没有正在进行的转换
1 表明一个序列,采样或转换正在进行
ADC10AE, 模拟信号输入使能控制寄存器
ADC10AEx Bits 7-0 ADC10 模拟输入使能控制位
0 模拟信号输入禁止
1 模拟信号输入使能
ADC10MEM, 转换结果寄存器,二进制格式
Conversion Results Bits15-0
10位转换结果为右对齐方式,二进制格式。位9为最高位,位15-10为0.
ADC10MEM, 转换结果寄存器,二的补码格式
Conversion Results Bits15-0
10位转换结果为左对齐方式,二的补码格式。位15为最高位,位5-0为0.