MSP430单片机拥有内置的ADC功能,在一些高级单片机系列上是ADC12,在低级单片机系列上是ADC10,两者的主要区别是分辨率的不同,我们的G2553内置的就是ADC10,所以Cloud就在这里和大家一起学习ADC10。一、ADC10特性我们先来了解一下这个ADC10的特性,官方给出的:·高达200ksps的转换速率;·固定的10位转换;·具有采样保持功能,并可选采样周期;·可以通过软件代码或TimerA初始化转换;·可选的片内(1.5V或2.5V)或片外参考电压;·支持8个外部输入通道;·内部输入通道支持温度检测,VCC和外部参考(+、—);·可选的转换时钟源;·单通道单次/多次、序列通道单次/多次,共4种转换模式;·ADC内核和参考电压都可单独关闭;·具有一个支持自动存储转换结果的数据转换控制器(DTC);二、ADC10结构OK,我们来引入ADC10的内部结构图来初步认识这个ADC10的内部结构。为了方便大家学习,Cloud将各部分用不同颜色区分开:1、ADC10内核-SAR和采样保持电路:首先我们看到中间两块橙色的区域,右边五边形的是一个“10-bitSAR”,翻译过来就是一个10位精度的逐次逼近比较型的ADC内核,也就是说,我们的ADC转换就是在这里完成的。那么它的信号来源是哪里呢?就是左边橙色矩形区域的“SampleandHold”即采样保持电路,它将外部或者内部的模拟信号进行保持以实现ADC转换过程中的信号稳定。2、ADC10信号通道和转换模式:我们的采样保持电路可以将左边选择器(红色梯形区域)内的信号进行保持。由于我们的SAR只有一个,要对里里外外这么多信号都进行AD转换就必须按顺序来,一个一个选择性地输入,这个选择器就是用来选择要输入的外部或者内部模拟信号。上面绿色矩形框控制着选择器选择哪个信号以及是否自动按序列选择。3、ADC10时钟和采样触发源:ADC10模块像TimerA模块一样也需要有时钟信号支持,有了时钟,SAR这个逐次逼近比较内核才能够运行(因为它是逐次的嘛),形象地说时钟就是SAR的动力。我们看到蓝色区域,这里可以选择ACLK、MCLK和SMCLK,另外还有一个ADC10OSC,这个时钟是ADC10模块自带的,频率在5MHz左右。和TimerA一样,这些时钟也可以通过分频器进行分频。SAR的动力有了,那么怎么样才能够开启这个SAR运动起来呢?这就是采样触发电路。看黄色区域,采样信号可以由ADC10SC位或TimerA的三个比较匹配器输出端来触发。而且通过ISSH我们可以设置是上边沿触发还是下边沿触发。采样触发信号发出一次,ADC10就会立即从通道选择器中选择要采样的信号经过采样保持电路进入到SAR中进行AD转换。4、ADC10参考源:AD转换,其本质就是对外部信号进行量化(就是在幅度上对信号进行编码),既然是量化,那么肯定要有参考的标准,这个标准由谁定?对了,就是由ADC10模块的参考源电路决定的。我们看SAR这个五边形的橙色框,上面有“VR-”和“VR+”两个输入端,这两个输入端就是SAR的参考源。其中,负端可以由SREF2来决定由AVSS(可认为GND)或者VREF-/VeREF-来输入得到。而正端可以由SREF0、SREF1来决定由内部或者外部参考电平输入得到。内部支持1.5V或者2.5V,外部由外部引脚输入得到。ADC10同时支持将内部参考电平输出到外部,而且为了保持其低功耗的优势,还可以由REFBURST来降低平均电流。当输入信号等于或小于VR-时,AD结果输出为0;当输入信号等于或大于VR+时,AD结果为0x03FF(1023);输入信号在VR-和VR+之间,AD结果为以下公式:NADC=1023×(Vin-VR-)÷(VR+—VR-)5、ADC转换值和DTC电路:我们已经从输入、时钟、触发、参考四个部分了解了ADC10的转换电路,那么我们转换得到的值要如何输出呢?这里我们沿着SAR下面空心粗箭头看到一个棕红色框“ADC10MEM”,这个寄存器就是用来存放得到的AD值的。我们只要读取ADC10MEM的值就可以得到AD值了。为了实现低功耗设计,MSP430支持DTC功能,就是数据传输控制功能,它可以支持将ADC10MEM中的数据自动存放至RAM、Flash或者其他外设中而不用CPU干预。6、温度传感器:MSP430内置了一个温度传感器(浅蓝色方框),可以通过设置输入通道为0x0A来选择输入温度模拟量。这样的设计让我们不用外部温度芯片就可以实现简单的温度检测,其AD值和温度的关系式为(A10就是温度传感器通道的AD值):VTEMP=0.00355×TEMMPC+0.986(单位:V)从而推导得到:摄氏度:oC=((A10/1024)*1500mV)-986mV)*1/3.55mV=A10*423/1024-278华氏度:oF=((A10/1024)*1500mV)-923mV)*1/1.97mV=A10*761/1024-468三、ADC10相关寄存器首先让我们看一下有哪些寄存器和ADC10相关的:·1.ADC10AE:ADC10输入使能寄存器·2.ADC10CTL0:ADC10控制寄存器0·3.ADC10CTL1:ADC10控制寄存器1·4.ADC10MEM:ADC10存储器·5.ADC10DTC0:ADC10数据传输控制寄存器0·6.ADC10DTC1:ADC10数据传输控制寄存器1·7.ADC10SA:ADC10数据传输控制启动地址寄存器下面让我们详细学习每个寄存器:1、ADC10AE:ADC10输入使能寄存器ADC10AEADC10输入使能寄存器76543210ADC10AE7ADC10AE6ADC10AE5ADC10AE4ADC10AE3ADC10AE2ADC10AE1ADC10AE0·7~0-ADC10AEx:ADC10模拟输入控制使能位,用来控制外部模拟输入是否使能0:禁止1:使能2、ADC10CTL0:ADC10控制寄存器0ADC10CTL0ADC10控制寄存器015141312111098SREFxADC10SHTxADC10SRREFOUTREFBURST76543210MSCREF2_5VREFONADC10ONADC10IEADC10IFGENCADC10SC·15~13-SREF:参考电平选择,详细见下表SREFVR+VR-二进制十进制0000VCCVSS0011VREF+VSS0102VeREF+VSS0113VeREF+VSS1004VCCVREF-/VeREF-1015VREF+VREF-/VeREF-1106VeREF+VREF-/VeREF-1117VeREF+VREF-/VeREF-·12~11-ADC10SHT:ADC10采样保持时间00:4xADC10CLKs01:8xADC10CLKs10:16xADC10CLKs11:64xADC10CLKs·10-ADC10SR:ADC10采样速率,该位用于选择最大采样速率下的参考电平缓冲驱动能力。ADC10SR置1可以减少参考电平缓冲器的电流消耗0:参考电平缓冲器支持最大速率到200ksps1:参考电平缓冲器支持最大速率到50ksps·9-REFOUT:参考电平输出允许位,用来控制是否输出参考电平0:参考输出关闭1:参考输出打开·8-REFBURST:参考电压输出控制位(REFOUT=1时有效)0:参考电压持续对外输出1:只有在采样转换期间参考电压持续对外输出·7-MSC:多次采样/转换控制位(只在序列或多次转换模式下有效)0:每次采样与转换时,由SHI的上升沿触发1:由SHI的第一个上升沿触发采样定时器,后面的采样与转换由前一次转换完成后立即执行。·6-REF2_5V:参考电压发生器的电压值选择位(REFON=1时有效)0:1.5V1:2.5V·5-REFON:参考电压发生器控制位,控制是否打开内部参考电压0:关闭内部参考电压发生器1:打开内部参考电压发生器·4-ADC10ON:ADC10控制位,控制是否使用ADC10模块0:关闭ADC10模块1:打开ADC10模块·3-ADC10IE:ADC10中断允许控制位,控制是否允许ADC10中断0:中断禁止1:中断允许·2-ADC10IFG:ADC10中断标志位,如果ADC10MEM已经装满转换结果,该位置1.当中断申请呗接受后,它自动复位,可以由软件复位。在使用DTC时,当完成一个数据块的传递时,该位置10:无中断产生1:有中断产生·1-ENC:ADC10转换使能位,用来控制是否进行转换0:ADC10禁止1:ADC10使能·0-ADC10SC:软件可控的采样/转换控制位。ADC10SC和ENC必须用一条指令同时置1。ADC10SC位可自动复位0:无采样/转换开始1:开始采样/转换3、ADC10CTL1:ADC10控制寄存器1ADC10CTL1ADC10控制寄存器115141312111098INCHxSHSxADC10DFISSH76543210ADC10DIVxADC10SSELxCONSEQxADC10BUSY·15~12-INCH:输入通道选择,用来选择进行单次转换的通道或序列转换的最高通道,详细见下面的表格INCH通道INCH通道二进制十进制二进制十进制00000A010008VeREF+00011A110019VREF-/VeREF-00102A2101010温度传感器00113A3101111(VCC-VSS)/201004A4110012(VCC-VSS)/201015A5110113(VCC-VSS)/201106A6111014(VCC-VSS)/201117A7111115(VCC-VSS)/2·11~10-SHS:采样/保持输入信号源选择位00:ADC10SC位01:TimerA.OUT110:TimerA.OUT011:TimerA.OUT2·9-ADC10DF:ADC10数据格式选择位0:二进制格式(右对齐)1:二的补码格式(左对齐)·8-ISSH:采样/保持输入信号反向控制位0:采样输入信号不反向1:采样输入信号反向·7~5-ADC10DIV:ADC10时钟分频选择位,分频系数=ADC10DIV+1·4~3-ADC10SSEL:ADC10时钟源选择位00:ADC10OSC01:ACLK10:MCLK11:SMCLK·2~1-CONSEQ:转换模式选择位00:单通道单次转换01:序列通道单次转换10:单通道多次转换11:序列通道多次转换·0-ADC10BUSY:ADC10忙标志位,该位指示采样或转换正在进行0:表明没有正在进行的转换1:表明一个序列,采样或者转换正在进行4、ADC10MEM:ADC10转换结果寄存器这是一个用来存放AD转换结果的16位的寄存器,它有两种存放方式(还记得前面ADC10DF这个东东么?),分别是:①当ADC10DF=0时,ADC10MEM为右对齐,存放结构如下:ADC10MEM1514131211109876543210000000转换结果②当ADC10DF=1时,ADC10MEM为左对齐,存放结构如下:ADC10MEM1514131211109876543210转换结果0000005、ADC10DTC0:ADC10数据传递控制寄存器0ADC10DTC0ADC10数据传递控制寄存器076543210保留——未使用ADC10TBADC10CTADC10B1ADC10FETCH·3-ADC10TB:ADC10一块或两块数据模式选择0:一块数据传递模式1:两块数据传递模式·2-ADC10CT:ADC10连续传递模式选择位0:在一块或两块传递模式下,一块或两块都传递后,数据传递结束1:继续数据传递,只有在ADC10CT清0或由数据写入到ADC10SA时,DTC停止·1-ADC10B1:ADC10转存块满标志。该位表明两块数据模式下数据块是否已经装入转换结果。ADC10B1只有当ADC10IFG位在DTC工作期间第一次被设置后才有效(ADCTB=1时有效)·0-ADC10FETCH:该位通常处于