本帖最后由 Shuyang 于 2019-3-1 17:08 编辑
6.2 MSP430 ADC 10 模块及配置
首先我们来了解一下ADC 10模块的主要特性:
1) 8通道,采样率200ksps,精度10位。 2) 带内部基准1.5V或2.5V,也可外接基准电压。 3) 内置通道可直接对内部温度传感器、芯片供电电压、和外部基准电压采样。 4) AD采样起始信号可软件触发,也可由Timer_A控制。 5) 单通道单次采样、单通道重复采样、多通道轮流采样、多通道重复采样4种转换模式。 6) 可单独关闭ADC和基准电压源以便降低功耗。 7) 采样数据可自动存储在指定的存储空间中(这个功能比较独特)。
下面我们来具体介绍ADC 10模块的参数配置及使用。
6.2.1 10位ADC内核
ADC 10模块的核心部分就是一个10位的模数转换器(ADC),它负责将模拟输入转换成数字量,并将结果储存到ADC10MEM这个寄存器中。模拟量的上限和下限分别由两个可调节的电压VR+和VR-决定,分别对应转换结果数字量1023和0。当输入值等于VR+时,输出的数字量NADC达到最大值1023(16进制值03FFh);当输入值等于VR-时,输出数字量为0。转换结果和输入的关系为:
ADC 10模块通过ADC10CTL0和ADC10CTL1这两个寄存器来配置。当ADC10ON寄存器位置1时,ADC被使能。需要注意的是有一些寄存器位(下图中灰色部分)必须在ENC=0时才能够进行配置,具体定义如下。
6.2.2 时钟选择
ADC10CLK负责为ADC 10提供时钟。通过ADC10SSELx可以选择ADC10CLK的时钟源。共有4种选择,分别为ADC10OCS、ACLK、MCLK和SMCLK。
默认情况下时钟源是ADC10OCS,这是一个内置的5MHz振荡器。选择一个时钟源之后,必须保证在ADC完成转换之前该时钟源保持在活动状态下。如果在转换完成前关闭时钟源,将得到错误的转换结果。
6.2.3 输入配置
ADC 10模块的输入可以来自于A0-A7模拟输入引脚,并且还可以采集内部温度传感器、芯片供电电压、以及外部基准电压采样。通过INCHx寄存器位可以选择输入通道。
当使用A0-A7作为输入时,不要忘记将相应的GPIO配置为ADC输入功能。MSP430G2553共有8个引脚(P1.0-P1.7)可以作为模拟输入端。
从MSP430G2553 datasheet中Port Schematics部分可以看到,只要将ADC10AE.x和INCH.x同时置为1,对应的GPIO就会自动配置为ADC输入功能。而P1DIR、P1SEL和P1SEL2寄存器的值无需关心,但CAPD寄存器(比较模块)必须设为0。
6.2.4 参考电压选择
ADC 10模块内部可以生成一个参考电压,且此参考电压VREF+可以在1.5V和2.5V两档中选择。将REFON设为1即可使能内部参考电压,然后配置REF2_5V可以选择参考电压的数值。REF2_5V=1时参考电压为2.5V,REF2_5V=0时(默认状态)参考电压为1.5V。
如果内部参考电压无法满足要求,也可以使用外部参考电压VeREF。A4和A3两个引脚可以分别作为外部参考电压VR+和VR-的输入端。
在本章中我们曾介绍过ADC输出与输入的关系:
其中VR+和VR-分别是模拟输入的上限和下限。此上/下限可以通过寄存器位SREFx来配置,一般来说我们会令VR+等于内部参考电压或者芯片供电电压Vcc,VR-等于0(即Vss)。例如我们选择VR+=1.5V内部参考电压,那么输入输出关系就变为:
VR+和VR-也可以设为其他模式,具体参考SREFx寄存器位的定义:
在使用内部参考电压时,还需要注意一点,就是参考电压改变之后需要一定的时间来到达稳定状态。根据MSP430G2553 datasheet中的说明,内部参考电压改变后大约需要30us来建立稳定状态。因此程序中改写参考电压之后不要忘记用延时来等待参考电压达到稳态。
6.2.5 ADC 10中断
当AD转换过程完成,数据被载入ADC10MEM寄存器之后,ADC 10模块会产生中断信号,ADC10IFG标志位被置为1。如果ADC10IE使能位和全局中断使能位GIE都被开启,那么ADC10IFG置1时就会进入ADC中断**函数。ADC中断向量名称为ADC10_VECTOR。当中断**函数退出时,ADC10IFG会被自动清零。
6.2.6 单次转换与连续转换
ADC 10共有4种转换方式,可以通过寄存器位CONSEQx来选择。
4种转换方式分别如下:
- 单次转换:转换一次,完成后即停止。
- 顺序转换:按顺序转换从Ax(x的值由INCHx寄存器选择)到A0通道依次转换。
- 重复单次转换:重复对某个通道进行转换。
- 重复顺序转换:重复进行顺序转换。
|