1、MSP430单片机ADC12模块的总结 在MSP430单片机系列中,很多都有12通道12位的ADC(简称ADC12模块)。如MSP430F13X、MSP430F14X、MSP430F15X、MSP430F16X、MSP430F43X、MSP430F44X 等系列。较其它带A/D转换的单片机,MSP430的ADC精度高,设计灵活巧妙,给数据采集系统的设计带来了全新的思路。 一、ADC模块的常用性能指标 1、分辨率 表示输出数字量变化一个相邻数码所需输入模拟电压的变化量,它定义为转换器的满刻度电压与2n的比值,其中n为ADC的位数。如:一个12位的ADC模块的分辨率为满电压刻度的1/409
2、6 。 2、量化误差 是由于有限数字对模拟数值进行离散取值(量化)而引起的误差。其理论值为一个单位分辨率,即±1/2LSB 。 3、转换精度 其反映的是ADC模块在量化上与理想的ADC模块进行AD转换的差值。 4、转换时间 指ADC模块完成一次AD转换所需的时间,转换时间越短越能适应输入信号的变化。 此外还应考虑所使用的电压范围、工作温度、接口特性以及输出形式等性能。 二、ADC12主要特点 1、12位转换精度,1位非线性微分误差,1位非线性积分误差; 2、有多种时钟源提供给ADC12模块,而且模块本身内置时钟发生器; 3、内置温度传感器; 4、Timer_A/
3、Timer_B硬件触发器; 5、拥有8 个可配置的外部模拟信号采样通道,拥有4 个内部通道,用于Vcc 电压值、温度、外部正负电压参考的测量; 6、内置参考电源,并且参考电压有6种组合; 7、模数转换有4种模式; 8、16字转换缓存; 9、ADC12可关断内核支持超低功耗应用; 10、采样速度快,最高可达200ksps; 11、自动扫描; 12、DMA使能; 进行AD 转换通常需要设置的内容有:转换通道、采样保持、参考电压、转换时钟、转换模式、结果缓存。 三、ADC12的功能模块 Msp430单片机ADC12模块有以下五个部分组成: (1)参考电压发生器; (2)模拟
4、多路器; (3)具有采样和保持功能的12为转换内核; (4)采样及转换所需的时序控制; (5)转存结果缓存。图1 ADC12内部结构图 1、参考电压发生器 AD转换都需要一个基准信号,通常为电压基准。ADC12内置参考电源,而且参考电压有6种可编程选择,分别为VR+与VR-的组合。 其中VR+(有3种): AVCC (模拟电源正端) VREF+ (A/D转换器内部参考电源的正输出端) VeREF+ (外部参考电源的正输入端) VR-(有3种): AVSS (模拟电源负端) VREF- (A/D转换器内部参考电源的负
5、输出端) VeREF- (外部参考电源的负输入端) 2、模拟多路器 对多个模拟信号进行采样并转换时,由于A/D只有一个转换内核,每次只能选通一个信号进行采样并转换。ADC12配置有8路外部通道和4路内部通道: 8路外部通道: A0~A7 实现外部8路模拟信号的输入 4路内部通道: VeREF+ VREF- 或 VeREF- (AVCC-AVSS)/ 2 片内温度传感器的输出 4个作为待转换模拟输入信号 3、具有采样和保持功能的的12位转换器内核 ADC12是一个12位的模数转换器,并能够将数据保存在ADC12MEM转换存储器中。该内核两个可编程的
6、参考电压(VR+和VR-)定义转换的最大值和最小值。当输入模拟电压等于或高于VR+时,ADC12输出满量程值0FFFH,当输入电压等于或小于VR-时,ADC12输出0 。 输入模拟电压的最终结果满足公式: ADC12模块由ADC12CTL0和ADC12CTL1两个控制寄存器完成设置。ADC内核使能由ADC12ON位控制。大多数情况下,只有在ENC=0时,ADC12的控制才可以被修改,在进行转换时,ENC位必须设为1。 4、采样及转换所需的时序控制 采样和转换所需要的各种时钟信号: ADC12CLK转换时钟、 SAMPCON采样及转换信号、SHT控制的采样周期 、 SHS控制的采
7、样触发来源选择 、ADC12SSEL选择的内核时钟源 及 ADC12DIV选择的分频系数等。 注意:只有在这些时序控制电路的指挥下,ADC12各部件才能协调工作! 5、转存结果缓存 ADC12共有12个转换通道,设置了16个转换存储器,用于暂存转换结果,合理设置后,ADC12硬件会自动将转换结果存放到相应的ADC12MEMx存储寄存器中。每个转换器ADC12MEMx都有自己对应的控制寄存器ADC12CTLx。控制寄存器控制各个转换寄存器必须选择基本的转换条件。 四、ADC12相关寄存器 表1 ADC12相关寄存器总述 寄存器类型 寄存器缩写 寄存器的含义 转换控制
8、寄存器 ADC12CTL0 转换控制寄存器0 ADC12CTL1 转换控制寄存器1 中断控制 寄存器 ADC12IFG 中断标志寄存器 ADC12IE 中断使能寄存器 ADC12IV 中断向量寄存器 存储寄存器 ADC12MEM0~ ADC12MEM15 存储寄存器0~15 控制寄存器 ADC12MCTL0~ ADC12MCTL15 控制寄存器0~15 (1)转换控制寄存器 表2 ADC12CTL0--转换控制寄存器0 位 代号及含义 功能描述 备注 0 ADC12SC--采样/转换控制位 在ENC=1,IS
9、SH=0时设置SHP=1,在ADC12由0变为1时启动A/D转换 用软件启动一次AD转换,需要使用一条指令来完成ADC12SC与ENC的设置 1 ENC--转换允许位 0:ADC12为初始状态,不能启动A/D转换 1:首次转换由SAMPCON上升沿启动 只有在ENC为高电平时,才能用软件或外部信号启动转换 2 ADC12TVIE--转换时间溢出中断允许位 0:没发生转换时间溢出 1:发生转换时间溢出 当前转换还没完成时,又发生一次采样请求,则会发生转换时间溢出 3 ADC12TOVIE--溢出中断允许位 0:没发生溢出 1:发生溢出 4 ADC12ON--
10、ADC12内核控制位 0:关闭ADC12内核 1:打开ADC12内核 5 REFON--参考电压控制位 0:内部参考电压发生器关闭 1:内部参考电压发生器打开 6 2.5V--内部参考电压值选择位 0:选择1.5V内部参考电压 1:选择2.5V内部参考电压 7 MSC--多次采样/转换位 在SHP=1,MSC=0时,每次转换需要SHI信号的上升沿触发采集定时器 在CONSQ0,MSC=1时,仅首次转换同SHI信号的上升沿触发采样定时器,而后采样转换将在一次转换完成立即进行 CONSQ0表示当前模式不是单通道单次转换 8~11 SHT0--采样保持
11、定时器0 定义了每通道转换结果中的转换时序与采样时钟ADC12CLK的关系。采样周期则是ADC12CLK周期的4倍,则: 12~15 SHT1--采样保持定时器1 表3 ADC12CTL1--转换控制寄存器1 位 代号及含义 功能描述 备注 0 ADC12BUSY--ADC12忙标志位 0:表示没有活动的操作 1:表示ADC12正处于采样期间、转换期间或序列转换期间 只用于单通道单次转换模式,在其它转换模式下,该位无效 1~2 CONSEQ--转换模式选择位 00:单通道单次转换模式 01:序列通道单次转换模式
12、10:单通道多次转换模式 11:序列通道多次转换模式 3~4 ADC12SSEL--ADC12内核时钟源选择位 00:ADC12OSC ADC12内部时钟源 01:ACLK 辅助时钟 10:MCLK 系统主时钟 11:SMCLK 系统子时钟 5~7 ADC12DIV 分频因子选择位 分频因子为3位二进制数加1 8 ISSH——采样输入信号方向控制位 0:采样输入信号为同向输入 1:采样输入信号为反向输入 9 SHP——采样信号(SAMPCON)选择控制位, 0:SAMPCON源自采样触发输入信号 1:SAMPCON源自采样定时器,由
13、采样输入信号的上升沿触发采样定时器 10~11 SHS——采样触发输入源选择位 00:ADC12SC 01:Timer_A.OUT1 10:Timer_B.OUT0 11:Timer_B.OUT1 12~15 CSSTARTADD——转换存储器地址位 该4位所表示的二进制数0~15分别对应ADC12MEM0~15 可以定义单次转换地址或序列转换的首地址 (2)转换存储控制寄存器 表4 ADC12MCTLX--转换存储控制寄存器 位 0~3 4~6 7 代号及含义 INCH——模拟输入通道选择位 SREF——参考电压源选择位 EOS——序列结束
14、控制位 功能 描述 0000~0111:A0~A7 1000:VeREF+ 1001:VREF-/VeREF- 1010:片内温度传感器的输出 1011~1111:(AVCC-AVSS)/2 000:Vr+=AVcc,Vr-=Avss 001:Vr+=VREF+,Vr-=Avss 010:Vr+=VEREF+,Vr-=Avss 011:Vr+=AVcc,Vr-=VREF-/VEREF- 100:Vr+=VREF+,Vr-=VREF-/VEREF- 101:Vr+=VEREF+,Vr-=VREF-/VEREF- 0:序列没有结束 1:该序列中最后一次转换 备注
15、 (3)ADC12MEM0~ADC12MEM15 转换存储寄存器 该组寄存器均为16位寄存器,用来存放A/D转换结果。中用其中低12位,高4位在读出时为0。 (4)中断控制寄存器 表5 相关中断寄存器 寄存器名称 缩写 功能描述 备注 中断标志寄存器 ADC12IFG ADC12IFG.X=1 转换结束,并且转换结果已经装入转换寄存器 ADC12IFG.X=0 ADC12MEMX被访问 中断使能寄存器 ADC12IE ADC12IE.X=1允许相应的中断标志ADC12IFG.X在置位时发生的中断请求服务 ADC12IE.X=0禁止相应的中断标志
16、ADC12IFG.X在置位时发生的中断请求服务 中断向量寄存器 ADC12IV ADC12是一个多源中断:有18个中断标志(ADC12IFG.0-ADC12IFG15、ADC12TOV、ADC12OV)但是只有一个中断向量 五、ADC12转换模式 ADC12提供4种转换模式: 1、单通道单次转换 2、序列通道单次转换 3、单通道多次转换 4、序列通道多次转换 注意:无论用户使用何种模式,都要处理以下问题 设置具体模式;输入模拟信号;选择启动信号;关注转换结束信号。 1)单通道单次转换模式要进行如下设置: X=CSStartAdd,指向转换开始地址
17、 ADC12MEMx存放转换结果; ADC12IFG.x为对应的中断标志; ADC12MCTLx寄存器中定义了通道和参考电压。 转换完成时必须使ENC再次复位并置位(上升沿),以准备下一次转换。在ENC复位并再次置位之前的输入信号将被忽略。 2)序列通道单次转换模式要进行如下设置: X=CSStartAdd, 指示转换开始通道; EOS(ADC12MCTLx.7)=1标志序列中最后通道y,非最后通道的EOS位都是0,表示序列没有结束; ADC12MEMx,…, ADC12MEMy存放转换结果; ADC12IFG.x,…, ADC12IFG.y为对应的中断标志; ADC12
18、MCTLx寄存器中定义了通道和参考电压。 转换完成时必须使ENC再次复位并置位(上升沿),以准备下一次转换。在ENC复位并再次置位之前的输入信号将被忽略。 3)单通道多次转换模式要进行如下设置: X=CSStartAdd, 指示转换开始通道; ADC12MEMx 存放转换结果; ADC12MCTLx寄存器中定义了通道和参考电压。 该模式的停止有如下几种方法: 使CONSEQ=0,改变为单通道单次模式; 使ENC=0,直接使当前转换完成后停止; 使用单通道单次模式替换当前模式,同时使ENC=0 。 4)序列通道多次转换模式要进行如下设置: X=CSStartAdd, 指示转
19、换开始通道; EOS(ADC12MCTLx.7)=1标志序列中最后通道y ; ADC12MCTLx寄存器中定义了通道和参考电压; 改变转换模式不必停止当前转换,一旦改变模式,将在当前序列完成后立即生效。 六、程序代码 例【1】 选择外部参考源 #include "msp430x44x.h" void main(void) { WDTCTL = WDTPW+WDTHOLD; P6SEL |= 0x01; // 使能A/D 通道A0 ADC12CTL0 = ADC12ON+SHT0_2; // 打开 ADC12, 设置采样时钟 ADC12CTL1 =
20、SHP; // 使用采样时钟 ADC12MCTL0 = SREF_2; // Vr+ = VeREF+ (外部) ADC12CTL0 |= ENC; // 使能转换 while (1) { ADC12CTL0 |= ADC12SC; // 开始转换 while ((ADC12IFG & ADC12BUSY)==0); _NOP(); } } 例【2】 选择内部参考源 #include "msp430x44x.h" void main(void) { ADC12CT
21、L0 = ADC12ON+SHT0_2+REFON+REF2_5V; // 打开 ADC12, 设置采样时钟 ADC12CTL1 = SHP; // 使用采样时钟 ADC12MCTL0 = SREF_1; // Vr+=Vref+ for ( i=0; i<0x3600; i++) // 为参考源启动提供延迟 { } ADC12CTL0 |= ENC; // 使能转换 while (1) { ADC12CTL0 |= ADC12SC; // 开始转换 while ((ADC12IFG
22、 BIT0)==0); //等转换结束 _NOP(); } } 七、总结 1、MSP430可以使用内部、外部的参考电压,内部1.5或2.5,外部0~3.3,可以通过寄存器设置,采样电压的输入范围最大为0~3.3即AVss~AVcc。使用外部AVss~AVcc作为参考电压不够稳定,但是精度高,使用内部电压较稳定。 如:ADC12CTL0 |= REFON + REF2_5V; //打开内部电压发生器,参考电压选择为2.5V。 2、A0~A7口为外部8路模拟信号的输入通道,4路内部通道: VeREF+、VREF- 或 VeREF-、(AVCC-AVSS)/
23、2、片内温度传感器的输出,4个作为待转换模拟输入信号。可以通过设置ADC12MCTLx转换存储控制寄存器的模拟输入通道选择位INCH。 0~7:A0~A7 8:VeREF+ 9:VREF-/VeREF- 10:片内温度传感器的输出 11~15:(AVCC-AVSS)/2 3、430单片机ADC12转换模块中有四个时钟信号源: 1:内部时钟ADC12OSC 2:ACLK辅助时钟 3:MCLK系统主时钟 4:SMCLK 系统子时钟 可以通过ADC12SSELX来选择用那一种。 4、ADC12共有12个转换通道,设置了16个转换存储器,用于暂存转换结果,合理设置后,ADC12硬件会自动将转换结果存放到相应的ADC12MEMx存储寄存器中。至于读取的话,可以直接从存储寄存器中读出数据。






