MSP430 ADC10讲解.docx
- 文档编号:8813679
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:25
- 大小:914.97KB
MSP430 ADC10讲解.docx
《MSP430 ADC10讲解.docx》由会员分享,可在线阅读,更多相关《MSP430 ADC10讲解.docx(25页珍藏版)》请在冰豆网上搜索。
MSP430ADC10讲解
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-bit SAR”,翻译过来就是一个10位精度的逐次逼近比较型的ADC内核,也就是说,我们的ADC转换就是在这里完成的。
那么它的信号来源是哪里呢?
就是左边橙色矩形区域的“Sample and Hold”即采样保持电路,它将外部或者内部的模拟信号进行保持以实现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输入使能寄存器
ADC10AE ADC10输入使能寄存器
7
6
5
4
3
2
1
0
ADC10AE7
ADC10AE6
ADC10AE5
ADC10AE4
ADC10AE3
ADC10AE2
ADC10AE1
ADC10AE0
·7~0-ADC10AEx:
ADC10模拟输入控制使能位,用来控制外部模拟输入是否使能
0:
禁止 1:
使能
2、ADC10CTL0:
ADC10控制寄存器0
ADC10CTL0 ADC10控制寄存器0
15
14
13
12
11
10
9
8
SREFx
ADC10SHTx
ADC10SR
REFOUT
REFBURST
7
6
5
4
3
2
1
0
MSC
REF2_5V
REFON
ADC10ON
ADC10IE
ADC10IFG
ENC
ADC10SC
·15~13-SREF:
参考电平选择,详细见下表
SREF
VR+
VR-
二进制
十进制
000
0
VCC
VSS
001
1
VREF+
VSS
010
2
VeREF+
VSS
011
3
VeREF+
VSS
100
4
VCC
VREF-/VeREF-
101
5
VREF+
VREF-/VeREF-
110
6
VeREF+
VREF-/VeREF-
111
7
VeREF+
VREF-/VeREF-
·12~11-ADC10SHT:
ADC10采样保持时间
00:
4 x ADC10CLKs
01:
8 x ADC10CLKs
10:
16 x ADC10CLKs
11:
64 x ADC10CLKs
·10-ADC10SR:
ADC10采样速率,该位用于选择最大采样速率下的参考电平缓冲驱动能力。
ADC10SR置1可以减少参考电平缓冲器的电流消耗
0:
参考电平缓冲器支持最大速率到200ksps
1:
参考电平缓冲器支持最大速率到50ksps
·9-REFOUT:
参考电平输出允许位,用来控制是否输出参考电平
0:
参考输出关闭 1:
参考输出打开
·8-REFBURST:
参考电压输出控制位(REFOUT=1时有效)
0:
参考电压持续对外输出
1:
只有在采样转换期间参考电压持续对外输出
·7-MSC:
多次采样/转换控制位(只在序列或多次转换模式下有效)
0:
每次采样与转换时,由SHI的上升沿触发
1:
由SHI的第一个上升沿触发采样定时器,后面的采样与转换由前一次转换完成后立即执行。
·6-REF2_5V:
参考电压发生器的电压值选择位(REFON=1时有效)
0:
1.5V 1:
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时,当完成一个数据块的传递时,该位置1
0:
无中断产生 1:
有中断产生
·1-ENC:
ADC10转换使能位,用来控制是否进行转换
0:
ADC10禁止 1:
ADC10使能
·0-ADC10SC:
软件可控的采样/转换控制位。
ADC10SC和ENC必须用一条指令同时置1。
ADC10SC位可自动复位
0:
无采样/转换开始 1:
开始采样/转换
3、ADC10CTL1:
ADC10控制寄存器1
ADC10CTL1 ADC10控制寄存器1
15
14
13
12
11
10
9
8
INCHx
SHSx
ADC10DF
ISSH
7
6
5
4
3
2
1
0
ADC10DIVx
ADC10SSELx
CONSEQx
ADC10BUSY
·15~12-INCH:
输入通道选择,用来选择进行单次转换的通道或序列转换的最高通道,详细见下面的表格
INCH
通道
INCH
通道
二进制
十进制
二进制
十进制
0000
0
A0
1000
8
VeREF+
0001
1
A1
1001
9
VREF-/VeREF-
0010
2
A2
1010
10
温度传感器
0011
3
A3
1011
11
(VCC-VSS)/2
0100
4
A4
1100
12
(VCC-VSS)/2
0101
5
A5
1101
13
(VCC-VSS)/2
0110
6
A6
1110
14
(VCC-VSS)/2
0111
7
A7
1111
15
(VCC-VSS)/2
·11~10-SHS:
采样/保持输入信号源选择位
00:
ADC10SC位
01:
TimerA.OUT1
10:
TimerA.OUT0
11:
TimerA.OUT2
·9-ADC10DF:
ADC10数据格式选择位
0:
二进制格式(右对齐) 1:
二的补码格式(左对齐)
·8-ISSH:
采样/保持输入信号反向控制位
0:
采样输入信号不反向 1:
采样输入信号反向
·7~5-ADC10DIV:
ADC10时钟分频选择位,分频系数=ADC10DIV+1
·4~3-ADC10SSEL:
ADC10时钟源选择位
00:
ADC10OSC 01:
ACLK 10:
MCLK 11:
SMCLK
·2~1-CONSEQ:
转换模式选择位
00:
单通道单次转换 01:
序列通道单次转换
10:
单通道多次转换 11:
序列通道多次转换
·0-ADC10BUSY:
ADC10忙标志位,该位指示采样或转换正在进行
0:
表明没有正在进行的转换 1:
表明一个序列,采样或者转换正在进行
4、ADC10MEM:
ADC10转换结果寄存器
这是一个用来存放AD转换结果的16位的寄存器,它有两种存放方式(还记得前面ADC10DF这个东东么?
),分别是:
①当ADC10DF=0时,ADC10MEM为右对齐,存放结构如下:
ADC10MEM
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
0
0
0
0
0
转换结果
②当ADC10DF=1时,ADC10MEM为左对齐,存放结构如下:
ADC10MEM
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
转换结果
0
0
0
0
0
0
5、ADC10DTC0:
ADC10数据传递控制寄存器0
ADC10DTC0 ADC10数据传递控制寄存器0
7
6
5
4
3
2
1
0
保留——未使用
ADC10TB
ADC10CT
ADC10B1
ADC10FETCH
·3-ADC10TB:
ADC10一块或两块数据模式选择
0:
一块数据传递模式 1:
两块数据传递模式
·2-ADC10CT:
ADC10连续传递模式选择位
0:
在一块或两块传递模式下,一块或两块都传递后,数据传递结束
1:
继续数据传递,只有在ADC10CT清0或由数据写入到ADC10SA时,DTC停止
·1-ADC10B1:
ADC10转存块满标志。
该位表明两块数据模式下数据块是否已经装入转换结果。
ADC10B1只有当ADC10IFG位在DTC工作期间第一次被设置后才有效(ADCTB=1时有效)
·0-ADC10FETCH:
该位通常处于复位(ADC10FETCH=0)状态
6、ADC10DTC1:
ADC10数据传递控制寄存器1
ADC10DTC1 ADC10数据传递控制寄存器1
7
6
5
4
3
2
1
0
DTC Transfers
·7~0-DTC Transfers:
这些位定义了每个数据块中传递的数量
0:
DTC禁止 0x00~0xFF:
每个数据块中传递的数量
7、ADC10SA:
ADC10数据传递起始地址寄存器
ADC10SA ADC10数据传递起始地址寄存器
15
14
13
12
11
10
9
8
ADC10SAx
7
6
5
4
3
2
1
0
ADC10SAx
0
·15~1-ADC10SA:
该寄存器的内容为DTC的起始地址,需要先对ADC10SA写入来初始化DTC传递。
第0位未使用,只读,读结果为0
四、ADC10的采样和转换过程
我们要学习ADC10,就必须要了解它是如何对一个模拟信号进行采样和转换的。
我们结合下面这个采样/转换的时序图来详细介绍这个过程:
首先是我们的四个采样触发源(ADC10SC和3个TimerA OUT)产生了触发信号,也就是SHI信号产生了一个脉冲,此时采样开始,SAMPCON信号也同时置高。
然后采样时钟进行一段时间的计数,在计数时,SAMPCON保持高电平不变,在tsync+tsample时间后,采样完成,此时停止采样并进入到转换阶段。
经过13个ADC10CLK时钟后,转换阶段也完成了。
我们再回过头来看看SAMPCON信号在高电平状态下到底保持了多少时间,又是谁控制的呢?
前面我们知道SHT可以选择采样周期,这个采样周期就是tsample,它可以是4、8、16或64个ADC10CLK个周期。
选择的采样周期和ADC10CLK需要同步,这段时间就是上面的tsync,这段时间具体多少不用关心。
为了采样的有效,我们在对模拟信号进行采样时,必须保证一定的采样时间也就是tsample。
所以我们得学习一下最小采样时间的计算。
前面我们还讲了ADC10SR可以控制采样速率,这里我们就要用到它:
①ADC10SR=0时,此时为高速采样,最小采样时间为:
tsample > (RS + RI) × ln(2048) × CI + 800ns
②ADC10SR=0时,此时为低速采样,可以减小电流满足低功耗需求,最小采样时间为:
tsample > (RS + RI) × ln(2048) × CI + 2500ns
上面的式子多了很多R、C啥的,对了,这个最小采样时间是和我们的采样电路是有关系的。
在SAMPCON=0时,所有的Ax输入为高阻态。
当SAMPCON=1时,在采样时间tsample期间,别选择的Ax输入相当于一个RC低通滤波器如下图:
VI=Ax引脚输入电压 VS=外部驱动源电压 RS=外部源内阻 RI=内部多路选择导通输入电阻 CI=输入电容 VC=电容充电电压
由于内部电路决定RI最大为2KΩ,CI最大是20pF,所以上面的式子就可以简化为:
tsample > (RS + 2K) × 7.625 × 20pF + 800ns (ADC10SR = 0)
tsample > (RS + 2K) × 7.625 × 20pF + 2500ns (ADC10SR = 1)
四、ADC10的四种转换模式
前面已经说过,ADC10有四种模式,是由CONSEQ来控制的
1、单通道单次模式
该模式对由INCH选择的单通道进行一次采样和转换。
ADC结果写入到ADC10MEM。
当ADC10SC触发一次转换时,连续的转换也可以通过将ADC10SC置位来触发。
当使用其他任何触发源来启动转换时,ENC必须在每次转换间隔离,在ENC复位并再次置位前的采样信号将被忽略。
转换流程见下图:
我们可以看到,CONSEQx=00表示当前模式为单通道单次模式,在ADC10ON置位后,ADC10开启并进入到等待状态。
当ENC产生上升沿时ADC10等待触发并在SAMPCON产生上升沿后进入到采样环节。
采样经过4、8、16或64个ADC10CLK周期后进入到转换环节,同样经过12个ADC10CLK周期后完成转换。
经过1个ADC10CLK周期,AD结果存入ADC10MEM并且ADC10IFG中断标志位置位,然后ADC10等待下一次的转换使能。
如果SHS=0也就是说触发源是ADC10SC,那么当ENC信号和ADC10SC信号都为高电平时同样进入到采样环节。
另外,在AD转换的任意阶段,只要ENC清0,则立即回到等待状态。
2、序列通道单次转换模式:
该模式对一个序列的通道进行一次采样和转换。
序列通道将自动选择INCHx到A0作为当前通道。
每个ADC结果都存放到ADC10MEM。
最后一个通道也就是A0转换完毕后序列转换就结束。
当ADC10SC启动一次,连续的转换也可通过设置ADC10SC位来启动。
当任何其他触发源用来启动转换时,ENC必需在每次序列转换间隔离,在ENC复位并再次置位前的采样信号将被忽略。
转换流程见下图:
大家可以看到,CONSEQ=01表示为序列通道单次转换模式。
这个流程图和第一张差别不大,我们结合第一张流程图的讲解来解释这个流程图。
首先我们看到中间主干的流程通路和第一张是一样的,这里就不再赘述了。
我们看到左边和右边分别多了一条返回线。
左边那条是从转换完成直接返回到采样输入通道的,右边那条是从转换完成返回到触发等待状态的,他们的区别是左边MSC=1也就是自动连续触发,右边MSC=0不自动连续触发所以每次需要等待SAMPCON信号为高才触发下一次采样。
然后x也就是当前要转换的通道自减1,直到x=0时转换完A0这个最后通道然后等待ADC10的使能。
3、单通道多次转换模式:
该模式对由INCHx选定的通道进行连续采样和转换。
每次ADC转换结果都存放到ADC10MEM中。
转换流程见下图:
CONSEQ=10表示为单通道多次转换模式。
中间部分还是一样的,只是两边的返回线现在和MSC有关。
左边这条线MSC=1那么就会在上一次转换完成后自动进入下一次的采样环节。
右边这条线MSC=0那么当上一次转换完成后会自动进入触发等待状态,只有SAMPCON信号变高才进行下一次的采样。
最右边的一条线说明如果ENC清0,那么ADC10将重新等待使能。
4、序列通道多次转换模式:
该模式对序列通道进行重复采样和转换。
序列通道为从INCHx选择的通道到A0。
每次ADC结果都存放到ADC10MEM。
通道A0转换完成后序列转换结束,下一个启动信号重新启动序列转换。
转换流程见下图:
CONSEQ=11表示序列通道多次转换模式。
这个流程图显然是“单通道多次”和“序列通道单次”的结合体,所以就不再赘述,相信大家肯定可以自行理解这个转换过程。
如果理解不了,那么说明前面三个转换模式没有深入理解,大家可以回过头复习一下前面的三个转换模式。
五、ADC10的数据传递控制器——DTC
前面概述的时候就讲到MSP430的ADC10包含一个数据传递控制器(DTC),它可以自动地将转换结果从ADC10MEM传递到其他片内存储单元。
设置ADC10DTC1寄存器为一个非0值就可以使能DTC。
另外,MSP430x20x2系列芯片中是没有DTC的。
当DTC使能时,每次ADC10完成转换和将转换结果装载到ADC10MEM后,数据传递启动。
无需软件干预来惯例ADC10,直到预先定义的转换数据量被传递。
每次DTC传递需要一个MCLK周期。
为了避免DTC传递过程中和其他总线竞争(竞争是数电用语),CPU暂停。
如果CPU活动,需要一个MCLK周期时间来传递。
当ADC10忙的时候,DTC不能启动。
也就是说当设置DTC时,程序必须保证当前没有正在进行的转换或序列转换。
1、一块数据传递模式:
ADC10TB=0时选择一块数据传递模式。
ADC10DTC1寄存器中的n值定义了一个数据块传递的总长度。
可以利用ADC10SA寄存器在MSP430任何地址范围内定义数据块的起始地址。
数据块结束地址为ADC10SA+2n-2。
其存储结构式见下图:
内部地址指针最初为ADC10SA,内部传递计数器=n。
内部指针和计数器在程序中是已知的。
DTC传递ADC10MEM中的数据到由ADC10SA这个指针所指的字地址中(注意是字地址,2个字节)。
每次传递后,内部地址指针自增2,内部传递计数器自减1。
随着ADC10MEM的每次装载,数据继续传递,知道内部传递计数器=0。
其他的DTC数据传递不再继续进行,直到对ADC10SA再写。
在一块数据传递模式下使用DTC时,一个完整的数据块传递完成后,ADC10IFG标志自动置1。
下图描述了这个过程:
2、两块数据传递模式:
ADC10TB=1时选择两块数据传递模式。
ADC10DTC1中的n值定义了一个数据块传递的长度。
此时,ADC10SA在MSP430任何地址范围内定义的是第一个数据块的地址,第一个数据块的结束地址为ADC10SA+2n-2。
另外还有第二个数据块的地址范围为ADC10SA+2n到ADC10SA+4n-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430 ADC10讲解 ADC10 讲解