1、1,第9章 模/数转换(ADC)第一节 概述 第二节 模/数转换器 第三节 采样保持器和多路模拟开关,本章教学目标: 1、了解ADC的基本概念 2、MSP430 ADC12的原理与基本应用,2,第一节 概述,计算机测量控制系统,3,计算机,多 路 开 关,传 感 器 1,放 大 器 1,滤 波 器 1,模拟 量 1,采样保持,A / D,传 感 器 n,放 大 器 n,滤 波 器 n,模拟 量 n,数据采集系统,与本课程相关部分,音频、视频信号,数字通信,4,第二节 模/数转换器 一、A/D 转换器的基本原理 二、MSP430 ADC12介绍,5,一、A/D 转换器的基本原理,模拟输入量,数字
2、输出量,000,001,010,011,000,001,010,011,1v,2v,3v,4v,5v,6v,7v,A/D转换器,量化,6,工作原理,特点,计数式,结构简单、,转换速度慢、精度低,实际少用,双积分式,精度高、转换速度慢、抗干扰性能好,逐次逼近式,转换速度较快、精度较高,实际常用、抗干扰性能不如积分式,高速并行式,转换速度快,价格高,精度低,A/D转换器分类,式,7,1分辨率:指A/D转换器所能分辨的最小模拟输入量,通常用A/D的位数表示。如:8位A/D的分辨率为8位,10位A/D的分辨率为10位,2转换精度:指实际输入的模拟值与理论输入的模拟值(根据A/D输出推算)之间的偏差。常
3、用数字量最低有效位 LSB 的几分之几表示。,3转换时间和转换速度:转换时间指完成一次A/D转换所需的时间,从启动信号开始到转换结束,得到稳定数字量的时间。转换速度是转换时间的倒数。,A/D转换器的主要技术指标,8,逐次逼近式A/D转换器原理图,-,+,D/A,转换器,输出缓冲器,控制 电路,启动信号 START,CLK 时钟,EOC 转换结束信号,D,7,D,0,比较器,模拟输入,数字输出 NADC,Vin,OE 输出使能信号,SAR,VREF,VDA,9,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,
4、1,0,0,0,1,0,D7,D6,D5,D4,D0,D1,D3,D2,10,A/D转换器的典型信号、电源、地,A/D 转换器,模拟量输入信号,A/D转换启动信号,数字量输出,A/D转换完成信号,输出使能信号,ADC时钟,电源,模拟地,数字地,参考电源,11,A/D转换的启动,电平启动,高电平启动,低电平启动,脉冲沿启动,上升沿启动,下降沿启动,启动方法,软件启动,硬件启动,启动信号,12,CPU 对 ADC 转换结果的读取方式,程序延时方式程序查询方式中断方式,13,二、MSP430 ADC12介绍,ADC12模块是一个转换速度高达200ksps、采样时间可编程的12-bit逐次逼近型模数转
5、换器。由12-bit的SAR核、采样保持电路、模拟开关、参考电压产生与选择电路、ADC时钟选择电路、采样与转换控制电路、16个转换结果存储缓冲器及其对应的16个存储控制寄存器、中断系统、片上集成温度传感器等组成。 ADC12可以在没有CPU的参与下,独立实现多达16次的采样、转换和存储操作。ADC12模块可以独立断电,以便于低功耗设计。 MSP430X13X,MSP430X14X,MSP43015X和MSP430X16X等芯片中均有ADC12模块。,14,ADC12模块,15,ADC12 的特点与性能指标:,采样率可达200ksps,采样率可编程; 分辨率12-bit; 内含16路模拟开关,其
6、中8路外部模拟输入,1路内部温度传感器输入等; 内含采样保持电路,采样时间可编程; 可由软件、Timer_A 或Timer_B启动转换过程; 参考电压可编程:内部(1.5V 或2.5V)、外部; 4种转换模式; ADC核和内部参考电源可编程断电,以实现节能; 具有中断(子)向量寄存器,供18路ADC中断译码用; 具有16个转换结果存储寄存器。,16,12-BIT SAR ADC,参 考电压源,时钟电路,采样/保持器,模 拟 开 关,采样与转换控制电路,结果存储缓冲器 与 相应的控制寄存器,MSP430 ADC12 原理框图,17,18,ADC12的模数转换部分原理图,19,NADC=4095,
7、当VinVR+ NADC=0, 当VinVR- VR+ 和 VR- 可由软件编程设置,ADC12的转换结果NADC:,20,参考电压源VR+,VR- 电路,21,BIS #REFON+REF2_5V , Vr+=Vref+,举例 :ADC12 通道 0 使用内部 2.5V 参考电压源,SREF2 SREF1 SREF00 0 1,#SREF_1,22,BIS #REFON , Vr+=Vref+,举例 :ADC12 通道 0 使用内部 1.5V 参考电压源,SREF2 SREF1 SREF00 0 1,#SREF_1,23,举例:VR+ 使用外部正参考电压源 VeREF+,BIS.B #SRE
8、F_2 , &ADC12MCTL0,SREF2 SREF1 SREF00 1 x,#SREF_2 or #SREF_3,or BIS.B #SREF_3 , &ADC12MCTL0,24,ADC12工作时钟(ADC12CLK)编程设置,例:BIS #ADC12SSEL_2 , &ADC12CTL1,25,MSP430F149 转换时钟、转换时间、电源建立时间和采样时间等参数,13/6.3=2.06 , 13/3.7=3.51,26,ADC12的模拟输入及其多路模拟开关 例:BIS.B #INCH_4 , &ADC12MCTL0,ADC12 中的采样保持器,模拟开关输出,什么是采样保持器? 为什
9、么需要采样保持器?,请参见本章附录,28,Sample/Hold Input Signal,SAMPCON 为高电平时,采样保持器工作在采样模式 SAMPCON 为低电平时,采样保持器工作在保持模式 SAMPCON 的下降沿与 ADC12CLK 同步后启动 AD 转换,采样信号源选择,极性选择,采样方式选择,采样与转换控制,采样定时器,29,采样与转换控制,ADC12SC .0 ENC .1 MSC .7 SHT0x .811 SHT1x .1215 ISSH .8 SHP .9 SHSx .1011,ADC12CTL0,ADC12CTL1,30,SHP=0 , SAMPCON=SHI ,非采
10、样定时器采样方式(Extended Sample Mode) SHP=1 , SAMPCON=采样定时器输出,采样定时器采样方式(Pulse Sample Mode),采样方式选择,31,非采样定时器采样方式(Extended Sample Mode) SHP=0 , SAMPCON=SHI,tsample = 采样保持输入信号(SHI)的宽度,32,采样定时器采样方式(Pulse Sample Mode) SHP=1 , SAMPCON=采样定时器输出,tsample = 采样定时器输出信号的宽度,采样保持输入信号的宽度,01ADC12CLK,4ADC12CLKtsample 1024ADC
11、12CLK,33,采样定时器设置 设置采样时间 tsample,4ADC12CLKtsample 1024ADC12CLK,SHT0x ADC12CTL0.811 SHT1x ADC12CTL0.1215,tsample ( Rs + 2k )9.01140pF + 800ns,12-bit 分辨率下的最小采样时间计算公式:,当Rs=10k时,tsample 5.13s,35,举例 :ADC12 通道 07,使用采样定时器采样方式,采样时间=16ADC12CLK,SHT0x=2,采样时间=16ADC12CLK,BIS #SHT0_2 , Use sampling timer,36,每进行一次采
12、样和转换均需要 SHI 上升沿去触发采样定时器,除了启动第一次采样和转换时需要 SHI 的上升沿触发采样定时器外,后续的采样和转换过程无需 SHI 的上升沿触发。一旦上一次转换完毕,紧接着自动开始下一次的采样和转换过程。,MSC : 多次采样和转换控制位(仅序列或重复方式下有效),MSC=ADC12CTL0.7,MSC=0 :,MSC=1 :,37,采样保持信号源选择,同步,SHSx=00 , ADC12SC bit 软件启动 SHSx=01 , Timer_A Output Unit1启动 SHSx=10 , Timer_B Output Unit0启动 SHSx=11 , Timer_B
13、Output Unit1启动,ENC,SHI,采保源,ENC,SHI,采保源,ISSH=0,ISSH=0,SHSx=ADC12CTL1.1011,38,MSP430F149 Timer_A Output Unit1 具有内部启动采样转换信号,39,16个12-bit的转换结果存储缓冲器,16个8-bit的转换存储控制寄存器,一一对应,ADC12转换结果存储缓冲器,存储指针,转换方式,40,ADC12 转换存储控制寄存器: ADC12MCTLx,参考电压源选择 模拟输入通道选择,通道序列结束标志,EOS=1的通道是序列转换中最后转换的通道,41,n=CSTARTADD,ADC12MEM0,ADC
14、12MEM1,ADC12MEMn,ADC12MEM15,ADC12MCTL0,ADC12MCTL1,ADC12MCTLn,ADC12MCTL15,ADC12 通道(channel)的概念,ADC12 通道n,一个ADC12通道(简称通道)由通道号、该通道的转换结果存储缓冲器、该通道的参考电压源配置、该通道的模拟输入以及通道序列结束标志等组成。ADC12通道n可以对应于16个模拟输入中的任何一个,不同的ADC12通道可以对应于同一个模拟输入,不同的ADC12通道可以有不同的参考电压源。 ADC12 通道与传统的模拟输入通道有很大的不同。,CSTARTADD=ADC12CTL1的最高 4 位的值=
15、015,42,ADC12 的通道序列(sequence of channels),n=CSTARTADD,ADC12MEMn,ADC12MEMn+1,ADC12MEMn+2,ADC12MEMn+m,00011 1,EOS,序列开始,序列结束,k=(n+m)%16 循环队列,例:从 n 号ADC12 通道开始的,长度=m+1 的通道序列,k,43,0,1,n,15,14,队首,队尾,n=(n+1) % 16,n=CSTARTADD,0,0,0,0,1,EOS=1,有限长通道序列:某些通道的EOS=1,1,1,0,0,0,0,44,无限长通道序列:所有通道的EOS=0,0,1,n,15,14,队首
16、,n=(n+1) % 16,n=CSTARTADD,0,0,0,0,0,0,0,0,0,0,0,45,ADC12的 4 种转换方式(运行方式),单通道单次转换方式,通道序列单轮转换方式,单通道重复转换方式,通道序列重复转换方式,46,常用转换方式通道序列单轮转换方式,每一轮通道序列中第一通道的采样和转换都由定时器(TA1/TB0/TB1)启动,然后由采样定时器自动启动后续通道的快速采样和转换,直到EOS=1的通道转换完毕,完成第一轮。,47,ADC12 off,n=CSTARTADDx Wait for Enable,Sample,Input Channel Defined in ADC12M
17、CTLn,Wait for Trigger,Convert,ConversionCompleted, Result Stored into ADC12MEMn, ADC12IFGn is Set,ENC=,ENC=,SAMPCON=,SAMPCON=1,SAMPCON=,12ADC12CLK,1ADC12CLK,EOS.n=1,if n15 then n=n+1 else n=0MSC=1 and SHP=1 and EOS.n=0,ADC12ON=1,停止条件,状态转换图,48,定时器 TA1 启动的通道序列单轮转换方式举例,通道序列定义: 通道号 结果存储缓冲器 模拟输入 参考电压源 EO
18、S0 ADC12MEM0 A0 内部2.5V 01 ADC12MEM1 A1 内部2.5V 02 ADC12MEM2 A2 内部2.5V 03 ADC12MEM3 A3 内部2.5V 1,49,定时器TA,采样定时器,采样间隔,A0 A1 A2 A3,第一轮,A0 A1 A2 A3,第二轮,ADC12IFG3 interrupt,ADC12IFG3 interrupt,50,BIS.B #BIT0+BIT1+BIT2+BIT3 , Enable ADC12IFG3 interrupt,ADC12 初始化编程:,51,Timer_A 初始化编程采样间隔=TACCR0(单位:Timer clock
19、 周期) 正脉冲宽度=TACCR0 - TACCR1,OUT1,52,BIS.B #BIT2 , SMCLK, up mode,53,ADC12 模块,ADC12OV,ADC12TOV,ADC12IFG0,ADC12IFG1,ADC12IFG15,ADC12 的中断 分3类,共18个中断源,ADC12MEMx 装入新数据中断,ADC12MEMx 被覆盖中断(上一次转换结果尚未读出,新的转换结果又写入同一个存储缓冲器中),ADC12转换时间溢出中断(采样转换间隔太短,前一次尚未转换完毕,又启动新的AD转换),中断优先级高,中断优先级低,如果ADC12OV/ADC12TOV中断是最高优先级的已请求
20、的中断,则读写ADC12IV寄存器将自动复位ADC12OV/ADC12TOV,54,ADC12IFG0,ADC12IFG1,ADC12IFG15,ADC12 中断控制,ADC12IE0,ADC12IE1,ADC12IE15,GIE,CPU,0 No interrupt pending 1 Interrupt pending,0 Interrupt disable 1 Interrupt enable,读取ADC12MEMx将自动清零中断标志位ADC12IFGx, ADC12IFGx也可由软件清零。(存取ADC12IV寄存器不会清零中断标志位),ADC12OV,ADC12TOV,ADC12OVI
21、E,ADC12TOVIE,ADC12CTL0.3,ADC12CTL0.2,优先级,总控,分控,0FFEEh,共享中断向量,55,ADC12 的中断(子)向量寄存器,read only register, ADC12 中断服务子程的跳转表,56,注意:ADC12OV和ADC12TOV没有相应的可供读取的标志位,57,ADC12 中断服务子程结构 ADC12_ISRADD check other int pending ,58,ADM1MOV ,59,ADC12 编程举例,ADC12CTL0,ADC12CTL1,ADC12MCTLx,ADC12MEMx,ADC12IFG,ADC12IE,P6SEL
22、,ADC12IV,ADC12 的编程结构 (不考虑TA1,TB0,TB1),60,与ADC12有关的引脚,61,模拟开关,A0A7,P6SEL.x=1,必须为高阻态!,P6SEL,BIS.B #BITx , &P6SEL,62,注意:应符合硬件互斥设计原则 ADC12的8个模拟输入引脚(A0A7)与P6数字输入输出引脚复用,因此当上电复位后或编程选择这些引脚为I/O的输出功能的同时施加模拟输入信号,将有可能导致大电流流经这些引脚的输出电路和模拟信号源,违反了互斥设计原则。 为了实现互斥操作,应将与模拟信号相连接引脚的P6SEL.x置为“1”:BIS.B #BIT.x , &P6SEL,63,A
23、DC12CTL0,自动快速连续采样转换控制,内部参考电压源控制位,ADC12模块供电控制,溢出中断使能控制,转换使能控制,软件启动采样转换控制,815通道采样时间设置,07通道采样时间设置,64,ADC12CTL1,通道序列起始通道号设置,采样信号源选择,采样方式选择,采样保持信号反向控制位,ADC12时钟分频设置,ADC12时钟源选择,转换方式选择,ADC12“忙” 指示位,65,ADC12MCTLn,参考电压源选择 模拟输入通道选择,通道序列结束标志,n 通道属性控制寄存器,注意: ADC12CTL0、ADC12CTL1 和 ADC12MCTLn 三种控制寄存器的大部分控制位(灰色背景)需
24、在 ENC=0 的情况下才能编程修改。,66,ADC12控制寄存器的复位值:,不使用内部参考电压源,ADC12模块处于断电状态,禁止溢出中断,ENC=0(未使能状态),通道号或通道序列起始通道号=0,采样信号源为ADC12SC(软件启动),采样方式:不使用采样定时器,ADC12时钟为内部时钟,不分频,转换方式:单通道单次转换,ADC12CTL1=0000h,ADC12MCTLn=00h,ADC12CTL0=0000h,模拟输入通道为A0,参考电压源:VR-=AVSS, VR+=AVCC,非结束通道(EOS=0),SHT0x=0,SHT1x=0,MSC=0,必须编程,ADC12IE=0000h
25、禁止ADC12IFGx中断,67,举例00 全部采用复位值,查询方式转换完毕后通过 P1.0 输出一个负脉冲,bis.b #01h , Enable ADC12,相关寄存器初始化编程:,68,软件启动单通道单次转换方式状态转换图,ADC12 off,n=CSTARTADDx Wait for Enable,Sample,Input Channel Defined in ADC12MCTLn,Convert,ConversionCompleted, Result Stored into ADC12MEMn, ADC12IFGn is Set,ADC12ON=1,ENC,SAMPCON=1,ENC
26、=1 or and,ADC12SC=,SAMPCON=,12个ADC12CLK,1个ADC12CLK,ENC=0,ENC=0*,ENC=0*,*Conversion result is unpredictable,软件启动,采样期间,转换时间,存储等时间,给模块供电,转换完毕后ADC12SC自动清零,69,#include ORG 01100h ; Program Start RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, P1.0 = 1jmp Main,70,;- ; Interrupt Vectors Us
27、ed MSP430x13x/14x/15x/16x ;-ORG 0FFFEh ; MSP430 RESET VectorDW RESET ;END,问题:请实验验证程序设计的正确性,如何改正? 提示:采样时间?AD 转换启动信号?,ADC12SC automatically cleared at EOC.,71,举例 使用采样定时器,采样时间=16ADC12CLK ,其它采用复位值。查询方式。转换完毕后通过 P1.0 输出一个负脉冲,SHT0x=2,采样时间=16ADC12CLK,72,bis.b #01h , Enable ADC12,相关寄存器初始化编程:,73,#include ORG
28、01100h ; Program Start RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, P1.0 = 1jmp Main,74,;- ; Interrupt Vectors Used MSP430x13x/14x/15x/16x ;-ORG 0FFFEh ; MSP430 RESET VectorDW RESET ;END,75,举例01 使用采样定时器,采样时间=16ADC12CLK ,使用 ADC12IFG0 中断,其它采用复位值。If A0 0.5*AVcc, P1.0 set, else reset
29、.In Main MSP430 waits in LPM0 to save power untilconversion complete, ADC12_ISR will force exit from LPM0 in Main on reti.,76,bis.b #01h , Enable ADC12,相关寄存器初始化编程:,77,#include ;-ORG 01100h ; Program Start ;- RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, Again,78,;- ADC12_ISR ; Exi
30、t any LPMx on retibic.b #01h,END,79,举例02 使用内部 2.5V 参考电压源,使用采样定时器,采样时间=16ADC12CLK ,其它采用复位值。查询方式。转换完毕后通过 P1.0 输出一个负脉冲,80,SREF2 SREF1 SREF00 0 1,#SREF_1,81,相关寄存器初始化编程:,bis.b #BIT0 , Enable conversions,82,#include ;-ORG 01100h ; Program Start ;- RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WD
31、THOLD, Enable conversions,83,bis.b #01h,END,84,举例04 使用采样定时器,采样时间=1024ADC12CLK ,使用 ADC12IFG0 中断,其它采用复位值,并将转换结果转存到R5中。,SHT0x=15,采样时间=1024ADC12CLK,85,#include ;-ORG 01100h ; Program Start ;- RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, Enable conversions,86,Main bis #ADC12SC, Return
32、 activereti,87,;- ; Interrupt Vectors ;-ORG 0FFFEh ; MSP430 RESET VectorDW RESET ;ORG 0FFEEh ; ADC12 Interrupt VectorDW ADC12ISR ;END,88,举例05 使用外部正参考电压源 VeREF+ ,使用采样定时器,采样时间=16ADC12CLK ,其它采用复位值。查询方式。转换完毕后将转换结果转存到 R5 中。,相关寄存器初始化编程:,bis.b #BIT0 , Enable conversions,89,#include ;-ORG 01100h ; Program S
33、tart ;- RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, Enable conversions,90,Main bis #ADC12SC,END,91,举例06 重复通道序列转换方式,使用采样定时器,采样时间=256ADC12CLK ,使用 ADC12IFG.3 中断,其它采用复位值,并将转换结果转存到RAM中。,SHT0x=8,采样时间=256ADC12CLK,92,通道序列定义: 通道号 结果存储 模拟输入 RAM缓冲器 通道号 0 ADC12MEM0 A0 0x2000x20E1 ADC12MEM1
34、A1 0x2100x21E2 ADC12MEM2 A2 0x2200x22E3 ADC12MEM3 A3 0x2300x23E注意:通道号与模拟输入通道号可以不一致。因此上述的通 道定义也可以如下: 通道号 结果存储 模拟输入 RAM缓冲器 通道号 0 ADC12MEM0 A3 0x2000x20E1 ADC12MEM1 A1 0x2100x21E2 ADC12MEM2 A2 0x2200x22E3 ADC12MEM3 A0 0x2300x23E,93,通道号 结果存储 模拟输入 RAM缓冲器 通道号 0 ADC12MEM0 A1 0x2000x20E1 ADC12MEM1 A1 0x2100
35、x21E2 ADC12MEM2 A3 0x2200x22E3 ADC12MEM3 A3 0x2300x23E通道号 结果存储 模拟输入 RAM缓冲器 通道号 5 ADC12MEM5 A6 0x2000x20E6 ADC12MEM6 A0 0x2100x21E7 ADC12MEM7 A5 0x2200x22E8 ADC12MEM8 A3 0x2300x23E,94,ADC12 off,n=CSTARTADDx Wait for Enable,Sample,Input Channel Defined in ADC12MCTLn,Convert,ConversionCompleted, Result
36、 Stored into ADC12MEMn, ADC12IFGn is Set,SAMPCON=1,ENC=1 or and,ADC12SC=,SAMPCON=,1ADC12CLK,ENC=0 and EOS.n=1,if EOS.n=1 then n=CSTARTADDx else if n15 then n=n+1else n=0 MSC=1 and SHP=1and (ENC=1 or EOS.n=0),ADC12ON=1,软件启动,12ADC12CLK,停止条件,通道序列重复转换方式状态转换图由软件启动第一轮首通道(通道0)的采样和转换,然后由采样定时器自动实现后续通道的快速采样和转
37、换,到EOS=1的通道(通道3)转换完毕后又立即从通道0开始新一轮的采样和转换,直到停止条件满足为止。期间无需CPU的干预。,EOS.3=1,CSTARTADDx0,95,#include A0result EQU 0200h ; Channel A0 results A1result EQU 0210H ; Channel A1 results A2result EQU 0220H ; Channel A2 results A3result EQU 0230H ; Channel A3 results ;-ORG 01100h ; Program Start ;- RESET mov #0A
38、00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, Clear pointer,96,bis.b #BIT0+BIT1+BIT2+BIT3, 软件启动后,通道序列的采样和转换无需CPU的干预,97,;- ADC12ISR ; 当通道3转换完毕后进入该中断子程mov END,98,问题:请实验验证程序设计的正确性,如何改正?,99,举例07 单通道重复转换方式,使用采样定时器,采样时间=256ADC12CLK ,使用 ADC12IFG.0 中断,其它采用复位值,并将转换结果转存到RAM中。,SHT0x=8,采样时间=256ADC12CLK,10
39、0,#include Results EQU 0200h ; Begining of Results table ;-ORG 01100h ; Program Start ;- RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, 软件启动后,通道序列的采样和转换无需CPU的干预,101,;- ADC12ISR ; Interrupt Service Routine for ADC12mov END,102,103,举例08 通道序列单轮转换方式,使用采样定时器,采样时间=1024ADC12CLK ,使用 ADC12I
40、FG.1 中断,其它采用复位值。,通道序列定义: 通道号 结果存储 模拟输入 转换结果缓冲器 通道号 转存到 0 ADC12MEM0 A8 R51 ADC12MEM1 A9 R6,VeREF+,VeREF-,104,ADC12的模拟输入 及其多路模拟开关,A8,A9,105,#include ;-ORG 01100h ; Program Start ;- RESET mov #0A00h,SP ; Initialize stackpointermov #WDTPW+WDTHOLD, SET BREAKPOINT HERE,106,;- ADC12ISR ; Interrupt Service Routine for ADC12mov END,