模拟数字转换器的使用

第9章 模拟/数字转换器的使用 ——模拟信号采集与回放电路的设计

目标

通过本章的学习,应掌握以下知识

● 斜坡型(计数型)模拟/数字转换器的工作原理

● 逐次逼近型模拟/数字转换器(Successive-Approximation ADC,SAC )的工作原理 ● MSP430G2xx 芯片内部的模拟/数字转换模块(ADC10) ● 模拟/数字转换中的采样——保持过程 ● 实际模拟/数字转换关系的非理想

● MSP430F2xx 芯片内部的模拟/数字转换模块(ADC12)

引言

模拟/数字转换器是对模拟信号进行数字化处理所需要的另外一种接口。使用模拟/数字转换器能够将幅度连续、时间连续的模拟信号,转换为幅度离散、时间离散的数字信号,建立起模拟信号数字化处理的基础。相对基于运算放大器实现数字/模拟转换器的工作原理,模拟/数字转换器的工作原理比较复杂。虽然微控制器芯片对其外围模块的控制都是通过访问相关寄存器来实现,但是了解具体电路的工作过程将能够更加清晰地理解不同的寄存器配置条件下的工作特点,更好地使用这些外围模块。

MSP430系列微控制器中包含模拟/数字转换模块具有多种类型,而且具有不同的技术指标。本章分别介绍包含在MSP430G2231芯片内部,具有10位分辨率的模拟/数字转换模块(ADC10);以及包含在MSP430F2619芯片内部,具有12位分辨率的模拟/数字转换模块(ADC12)。

如果使用MSP430F2619微控制器芯片,使用12位分辨率模拟/数字转换模块(ADC12)将能够把信号产生器输出的正弦信号转换为对应的数字信号,使用上一章学习的数字/模拟转换模块(DAC12)将能够把数字信号转换为模拟信号。通过示波器观察数字/模拟转换模块(DAC12)输出的信号波形,这时将可以发现恢复的正弦信号波形是由许多小台阶所组成。提高信号产生器输出正弦信号的频率,将可以发现波形失真加大,直到波形变得杂乱无章;继续提高信号产生器输出正弦信号的频率,将会发现在一些频率点上,示波器又将出现一个完整的正弦信号波形。

1

9.1 模拟/数字转换器的工作原理

MSP430系列微控制器中的模拟/数字转换器涉及多种类型、且具有不同的技术指标。例如MSP430G2231芯片具有10位分辨率的模拟/数字转换模块(ADC10),MSP430F2619芯片具有12位分辨率的模拟/数字转换模块(ADC12),有的芯片还具有24位分辨率的模拟/数字转换模块。本节介绍模拟/数字转换器的基本工作过程,以便了解决定其性能的因素。

图9.1为MSP430G2231芯片和MSP430F2619芯片中的模拟/数字转换模块的工作原理图。这种类型的模拟/数字转换器把数字/模拟转换器(DAC )作为其电路的组成部分。

V A

模拟/数字转换结果

图9.1 模拟/数字转换器的工作原理图

完成模拟/数字转换过程需要一个“启动信号”来触发转换电路进行初始化。这个初始化使图中的“计数器”输出的“数字量”为全零,使得图中的“DAC ”输出模拟电压V AX 为0V ,这样模拟电压V AX 将小于输入模拟电压V A ,因此图中“比较器”将输出高电平。

当“比较器”输出高电平,控制电路将在“时钟信号”的驱动下不断修正“计数器”输出的“数字量”。最简单的“数字量”修正方式为每来一个时钟脉冲其内容加1。“计数器”输出的“数字量”不断进行地加1操作,使得模拟电压V AX 不断地增加。

模拟电压V AX 小于输入模拟电压V A 时,“比较器”将输出高电平;模拟电压V AX 大于输入模拟电压V A 时,“比较器”将输出低电平。一旦“比较器”输出为低电平, “计数器”输出的“数字量”将停止变化,同时控制电路输出“转换结束信号”。这时就可以读取由“计数器”输出的“模拟/数字转换结果”。

如果“计数器”输出 “数字量”的变化方式为每来一个时钟脉冲其内容加1,直到DAC 输出的模拟电压V AX 大于输入模拟电压V A ,这样模拟电压V AX 的波形形状为斜波,因此称此类型模拟/数字转换器为斜坡型模拟/数字转换器,也称为计数型模拟/数字转换器。

输入模拟电压V A 的比较基准V AX 是一个准模拟电压,因为V AX 是数字/模拟转换器的输出电压。输入模拟电压V A 能够在从0V 到满量程之间取无数多个数值,数字/模拟转换器的输出电压V AX 只能取有限数量的离散值,这就意味着小范围变化的输入模拟电压V A 的转换结果可能是相同的。内部“DAC ”的分辨率决定了这种模拟/数字转换器的分辨率。

斜坡型模拟/数字转换器转换时间不确定,输入模拟电压V A 越大,完成转换所需要的时间越长。如果输入模拟电压V A 刚好低于满刻度电压将会出现最大转换时间,即“计数器”输出 “数字量”到最后一步才能结束转换过程。对于一个N 位分辨率的斜坡型模拟/数字转换器,最大转换时间可以由下式计算。 2

t C (max )=(2N - 1)时钟周期 (9-1) 对于一个10位分辨率的模拟/数字转换器,如果时钟信号的周期为1us ,这时 t C (max )=(210 - 1)× 1 us = 1023 us 斜坡型模拟/数字转换器工作速度低,但是利用它非常容易说明模拟/数字转换器的工作原理。MSP430G2231芯片和MSP430F2619芯片内部采用逐次逼近型模拟/数字转换器(Successive-Approximation ADC,SAC )来提高转换速度。它的“计数器”输出 “数字量”的修正采用逐位修改。图9.2给出一个4位这种类型模拟/数字转换器的原理图和时序图。

0123456789

图9.2 逐次逼近型模拟/数字转换器的工作原理图

在图9.2中,设DAC 的步长为1V ,这样输入4位数据的权值分别为8V 、4V 、2V 和1V ;再假设输入待转换的模拟电压V A =10.4V。 在t 0时刻转换过程开始,寄存器输出清零,即Q 3 =Q2=Q1=Q0=0,表示为Q=0000。这使得V AX =0V,由于V AX

在t 4时刻,控制信号使得寄存器的Q 2置位,这时Q=1100。这使得V AX =12V,由于V AX > VA ,这时比较器输出将变为低电平。由于比较器输出为低电平,在t 5时刻,控制信号使得寄存器的Q 2清零,这时Q=1000,这使得V AX =8V。 在t 6时刻,控制信号使得寄存器的Q 1置位,这时Q=1010。这使得V AX =10V,由于V AX VA ,因此比较器输出为低电平。由于比较器输出为低电平,在t 9时刻,控制信号使得寄存器的Q 0清零,这时Q=1010。这使得V AX =10V。到此时,转换结束,转换结果为1010。 逐次逼近型模拟/数字转换器的控制电路逐个将寄存器的每1位置位,并判断该位是否应该置位。这样它比起斜坡型模拟/数字转换器每次仅加1的过程需要的时间小得多,而且转换时间固定,但是逐次逼近型模拟/数字转换器内部控制电路要复杂得多。 模拟/数字转换器还有其它的类型。例如并行比较型在1个时钟周期就可以完成转换,但是电路更复杂;积分型的精度高,且抗干扰能力强,但是转换速度慢;Σ /Δ调制型电路复杂,但是可以获得高的精度,一些MSP430x2xx 芯片包含这种类型的模拟/数字转换器,在数据手册中被称为SD16,或者SD24,分别具有16,或者24位分辨率。

3

9.2 模拟/数字转换模块(ADC10)

9.2.1 模拟/数字转换模块(ADC10)

MSP430G2231芯片内部包含10位模拟/数字转换模块(ADC10)。该模块的工作原理属于逐次逼近型模拟/数字转换器(SAC ),具有10位分辨率和200ksps 的转换速率。模拟/数字转换模块(ADC10)的组成方框图如图9.3所示。

图9.3 模拟/数字转换模块(ADC10)的组成方框图

图9.3所示的方框图用于说明MSP430G2xx 系列芯片的模拟/数字转换模块(ADC10)的工作,该系列不同型号的芯片可能会存在着一些差异。 通过多个通道,多个准备转换的模拟电压能够进入模拟/数字转换模块(ADC10)。图中的模拟电压输入通道A0~A7、A12~A15分别可以与芯片的管脚相连接,模拟输入电压还包括芯片电源AV CC 以及芯片内部温度传感器的输出电压。对于MSP430G2231芯片, A0~A7分别对应芯片管脚P1.0~P1.7,A12~A15没有对应的芯片管脚。 4

所有的输入模拟电压通过多路选择开关共用一个模拟/数字转换器,因此1次只能完成1路模拟电压的转换,不过具有多个模拟电压输入管脚可以为电路板的设计提供方便。

在信号“INCHx ”的控制下,多路选择开关选择1个通道的模拟电压进行采样。信号“CONSEQx ”能够实现对所有模拟输入电压的进一步的控制,控制内容包括完成一个通道输入电压的一次转换、按照通道的顺序完成数个通道输入电压的一次转换、一个通道输入电压的重复转换以及按照通道的顺序完成数个通道输入电压的重复转换。通过多路选择开关的模拟电压将进入采样-保持电路“Sample and Hold”,这里将幅度连续、时间连续的模拟电压转换为幅度连续、时间离散的信号。

采样-保持电路“Sample and Hold”和模拟/数字转换器“10-bit SAR”共用一个时钟信号。时钟信号源可以是模拟/数字转换模块(ADC10)内部时钟信号源“ADC10OSC ”,也可以是MSP430芯片的系统时钟信号ACLK 、MCLK 或者SMCLK 。4种时钟信号源的选择通过信号“ADC10SSELx ”实现。内部时钟信号源ADC10OSC 属于RC 振荡器,工作频率约6MHz ,具体工作频率参考芯片的技术手册,也可以通过输出管脚ADC10CLK 进行测量。

时钟信号还能够利用分频电路“Divider /1„/8”,在信号“ADC10DIVx ”控制下,实现直接通过,或者从2到8的分频。

采样触发信号为图中信号“SHI ”的上升边沿。触发源可以是ADC10控制寄存器0(ADC10CTL0)的位ADC10SC 、定时器A (TimerA )的捕捉/比较模块1(CCR1)的输出、定时器A (TimerA )的捕捉/比较模块0(CCR0)的输出,或者定时器A (TimerA )的捕捉/比较模块2(CCR2)的输出。信号“SHSx ”完成采样触发信号的选择。 信号“ENC ”使能选择的采样触发信号,即使能模拟/数字转换模块(ADC10)的工作。信号“ISSH ”能够实现采样触发信号的上升沿触发,或者下降沿触发。 信号“SHI ”的上升边沿触发采样计数器“Sample Timer ”的计数工作。在信号“ADC10SHTx ”的控制下,这个计数器实现对时钟ADC10CLK ,范围为4、8、16或者64的计数过程。在计数过程中,信号“SAMPCON ”保持高电平;完成计数后,该信号为低电平。信号“SAMPCON ”处于高电平状态,采样-保持电路“Sample and Hold”对输入的模拟电压进行采样;信号“SAMPCON ”处于低电平状态,采样-保持电路“Sample and Hold”维持采样电压的数值。采样-保持过程的等效电路如图9.4所示。

Vs

图9.4 采样-保持过程的等效电路图

图中的V S 和R S 为准备进行模拟/数字转换的模拟信号等效电路,V pin 为施加到MSP430芯片管脚的模拟电压值。R mux 为包括多路开关导通电阻在内的芯片内部电阻,C sample 为采样电容。采样时,“采样-保持开关”置“采样”位置,模拟电压向采样电容Csample 充电;

5

采样结束以后,“采样-保持开关”置“保持”位置,由于运算放大器具有非常高的输入电阻,因此采样电容Csample 上的电压在后面的工作期间可以维持不变。 即使不考虑信号源内阻R S 的影响,芯片内部电阻R mux (数据手册给出它的最大值为2k Ω),采样电容C sample (数据手册给出它的最大值为27pF )组成的RC 电路中电容的充电需要一定的时间。信号“SAMPCON ”持续时间的可控制为用户在转换结果的精确与转换速率之间提供了选择的可能。 采样过程结束以后,即信号“SAMPCON ”变为低电平,模拟/数字转换器“10-bit SAR”的转换过程将启动。这个过程需要13个时钟ADC10CLK 周期的固定时间。时钟ADC10CLK 存在一个最高频率,这需要参考芯片的数据手册。“Divider /1„/8”分频电路可以用来降低时钟源的输出频率。 模拟/数字转换器“10-bit SAR”属于逐次逼近型模拟/数字转换器(SAC ),它的工作原理图如图9.2所示。转换获得的数字量来源于待转换的模拟电压与一个数字/模拟转换器输出电压进行比较的结果,模拟/数字转换器“10-bit SAR ”上的连接端“V R+”和“V R -”为这个数字/模拟转换器的参考电压输入端。 参考电压接线端“V R -”可以在模拟地“AV SS ”与参考电源地“V REF - / VeREF -”之间选择。参考电压接线端“V R +”可以在模拟电源“AV CC ”、内部参考电源“V REF+”、外部参考电源“Ve REF +”以及经过缓冲电路以后的外部参考电源之间进行选择。信号“SREFx ”实现上述各种选择。 模拟/数字转换模块(ADC10)内部包含参考电压源“1.5V or 2.5V Reference”。参考电压源可以提供2种参考电压,1.5V 或者2.5V ,输出电压的选择通过信号“2_5V”实现。信号“REFON ”用来控制这个内部参考电压源工作与否,在不使用这个参考电压源的情况下,停止它的工作可以降低芯片的功耗。信号“REFBURST ”能够使得参考源仅在模拟/数字转换过程中激活。这个参考电压也可以通过管脚送出芯片,供其它器件使用。 模拟/数字转换器“10-bit SAR”将模拟电压转换为数字量,输出具有2种格式,普通2进制格式,或者2进制补码格式。式(9-2)为采用普通2进制格式时的输出数字量与输入模拟电压的关系式。 N ADC = 1023×(V IN - VR -)/(V R+ - VR -) (9-2) 数字量的满刻度值为0x3ff 。信号“ADC10ON ”用来打开,或者停止模拟/数字转换器“10-bit SAR ”的工作。信号“BUSY ”用来显示模拟/数字转换的进行过程是否结束。模拟/数字转换结果被存储在寄存器“ADC10MEM ”。 模块“Data Transfer Controller”用来自动地将模拟/数字转换结果存储在MSP430芯片的存储器之中。当完成相关的设置以后,转换结果的存储不需要CPU 的干预,这样可以提高数据传输速率,间接地加快了对模拟电压的采样速率。 模拟/数字转换模块也提供中断能力。当完成模拟/数字转换过程,相应的中断标志将置位。即使不使用这个中断功用,利用这个标志也可以判断数字/模拟转换过程是否完成。MSP430系列微控制器的开发软件中,模拟/数字转换模块的中断矢量名称为“ADC10_VECTOR”。 6

9.2.2 模拟/数字转换模块(ADC10)的寄存器

模拟/数字转换模块(ADC10)的寄存器分为3类。第一类为控制模拟/数字转换工作的寄存器,包括ADC10输入使能寄存器0和1,ADC10AE0和ADC10AE1,ADC10控制寄存器0和1,ADC10CTL0和ADC10CTL1;第二类为存储模拟/数字转换结果的寄存器,ADC10MEM ;第三类涉及模拟/数字转换结果的传输,包括ADC10数据传输控制寄存器0和1,ADC10DTC0和ADC10DTC1,数据传输起始地址寄存器,ADC10SA 。 本小节只讨论模拟/数字转换模块(ADC10)的寄存器前两类中每一位的功能,这些功能已经足够满足通常的需要。第三类寄存器涉及如何将模拟/数字转换的结果直接存储到数据存储器,不需要通过CPU 以加快数据的采样率。作为一本入门级书籍,为了突出重点,同时减少篇幅,这里不涉及这部分内容。有兴趣的读者可以参考TI 公司提供的“MSP430x2xx Family User’s Guide”的相关内容。

ADC10AE0x :Bit7~Bit0,模拟输入管脚使能位。 0 不使能 1 使能

BIT0对应模拟电压输入管脚A0,BIT1对应模拟电压输入管脚A1,其它依次类推。

ADC10AE1x :Bit7~Bit4,模拟输入管脚使能位。 0 不使能 1 使能

BIT4对应模拟电压输入管脚A12,BIT5对应模拟电压输入管脚A13,BIT6对应模拟电压输入管脚A14,BIT7对应模拟电压输入管脚A15。

Reserved :Bit3~Bit0,当前没有使用,保留。 MSP430G2231芯片由于没有对应的管脚,因此不存在这个寄存器(ADC10AE1)。

7

注意:ADC10控制寄存器0(ADC10CTL0)中有阴影位的调整必须在该寄存器的位ENC

状态为0的情况下才能进行。 SREFx :参考电源选择控制位

Bit15 Bit14 Bit13 SREF2 SREF1 SREF0 0 0 0 V R+ = VCC 0 0 1 V R+ = VREF+

0 1 0 V R+ = VeREF+ 0 1 1 V R+ = 缓冲Ve REF+ 1 0 0 V R+ = VCC 1 0 1 V R+ = VREF+ 1 1 0 V R+ = VeREF+ 1 1 1 V R+ = 缓冲Ve REF+ ADC10SHx :采样-保持时间选择控制位 Bit14 Bit13

ADC10SHT 1 ADC10SHT0 0 0 0 1 1 0 1 1 ADC10SR :采样速率选择控制位 0 最高200ksps 1 最高50ksps REFOUT :参考源输出控制位 0 关闭 1 打开 8

V R - = VSS

V R - = VSS V R - = VSS V R - = VSS

V R - = VREF - / VeREF - V R - = VREF - / VeREF - V R - = VREF - / VeREF - V R - = VREF - / VeREF -

4个ADC10CLK 持续时间 8个ADC10CLK 持续时间 16个ADC10CLK 持续时间 64个ADC10CLK 持续时间

REFBURST :参考源间断输出控制位 0 参考源缓冲电路连续工作 1 参考源缓冲电路仅在模拟/数字转换的过程时工作 MSC :进行多次模拟/数字转换控制位 0 每次模拟/数字转换需要触发 1 仅第1次模拟/数字转换需要触发

该位的功能仅在顺序通道,或者重复模拟/数字转换模式下才有效。

REF2_5V:内部参考源输出电压选择控制位 0 1.5V 1 2.5V

REFON :参考源工作控制位 0 关闭 1 打开

ADC10ON :模拟/数字转换模块(ADC10)工作控制位 0 关闭 1 打开

ADC10IE :模拟/数字转换模块(ADC10)中断使能控制位 0 不使能 1 使能

ADC10IFG :模拟/数字转换模块(ADC10)中断标志 0 无中断申请 1 有中断申请

当完成模拟/数字转换模块(ADC10)中断服务程序,该位可以自动清零,也可以由用户软件清零。

ENC :模拟/数字转换模块(ADC10)转换使能控制位 0 不使能 1 使能

ADC10控制寄存器0(ADC10CTL0)和ADC10控制寄存器1(ADC10CTL1)中有阴影的位的调整必须在位ENC 状态为0的情况下才能进行。

ADC10SC :模拟/数字转换模块(ADC10)转换启动控制位 0 不启动 1 启动 用户软件置位该位将启动模拟/数字转换模块(ADC10)的工作。该位可以自动清零,也可以由用户软件清零。

9

注意:ADC10控制寄存器1(ADC10CTL1)中有阴影位的调整必须在ADC10控制寄存

器0(ADC10CTL0)的位ENC 状态为0的情况下才能进行。

INCHx :模拟电压输入通道选择控制位

Bit15 Bit14 Bit13 Bit12 INCH3 INCH2 INCH1 INCH0 0 0 0 0 0 0 0 1

0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1

1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 SHSx :采样-保持电路触发信号选择控制位

Bit11 SHS1 0

Bit10 SHS0 0

A0 A1 A2 A3 A4 A5 A6 A7 Ve REF+

V REF - / VeREF -

芯片内部温度传感器 (V CC -V SS )/ 2

(V CC -V SS )/ 2 或者A12 (V CC -V SS )/ 2 或者A13 (V CC -V SS )/ 2 或者A14 (V CC -V SS )/ 2 或者A15

10

ADC10CTL0的位ADC10SC 置位

0 1 定时器A (TimerA )的捕捉/比较模块1(CCR1)输出 1 0 定时器A (TimerA )的捕捉/比较模块0(CCR0)输出 1 1 定时器A (TimerA )的捕捉/比较模块2(CCR2)输出 ADC10DF :模拟/数据转换器输出数据格式控制位 0 普通2进制数据格式 1 2进制补码数据格式

ISSH :采样-保持电路触发信号反相控制位 0 不反相 1 反相

ADC10DIVx :模拟/数字转换电路时钟分频选择控制位 Bit7 Bit6 Bit5 ADC10DIV2 ADC10DIV1 ADC10DIV0 0 0 0 1 0 0 1 2

0 1 0 3 0 1 1 4 1 0 0 5

1 0 1 6

1 1 0 7 1 1 1 8

ADC10SSELx :模拟/数字转换电路时钟信号源选择控制位 Bit4 Bit3 ADC10SSEL1 ADC10SSEL0 0 0 0 1 1 0 1 1 CONSEQx :转换顺序模式选择控制位

ADC10OSC ACLK MCLK SMCLK

Bit11 Bit10 CONSEQ1 CONSEQ0 0 0 单通道,单次 0 1 顺序通道,单次 1 0 单通道,重复 1 1 顺序通道,重复

ADC10BUSY :模拟/数字转换模块(ADC10)忙标志,该位置位表示转换正在进行中 0 不工作 1 正在工作

11

9.3 模拟/数字转换模块(ADC10)检查程序

程序示例9.1可以用来检查模拟/数字转换模块(ADC10)的工作情况。这里通过管脚P1.0(A0)引入被转换的模拟电压。注意,这个模拟电压的范围为0到参考电压之间。这个模拟电压可以利用1个具有3个接线端的电位器来产生。电位器的两个固定接线端将分别与MSP430芯片的电源端和接地端相连接,可变电阻端输出模拟电压。电位器的阻值推荐值为10k Ω,使用三用表监视输入模拟电压数值。

程序示例9.1

// 程序名称:adc10_examine

// 程序功能:模拟/数字转换模块 ADC10 检测程序 // 使用芯片:MSP430G2231-14 N

// 模拟电压输入管脚:P1.0 / A0(Pin2) // 模拟/数字转换的结果使用数码管显示

#include // 包含名称定义和对应地址或数据的头函数 void delay_1s(void);

// 声明 1s 延迟函数

void seg7_1ms(unsigned char seg7_data); // 声明驱动 1 位数码管的驱动函数 void seg7_3ms(unsigned char seg7_data2, unsigned char seg7_data1, unsigned char seg7_data0); // 声明驱动 3 位数码管的驱动函数 const unsigned char decoder_seg7[18] // 声明显示代码

={0xee,0x82,0xdc,0xd6,0xb2,0x76,0x7e,0xc2,0xfe,0xf6,0xde,0x3e,0x6c,0x9e, 0x7c,0x78,0x00,0xff};

void main(void) {

unsigned int data_adc10; // 声明模拟 / 数字转换结果存储变量 unsigned char data_seg7_2, data_seg7_1, data_seg7_0;

// 声明每一位数据显示变量

WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗

P1SEL&=0x3f; // 设置P1.7和P1.6管脚为数字输入/输出管脚 P1DIR|=0xc0; // 设置 P1.7 和 P1.6 管脚为输出管脚 adc10_begin( ); // ADC10 配置 while(1) // 重复执行 {

ADC10CTL0|=ADC10SC; // ADC 转换软件启动控制位使能 while((ADC10CTL1&0x01)==1); // 等模拟 / 数字转换结束

// 主函数

// 共阴极数码管显示代码

void adc10_begin(void); // 声明 ADC10 配置函数

12

data_adc10=ADC10MEM; // 读取转换结果 data_seg7_0=data_adc10&0x000f; data_seg7_1=(data_adc10&0x00f0)>>4; data_seg7_2=(data_adc10&0x0300)>>8;

seg7_3ms(data_seg7_2, data_seg7_1, data_seg7_0); delay_1s ( ); // 延时 } }

void adc10_begin(void) {

// 配置 ADC10 模块模拟电压输入管脚

P1SEL|=BIT0; P1DIR&=~BIT0; // ADC10 模块相关寄存器配置

ADC10CTL0&=~ENC; // ADC10AE0|=BIT0; ADC10CTL0|=SREF_1; ADC10CTL0|=ADC10SHT_0; ADC10CTL0|=ADC10SR; ADC10CTL0|=REFOUT; ADC10CTL0&=~REFBURST; // ADC10CTL0&=~MSC; ADC10CTL0|=REF2_5V; // ADC10CTL0|=REFON; ADC10CTL0|=ADC10ON; // ADC10 ADC10CTL0&=~ADC10IE; // ADC10CTL1|=INCH_0; ADC10CTL1|=SHS_0; ADC10CTL1&=~ADC10DF; // ADC10 ADC10CTL1&=~ISSH; ADC10CTL1|=ADC10DIV_0; ADC10CTL1|=ADC10SSEL_2; ADC10CTL1|=CONSEQ_0; // ADC10CTL0|=ENC; }

// ADC10 配置函数 // 设置 P1.0 管脚为外围模块输入 / 输出管脚 // 设置 P1.0 管脚为输入管脚 调整 ADC10CTLx,位 ENC 必须清零 // 使能 A0 通道转换 // 参考电压选择:VR+ = VREF+

VR- = VSS

// 采样-保持时间选择:4 ADC10CLK // 采样速率选择:50ksps // 参考电源输出打开 参考电源连续工作 // 每次转换都需要触发 内部参考电压选择:2.5V // 内部参考电源打开 模块打开 不使能 ADC10 模块中断 // 模拟电压输入通道选择:A0

// 采样触发信号选择:ADC10SC/ADC10CTL0 模块输出数据格式选择:线性二进制 // 采样-保持电路触发信号不反相 // ADC10CLK 时钟源分频选择:1 // ADC10CLK 时钟源选择:MCLK 转换模式选择:单通道,单次 // ADC10 模块使能 13

在程序示例9.1中,模拟/数字转换模块(ADC10)的配置使用函数

void adc10_begin(void) // ADC10 配置函数

来实现。使用函数可以简化主函数的结构。这个函数内部对涉及的3个寄存器的每种功能分别进行配置,这样既能加深对相关内容的理解,也方便将这部分内容用于其它地方。 类似于前面出现的程序示例,程序示例9.1只声明了需要使用的函数,除过模拟/数字转换模块(ADC10)的配置函数,其它函数的原型并没有写出。 主函数在完成所有配置工作以后,重复进行对A0模拟电压输入通道(P1.0)输入的模拟电压完成模拟/数字转换、显示转换结果。模拟/数字转换工作的启动通过置位ADC10控制寄存器0(ADC10CTL0)的位ADC10SC 来实现。完成模拟/数字转换工作的启动以后,位ADC10SC 能够自动清零,因此程序中不需要完成该位清零的语句。 模拟信号的采样以及到数字量的转换需要一段时间,循环语句 while((ADC10CTL1&0x01)==1); // 等模拟 / 数字转换结束

通过检测ADC10控制寄存器1(ADC10CTL1)位BUSY 的状态来判断模拟/数字转换工作是否完成。在包括采样、模拟/数字转换的整个过程中,位BUSY 置位,因此程序重复执行这条语句,等待过程的结束。转换过程完成以后,位BUSY 自动清零,循环语句结束执行。 当模拟/数字转换工作完成以后,从模拟/数字转换模块(ADC10)的转换结果寄存器ADC10MEM 就能够自动获得转换结果。使用程序示例9.1,MSP430G2231芯片模拟/数字转换模块(ADC10)的测量结果如表9.1所示。

理想转换结果由三用表测量得芯片管脚P1.0的模拟电压值,通过下式计算获得 N ADC = 1023×V IN / 2.5 (9-3) 当输入模拟电压大于2.5V ,转换结果将保持0x3ff 数值不变。

测量结果显示,实际转换结果与理想数值之间存在误差。模拟/数字转换特性不是线性,当输入模拟电压较小时,实际转换结果大于理想转换结果;当输入模拟电压较大时,实际转换结果小于理想转换结果。 14

9.4 模拟/数字转换模块(ADC12)

9.4.1 模拟/数字转换模块(ADC12)

MSP430F2619芯片内部包含模拟/数字转换模块(ADC12)。该模块的工作原理也属于逐次逼近型模拟/数字转换器(SAC ),也具有200ksps 的转换速率,但是它具有12位分辨率。模拟/数字转换模块(ADC12)的组成方框图如图9.5所示。

图9.5 模拟/数字转换模块(ADC12)的组成方框图

由于都是采用逐次逼近型模拟/数字转换器(SAC ),模拟/数字转换模块(ADC12)与模拟/数字转换模块(ADC10)的组成基本相同,但是仍然存在一些差别。 图中的模拟电压输入通道A0~A7分别可以与芯片的管脚相连接,模拟输入电压还包括芯片电源AV CC 以及芯片内部温度传感器的输出电压。通道A12~A15现在不存在,对应的多路选择器触点直接与芯片接地(GND )相连接。

15

在信号“INCHx ”的控制下,多路选择开关选择1个通道的模拟电压进行采样。虽然没有画在一起,信号“CONSEQx ”仍然用来实现单次单通道、单次顺序通道、重复单通道和重复顺序通道这样的通道转换模式的选择。

采样-保持电路“Sample and Hold”和模拟/数字转换器“12-bit SAR”仍然共用一个时钟信号“ADC12CLK ”。时钟信号源同样还是模拟/数字转换模块内部时钟信号源“ADC10OSC ”、MSP430芯片的系统时钟信号ACLK 、MCLK 或者SMCLK ,并通过信号“ADC12SSELx ”实现信号源的选择。为满足对时钟频率数值的要求,被选中的时钟信号利用分频电路“Divider /1„/8”,在信号“ADC12DIVx ”控制下,实现直接通过,或者从2到8的分频。

采样触发信号源有一些改变,仍然使用ADC12控制寄存器0(ADC12CTL0)的位ADC12SC ,或者定时器A (TimerA )的捕捉/比较模块1(CCR1)的输出,更换使用了定时器B (TimerB )的捕捉/比较模块0(CCR0)的输出,或者定时器B (TimerB )的捕捉/比较模块2(CCR2)的输出。信号“SHSx ”完成采样触发信号的选择。 信号“ENC ”使能选择的采样触发信号,即使能模拟/数字转换模块(ADC12)的工作。信号“ISSH ”能够实现采样触发信号的同相输出,或者反相输出。

信号“SHI ”的上升边沿用来触发计数器“Sample Timer”的计数工作,在规定范围内进行计数的过程中,它输出高电平信号;计数结束后,它则输出一个低电平信号。输出为高电平时,模拟信号被采样;输出为低电平时,采样信号被保持,这个期间完成模拟电压到数字量的转换。信号“SHI ”也可以直接控制采样过程,同样在这个信号处于高电平期间进行采样。直接使用信号“SHI ”控制采样过程使得程序设计者能够通过控制信号“SHI ”高电平持续时间来控制采样时间,信号“SHI ”的下降沿将触发转换过程,转换过程自动使用时钟信号“ADC12CLK ”。

采样计数器“Sample Timer”以信号“ADC12CLK ”为计数时钟,在信号“SHTx ”的控制下,实现范围为4~1024的计数过程。采用更长时间的计数过程是由于现在的满量程电压分辨率从1/1023上升到1/4095,采样电容需要被充电到更接近实际的模拟电压数值,因此需要更多的时间。 模拟/数字转换模块(ADC12)内部也包含参考电压源“1.5V or 2.5V Reference”。这个参考电压源的使用与模拟/数字转换模块(ADC10)内部参考电压源的使用方法相同,但是这里推荐在参考电源输出管脚V REF+和模拟地管脚AV SS 之间添加一个10uF 和一个0.1uF 的并联电容,因为现在由于分辨率提高使得电路对干扰更加敏感。 模拟/数字转换器“12-bit SAR”将模拟电压转换为数字量。模拟/数字转换模块(ADC12)提供了16个缓冲存储器ADC12MEM0~ADC12MEM15,它们分别具有各自的控制寄存器ADC10CTLx ,由此能够配置缓冲存储器存储的转换结果。 模拟/数字转换模块(ADC12)的中断矢量,ADC12_VECTOR,为该模块的18个中断信号源所共同使用。这些中断信号源就包括向任何一个缓冲存储器,ADC12MEM0~ADC12MEM15,写入数据所产生的中断信号。为利用一个中断矢量服务众多的中断信号源,模块具有一个专门的寄存器,中断矢量寄存器(ADC12IV )。 16

9.4.2 模拟/数字转换模块(ADC12)的寄存器

模拟/数字转换模块(ADC12)的寄存器也分为3类。第一类为控制模拟/数字转换工作的寄存器,包括ADC12控制寄存器0和1,ADC10CTL2和ADC12CTL1;第二类为存储模拟/数字转换结果的寄存器和对应的控制寄存器,ADC12MEMx 和ADC12MCTLx ,这里的x 的取值范围为0~15;第三类涉及中断的寄存器,包括ADC12中断使能寄存器,ADC12IE ,中断标志寄存器,ADC12IFG ,中断矢量寄存器,ADC12IV ,。

注意:ADC12控制寄存器0(ADC12CTL0)中有阴影的位的调整必须在该寄存器的位ENC

状态为0的情况下才能进行。

SHT1x 和SHT0x 用来选择采样时间,单位为ADC12CLK 的周期。其中SHT1x 用来控制缓冲存储器ADC12MEM8~ADC12MEM15对应的模拟电压对应的采样时间;SHT0x 用来控制缓冲存储器ADC12MEM0~ADC12MEM7对应的模拟电压对应的采样时间。SHT1x 和SHT0x 的取值对应的采样时间如表9.2所示。

17

MSC :进行多次模拟/数字转换控制位 0 每次模拟/数字转换需要触发 1 仅第1次模拟/数字转换需要触发

该位的功能仅在顺序通道,或者重复模拟/数字转换模式下才有效。

REF2_5V:内部参考源输出电压选择 0 1.5V 1 2.5V

REFON :参考源开关控制位 0 关闭 1 打开

ADC12ON :模拟/数字转换模块(ADC12)工作控制位 0 关闭 1 打开

ADC10OVIE :模拟/数字转换结果寄存器,ADC12MEMx ,溢出中断使能位 0 不使能 1 使能

当模拟/数字转换结果寄存器,ADC12MEMx ,的转换结果尚没有被读取,又有一次转换结果再被写入能够产生中断信号。该位使能这个中断。

ADC10TOVIE :模拟/数字转换时间溢出中断使能位 0 不使能 1 使能

当完成模拟/数字转换模块(ADC10)中断服务程序,该位可以自动清零,也可以由用户软件清零。

ENC :模拟/数字转换模块(ADC10)转换使能 0 不使能 1 使能

ADC10控制寄存器0(ADC10CTL0)和ADC10控制寄存器1(ADC10CTL1)中有阴影的位的调整必须在位ENC 状态为0的情况下才能进行。

ADC10SC :模拟/数字转换模块(ADC10)转换启动控制位 0 不启动 1 启动 用户软件置位该位将启动模拟/数字转换模块(ADC10)的工作。该位可以自动清零,也可以由用户软件清零。 18

注意:ADC12控制寄存器1(ADC12CTL1)中有阴影的位的调整必须在ADC12控制寄存

器0(ADC12CTL0)的位ENC 状态为0的情况下才能进行。

CSTARTADDx :转换开始地址选择控制位。

转换开始地址选择控制位CSTARTADDx 的内容0x0~0xf 依次对应模拟/数字转换结果的寄存器ADC12MEM0~ADC12MEM15。这个地址既可以是单次转换结果的存储地址,也可以是顺序转换的首个模拟输入电压通道转换结果的存储地址。

模拟/数字转换结果的寄存器ADC12MEM0~ADC12MEM15与输入模拟电压通道之间没有关系。任何一个模拟电压输入通道的转换结果可以存储在任意一个模拟/数字转换结果的寄存器ADC12MEMx 之中。

SHSx :采样-保持电路触发信号选择

Bit11 Bit10 SHS1 SHS0 0 0 ADC10CTL0的位ADC10SC 置位 0 1 定时器A (TimerA )的捕捉/比较模块1(CCR1)输出 1 0 定时器B (TimerB )的捕捉/比较模块0(CCR0)输出 1 1 定时器B (TimerB )的捕捉/比较模块1(CCR2)输出 SHP :采样时间控制信号SAMPCON 选择位 0 控制信号SAMPCON 直接来源于采样-保持电路触发信号 1 控制信号SAMPCON 来源于采样计数器的输出 ISSH :采样-保持电路触发信号反相控制位 0 不反相 1 反相 ADC10DIVx :模拟/数字转换电路时钟分频选择。ADC10DIVx 的内容0~7依次对应1~8的分频比例。

19

ADC10SSELx :模拟/数字转换电路时钟信号选择 Bit4 Bit3 ADC10SSEL1 ADC10SSEL0 0 0 0 1 1 0 1 1 CONSEQx :转换顺序模式选择

ADC10OSC ACLK MCLK SMCLK

Bit11 Bit10 CONSEQ1 CONSEQ0 0 0 单通道,单次 0 1 顺序通道,单次 1 0 单通道,重复 1 1 顺序通道,重复

ADC10BUSY :模拟/数字转换模块(ADC10)忙标志,表示转换正在进行 0 不工作 1 正在工作

寄存器名称ADC12MEMx 中的x 可以取0~15中任意一个值,分别用来表示16个转换结果存储寄存器。模拟数字转换结果以普通2进制格式存储在寄存器的位11~0,其中位11为转换结果的最高位。MSP430芯片的复位对寄存器的位11~0中的内容无影响。寄存器的位15~12没有被使用,其内容总是0000。模拟/数字转换完成以后,转换结果将自动进入这个寄存器。写这个寄存器可以产生中断申请。

注意:该寄存器调整必须在ADC12CTL0的位ENC 状态为0的情况下才能进行。 20

寄存器名称ADC12MCTLx 中的x 可以取0~15中任意一个值,分别用来表示16个存储控制寄存器。每个存储控制寄存器控制对应的转换结果存储寄存器的工作,例如寄存器ADC12MCTL0控制ADC12MEM0,依次对应。

EOS :顺序转换过程结束指示位 0 过程进行 1 过程结束 SREFx :参考电源选择

Bit6 Bit5 Bit4 SREF2 SREF1 SREF0 0 0 0 V R+ = VCC V R - = VSS 0 0 1

V R+ = VREF+ V R - = VSS 0 1 0 V R+ = VeREF+ V R - = VSS 0 1 1 V R+ = 缓冲Ve REF+ V R - = VSS

1 0 0 V R+ = VCC V R - = VREF - / VeREF - 1 0 1 V R+ = VREF+ V R - = VREF - / VeREF - 1 1 0 V R+ = VeREF+ V R - = VREF - / VeREF - 1 1 1 V R+ = 缓冲Ve REF+ V R - = VREF - / VeREF -

INCHx :模拟电压输入通道选择

Bit3 Bit2 Bit1 Bit0 INCH3 INCH2 INCH1 INCH0 0 0 0 0 A0

0 0 0 1 A1 0 0 1 0 A2 0 0 1 1 A3 0 1 0 0 A4 0 1 0 1 A5 0 1 1 0 A6 0 1 1 1 A7 1 0 0 0 Ve REF+

1 0 0 1 V REF - / VeREF -

1 0 1 0 芯片内部温度传感器 1 0 1 1 (V CC -V SS )/ 2 1 1 0 0 GND 1 1 0 1 GND 1 1 1 0 GND 1

1

1

1

GND

21

ADC12IEx :中断使能控制位 0 不使能 1 使能

ADC12IEx :中断标志指示位 0 无中断申请 1 中断申请

ADC12中断使能寄存器(ADC12IE )和ADC12中断标志寄存器(ADC12IFG )的每一位对应一个ADC12转换结果存储寄存器(ADC12MEMx )。例如位ADC12IE1和位ADC12IFG1对应寄存器ADC12MEM1。当转换结果写入寄存器ADC12MEM1,位ADC12IFG1将置位,如果位ADC12IE1被置位,这时就会产生中断。

模拟/数字转换模块(ADC12)的所有中断信号源共用1个中断矢量,ADC12_VECTOR,因此需要在进入中断服务程序之后再次判断具体的中断信号源。中断矢量寄存器ADC12IV 中位ADC12IVx 的不同取值代表了不同的中断信号源,这个取值可以用来实现具体中断信号源的判断。

表9.3给出了ADC12IVx 的取值与具体中断信号源的对应关系。

22

9.5 模拟/数字转换模块(ADC12)初始化函数

程序示例9.1可以用来检查模拟/数字转换模块(ADC10)的工作情况。更改为模拟/数字转换模块(ADC12)的初始化函数,这个程序示例就可以用来检查模拟/数字转换模块(ADC12)的工作情况。

需要注意,MSP430微控制器芯片包含的外围模块能够工作在不同的工作状态下,具体的工作状态就是靠对这些外围模块的正确配置来实现的,因此不可能给出一个适应所有要求的配置程序,需要设计者根据具体要求进行设置。

类似于程序示例9.1中的模拟/数字转换模块(ADC10)初始化函数 void adc10_begin(void) // ADC10 配置函数 这里仍然对涉及的所有寄存器的每种状态分别进行配置。这样既能加深对相关内容的理解,也方便将这部分内容用于其它地方。

23

// 函数名称:adc12_begin

// 函数功能:模拟/数字转换模块 ADC12 初始化 //

目标芯片MSP430F2619-64Pin PM

// 模拟电压输入管脚:P6.0 / A0(Pin59) // 函数参量:无 // 函数返回值:无

void adc12_begin(void) {

// 配置 ADC12 模块模拟电压输入管脚

P6SEL|=BIT0; P6DIR&=~BIT0; // ADC12 模块相关寄存器配置

ADC12CTL0&=~ENC; //

ADC12CTL0|=SHT1_4; ADC12CTL0|=SHT0_4;

ADC12CTL0&=~MSC; ADC12CTL0|=REF2_5V; // ADC12CTL0|=REFON; ADC12CTL0|=ADC12ON; // ADC12CTL0&=~ADC12OVIE; ADC12CTL0&=~ADC12TOVIE;

ADC12CTL1|=CSTARTADD_0; ADC12CTL1|=SHS_0; ADC12CTL1|=SHP; ADC12CTL1&=~ISSH; ADC12CTL1|=ADC12DIV_0; ADC12CTL1|=ADC12SSEL_2; ADC12CTL1|=CONSEQ_0; //

ADC12MCTL0|=SREF_1; ADC12MCTL0|=INCH_0;

ADC12CTL0|=ENC; }

24

// 声明 ADC12 配置函数 // 设置 P6.0 管脚为外围模块输入 / 输出管脚 // 设置 P6.0 管脚为输入管脚 注意,ADC12 模块相关寄存器配置的许多情况 // 位 ENC 必须清零

// 采样-保持时间选择:64 ADC10CLK // 每次转换都需要触发 内部参考电压选择:2.5V // 打开内部参考电源 打开 ADC12 模块

// 不使能写 ADC12MEMx 中断 // 不使能转换时间溢出中断 // 转换结果存储寄存器选择:ADC12MEM0 // 采样触发信号选择:ADC12SC/ADC12CTL0 // 采样控制信号 SAMPCON 选择:采样计数器 // 采样-保持电路触发信号不反相 // ADC12CLK 时钟源分频选择:1 // ADC12CLK 时钟源选择:MCLK 转换模式选择:单通道,单次 // 参考电压选择:VR+ = VREF+,VR- = Vss

// 模拟电压输入通道选择:A0

// ADC10 模块使能

模拟/数字转换模块(ADC12)初始化函数使用语句

ADC12CTL1|=CSTARTADD_0; // 转换结果存储寄存器选择:ADC12MEM0

指定转换结果存储器ADC12MEM0存储模拟/数字转换的结果。因此这里需要对存储控制寄存器ADC12MCTL0进行配置了。语句

ADC12MCTL0|=SREF_1; // 参考电压选择:VR+ = VREF+

VR- = Vss

ADC12MCTL0|=INCH_0; // 模拟电压输入通道选择:A0

指定模拟电压输入通道以及转换过程中参考电压的选择。 这里使用转换结果存储器ADC12MEM0来存储模拟电压输入通道A0的转换结果,事实上可以使用16个转换结果存储器ADC12MEMx 的任意一个来做这个工作。任意一个输入模拟电压的转换结果能够存储到任意一个转换结果存储器。 初始化函数中没有使能模拟/数字转换模块(ADC12)的中断,因此这里没有涉及中断使能寄存器ADC12IE 的相关内容。

9.6 模拟信号的采集与回放

MSP430F3619微控制器芯片内部包含12位分辨率的模拟/数字转换模块ADC12,12位分辨率的数字/模拟转换模块DAC12。程序示例9.2利用这两个芯片内部的外围模块,在不需要添加其它器件的情况下,完成模拟信号的采集和回放。

被采集的模拟信号可以使用实验室里的信号产生器输出的正弦电压。这里需要注意,大多数正弦信号产生器输出的默认信号是正、负对称的信号,MSP430F3619芯片的模拟/数字转换模块ADC12输入电压幅度范围为0~V REF+,只能是正电压,这需要合适地调整正弦信号产生器输出信号的幅度和直流偏移以满足微控制器芯片的要求。

回放的信号可以使用示波器进行观察。如果示波器具有2个输入信号通道,则可以使用其中的1个通道观察模拟信号源的波形,使用另一个观察MSP430F3619芯片的数字/模拟转换模块输出信号波形。

程序示例9.2

// 程序名称:adc_dac

// 程序功能:模拟信号的采集与回放 //

目标芯片MSP430F2619-64Pin PM

// 模拟电压输入管脚:P6.0 / A0(Pin59)

// DAC12_0 模拟电压输出管脚 P6.6 / DAC12_0(Pin5)

#include // 包含名称定义和对应地址或数据的头函数 void adc12_begin(void); // 声明 ADC12 配置函数 void dac12_0_begin(void); // 声明 DAC12_0 配置函数

25

int main(void) // 主函数 {

unsigned int data_adc12; // 声明模拟 / 数字转换结果存储变量 WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 adc12_begin( ); // ADC12 配置 dac12_0_begin( ); // DAC12_0 配置 while(1) // 重复执行 {

ADC12CTL0|=ADC12SC; // ADC 转换软件启动控制位使能

while((ADC12CTL1&0x01)==1); // 检测 BUSY 标志,等模拟 / 数字转换结束 data_adc12=ADC12MEM0; // 读取模拟 / 数字转换结果 DAC12_0DAT=data_adc12; // 启动数字 / 模拟转换 } }

程序示例9.2分别通过调用函数

adc12_begin( ); // ADC12 配置 dac12_0_begin( ); // DAC12_0 配置

完成MSP430F2619芯片内部的外围模块ADC12和DAC12的配置。同样,这里也没有写出这2个函数的原型。

外围模块ADC12的配置函数可以使用上一节给出的模拟/数字转换模块(ADC12)的初始化函数。外围模块DAC12的配置函数可以使用程序示例8.2中给出的模拟/数字转换模块(DAC12)的初始化函数。 模拟信号的采集过程中,通过检测“BUSY ”标志来确保模拟/数字转换过程完成以后再读取结果。数字/模拟转换过程并没有考虑输出模拟电压的建立时间。这里使用等待模拟/数字转换过程的完成时间来建立输出要求的模拟电压,实验证明这是可以的。 一个正弦信号周期如果具有10个以上的采样点,示波器就能够显示一个可以识别的信号波形。如果具有30个以上的采样点,示波器将显示一个很好的正弦信号波形。采样点之间的时间间隔(也称为采样周期,它的倒数称为采样频率)可以通过示波器测量。 当信号产生器输出的正弦信号频率很低,例如100Hz ,这时示波器显示的波形会非常的好。保持正弦信号的幅度不变,提高它的频率,当正弦信号的频率接近采样频率时,示波器显示的波形将杂乱无章。继续提高信号产生器输出正弦信号的频率,会出现一个有趣的现象,在某些频率范围,示波器又会显示一个正弦信号波形,当然这个正弦信号波形的频率与信号产生器输出正弦信号的频率并不相等,但是具有一定的关系。这种现象出现在被采样的信号频率高于采样频率的状态下,被称为频率混叠。 频率混叠在将模拟信号转换为数字信号时必须避免。采样定理,也称奈奎斯特定理,指出,采样频率需要高于被转换信号中最高频率分量的2倍。 26

虽然在模拟信号转换为数字信号的过程中混叠现象必须避免,但是它也具有实际应用价值。例如利用定时/计数器A (TimerA )测量信号频率时,对最高测量频率是有限制的。如果知道有一个高频率的信号的频率范围

B 1

9.7 小结

MSP430系列微控制器中的大部分芯片内部包含模拟/数字转换模块,这些数字/模拟转换模块具有不同的工作原理和技术指标。本章分别描述了MSP430G2231芯片和MSP430F2619芯片内部包含模拟/数字转换模块。两种芯片所包含的模拟/数字转换模块具有同样的工作原理,逐次逼近型模拟/数字转换器(SAC ),但是具有不同的分辨率,前者为10位分辨率,后者为12位分辨率。

提供10位分辨率的DAC10模拟/数字转换模块和提供12位分辨率的DAC12模拟/数字转换模块虽然都属于逐次逼近型模拟/数字转换器(SAC ),但是它们的组成、工作过程以及实现工作控制的寄存器都有明显的差别。这些差别在使用中必需注意。

MSP430系列微控制器中同样功能外围模块之间的多样性对初学者会带来一些不便,但是对于应用系统的设计将带来较大的灵活性。设计者具有较多的选择,自然能够设计出性价比更高的产品。

27

第9章 模拟/数字转换器的使用 ——模拟信号采集与回放电路的设计

目标

通过本章的学习,应掌握以下知识

● 斜坡型(计数型)模拟/数字转换器的工作原理

● 逐次逼近型模拟/数字转换器(Successive-Approximation ADC,SAC )的工作原理 ● MSP430G2xx 芯片内部的模拟/数字转换模块(ADC10) ● 模拟/数字转换中的采样——保持过程 ● 实际模拟/数字转换关系的非理想

● MSP430F2xx 芯片内部的模拟/数字转换模块(ADC12)

引言

模拟/数字转换器是对模拟信号进行数字化处理所需要的另外一种接口。使用模拟/数字转换器能够将幅度连续、时间连续的模拟信号,转换为幅度离散、时间离散的数字信号,建立起模拟信号数字化处理的基础。相对基于运算放大器实现数字/模拟转换器的工作原理,模拟/数字转换器的工作原理比较复杂。虽然微控制器芯片对其外围模块的控制都是通过访问相关寄存器来实现,但是了解具体电路的工作过程将能够更加清晰地理解不同的寄存器配置条件下的工作特点,更好地使用这些外围模块。

MSP430系列微控制器中包含模拟/数字转换模块具有多种类型,而且具有不同的技术指标。本章分别介绍包含在MSP430G2231芯片内部,具有10位分辨率的模拟/数字转换模块(ADC10);以及包含在MSP430F2619芯片内部,具有12位分辨率的模拟/数字转换模块(ADC12)。

如果使用MSP430F2619微控制器芯片,使用12位分辨率模拟/数字转换模块(ADC12)将能够把信号产生器输出的正弦信号转换为对应的数字信号,使用上一章学习的数字/模拟转换模块(DAC12)将能够把数字信号转换为模拟信号。通过示波器观察数字/模拟转换模块(DAC12)输出的信号波形,这时将可以发现恢复的正弦信号波形是由许多小台阶所组成。提高信号产生器输出正弦信号的频率,将可以发现波形失真加大,直到波形变得杂乱无章;继续提高信号产生器输出正弦信号的频率,将会发现在一些频率点上,示波器又将出现一个完整的正弦信号波形。

1

9.1 模拟/数字转换器的工作原理

MSP430系列微控制器中的模拟/数字转换器涉及多种类型、且具有不同的技术指标。例如MSP430G2231芯片具有10位分辨率的模拟/数字转换模块(ADC10),MSP430F2619芯片具有12位分辨率的模拟/数字转换模块(ADC12),有的芯片还具有24位分辨率的模拟/数字转换模块。本节介绍模拟/数字转换器的基本工作过程,以便了解决定其性能的因素。

图9.1为MSP430G2231芯片和MSP430F2619芯片中的模拟/数字转换模块的工作原理图。这种类型的模拟/数字转换器把数字/模拟转换器(DAC )作为其电路的组成部分。

V A

模拟/数字转换结果

图9.1 模拟/数字转换器的工作原理图

完成模拟/数字转换过程需要一个“启动信号”来触发转换电路进行初始化。这个初始化使图中的“计数器”输出的“数字量”为全零,使得图中的“DAC ”输出模拟电压V AX 为0V ,这样模拟电压V AX 将小于输入模拟电压V A ,因此图中“比较器”将输出高电平。

当“比较器”输出高电平,控制电路将在“时钟信号”的驱动下不断修正“计数器”输出的“数字量”。最简单的“数字量”修正方式为每来一个时钟脉冲其内容加1。“计数器”输出的“数字量”不断进行地加1操作,使得模拟电压V AX 不断地增加。

模拟电压V AX 小于输入模拟电压V A 时,“比较器”将输出高电平;模拟电压V AX 大于输入模拟电压V A 时,“比较器”将输出低电平。一旦“比较器”输出为低电平, “计数器”输出的“数字量”将停止变化,同时控制电路输出“转换结束信号”。这时就可以读取由“计数器”输出的“模拟/数字转换结果”。

如果“计数器”输出 “数字量”的变化方式为每来一个时钟脉冲其内容加1,直到DAC 输出的模拟电压V AX 大于输入模拟电压V A ,这样模拟电压V AX 的波形形状为斜波,因此称此类型模拟/数字转换器为斜坡型模拟/数字转换器,也称为计数型模拟/数字转换器。

输入模拟电压V A 的比较基准V AX 是一个准模拟电压,因为V AX 是数字/模拟转换器的输出电压。输入模拟电压V A 能够在从0V 到满量程之间取无数多个数值,数字/模拟转换器的输出电压V AX 只能取有限数量的离散值,这就意味着小范围变化的输入模拟电压V A 的转换结果可能是相同的。内部“DAC ”的分辨率决定了这种模拟/数字转换器的分辨率。

斜坡型模拟/数字转换器转换时间不确定,输入模拟电压V A 越大,完成转换所需要的时间越长。如果输入模拟电压V A 刚好低于满刻度电压将会出现最大转换时间,即“计数器”输出 “数字量”到最后一步才能结束转换过程。对于一个N 位分辨率的斜坡型模拟/数字转换器,最大转换时间可以由下式计算。 2

t C (max )=(2N - 1)时钟周期 (9-1) 对于一个10位分辨率的模拟/数字转换器,如果时钟信号的周期为1us ,这时 t C (max )=(210 - 1)× 1 us = 1023 us 斜坡型模拟/数字转换器工作速度低,但是利用它非常容易说明模拟/数字转换器的工作原理。MSP430G2231芯片和MSP430F2619芯片内部采用逐次逼近型模拟/数字转换器(Successive-Approximation ADC,SAC )来提高转换速度。它的“计数器”输出 “数字量”的修正采用逐位修改。图9.2给出一个4位这种类型模拟/数字转换器的原理图和时序图。

0123456789

图9.2 逐次逼近型模拟/数字转换器的工作原理图

在图9.2中,设DAC 的步长为1V ,这样输入4位数据的权值分别为8V 、4V 、2V 和1V ;再假设输入待转换的模拟电压V A =10.4V。 在t 0时刻转换过程开始,寄存器输出清零,即Q 3 =Q2=Q1=Q0=0,表示为Q=0000。这使得V AX =0V,由于V AX

在t 4时刻,控制信号使得寄存器的Q 2置位,这时Q=1100。这使得V AX =12V,由于V AX > VA ,这时比较器输出将变为低电平。由于比较器输出为低电平,在t 5时刻,控制信号使得寄存器的Q 2清零,这时Q=1000,这使得V AX =8V。 在t 6时刻,控制信号使得寄存器的Q 1置位,这时Q=1010。这使得V AX =10V,由于V AX VA ,因此比较器输出为低电平。由于比较器输出为低电平,在t 9时刻,控制信号使得寄存器的Q 0清零,这时Q=1010。这使得V AX =10V。到此时,转换结束,转换结果为1010。 逐次逼近型模拟/数字转换器的控制电路逐个将寄存器的每1位置位,并判断该位是否应该置位。这样它比起斜坡型模拟/数字转换器每次仅加1的过程需要的时间小得多,而且转换时间固定,但是逐次逼近型模拟/数字转换器内部控制电路要复杂得多。 模拟/数字转换器还有其它的类型。例如并行比较型在1个时钟周期就可以完成转换,但是电路更复杂;积分型的精度高,且抗干扰能力强,但是转换速度慢;Σ /Δ调制型电路复杂,但是可以获得高的精度,一些MSP430x2xx 芯片包含这种类型的模拟/数字转换器,在数据手册中被称为SD16,或者SD24,分别具有16,或者24位分辨率。

3

9.2 模拟/数字转换模块(ADC10)

9.2.1 模拟/数字转换模块(ADC10)

MSP430G2231芯片内部包含10位模拟/数字转换模块(ADC10)。该模块的工作原理属于逐次逼近型模拟/数字转换器(SAC ),具有10位分辨率和200ksps 的转换速率。模拟/数字转换模块(ADC10)的组成方框图如图9.3所示。

图9.3 模拟/数字转换模块(ADC10)的组成方框图

图9.3所示的方框图用于说明MSP430G2xx 系列芯片的模拟/数字转换模块(ADC10)的工作,该系列不同型号的芯片可能会存在着一些差异。 通过多个通道,多个准备转换的模拟电压能够进入模拟/数字转换模块(ADC10)。图中的模拟电压输入通道A0~A7、A12~A15分别可以与芯片的管脚相连接,模拟输入电压还包括芯片电源AV CC 以及芯片内部温度传感器的输出电压。对于MSP430G2231芯片, A0~A7分别对应芯片管脚P1.0~P1.7,A12~A15没有对应的芯片管脚。 4

所有的输入模拟电压通过多路选择开关共用一个模拟/数字转换器,因此1次只能完成1路模拟电压的转换,不过具有多个模拟电压输入管脚可以为电路板的设计提供方便。

在信号“INCHx ”的控制下,多路选择开关选择1个通道的模拟电压进行采样。信号“CONSEQx ”能够实现对所有模拟输入电压的进一步的控制,控制内容包括完成一个通道输入电压的一次转换、按照通道的顺序完成数个通道输入电压的一次转换、一个通道输入电压的重复转换以及按照通道的顺序完成数个通道输入电压的重复转换。通过多路选择开关的模拟电压将进入采样-保持电路“Sample and Hold”,这里将幅度连续、时间连续的模拟电压转换为幅度连续、时间离散的信号。

采样-保持电路“Sample and Hold”和模拟/数字转换器“10-bit SAR”共用一个时钟信号。时钟信号源可以是模拟/数字转换模块(ADC10)内部时钟信号源“ADC10OSC ”,也可以是MSP430芯片的系统时钟信号ACLK 、MCLK 或者SMCLK 。4种时钟信号源的选择通过信号“ADC10SSELx ”实现。内部时钟信号源ADC10OSC 属于RC 振荡器,工作频率约6MHz ,具体工作频率参考芯片的技术手册,也可以通过输出管脚ADC10CLK 进行测量。

时钟信号还能够利用分频电路“Divider /1„/8”,在信号“ADC10DIVx ”控制下,实现直接通过,或者从2到8的分频。

采样触发信号为图中信号“SHI ”的上升边沿。触发源可以是ADC10控制寄存器0(ADC10CTL0)的位ADC10SC 、定时器A (TimerA )的捕捉/比较模块1(CCR1)的输出、定时器A (TimerA )的捕捉/比较模块0(CCR0)的输出,或者定时器A (TimerA )的捕捉/比较模块2(CCR2)的输出。信号“SHSx ”完成采样触发信号的选择。 信号“ENC ”使能选择的采样触发信号,即使能模拟/数字转换模块(ADC10)的工作。信号“ISSH ”能够实现采样触发信号的上升沿触发,或者下降沿触发。 信号“SHI ”的上升边沿触发采样计数器“Sample Timer ”的计数工作。在信号“ADC10SHTx ”的控制下,这个计数器实现对时钟ADC10CLK ,范围为4、8、16或者64的计数过程。在计数过程中,信号“SAMPCON ”保持高电平;完成计数后,该信号为低电平。信号“SAMPCON ”处于高电平状态,采样-保持电路“Sample and Hold”对输入的模拟电压进行采样;信号“SAMPCON ”处于低电平状态,采样-保持电路“Sample and Hold”维持采样电压的数值。采样-保持过程的等效电路如图9.4所示。

Vs

图9.4 采样-保持过程的等效电路图

图中的V S 和R S 为准备进行模拟/数字转换的模拟信号等效电路,V pin 为施加到MSP430芯片管脚的模拟电压值。R mux 为包括多路开关导通电阻在内的芯片内部电阻,C sample 为采样电容。采样时,“采样-保持开关”置“采样”位置,模拟电压向采样电容Csample 充电;

5

采样结束以后,“采样-保持开关”置“保持”位置,由于运算放大器具有非常高的输入电阻,因此采样电容Csample 上的电压在后面的工作期间可以维持不变。 即使不考虑信号源内阻R S 的影响,芯片内部电阻R mux (数据手册给出它的最大值为2k Ω),采样电容C sample (数据手册给出它的最大值为27pF )组成的RC 电路中电容的充电需要一定的时间。信号“SAMPCON ”持续时间的可控制为用户在转换结果的精确与转换速率之间提供了选择的可能。 采样过程结束以后,即信号“SAMPCON ”变为低电平,模拟/数字转换器“10-bit SAR”的转换过程将启动。这个过程需要13个时钟ADC10CLK 周期的固定时间。时钟ADC10CLK 存在一个最高频率,这需要参考芯片的数据手册。“Divider /1„/8”分频电路可以用来降低时钟源的输出频率。 模拟/数字转换器“10-bit SAR”属于逐次逼近型模拟/数字转换器(SAC ),它的工作原理图如图9.2所示。转换获得的数字量来源于待转换的模拟电压与一个数字/模拟转换器输出电压进行比较的结果,模拟/数字转换器“10-bit SAR ”上的连接端“V R+”和“V R -”为这个数字/模拟转换器的参考电压输入端。 参考电压接线端“V R -”可以在模拟地“AV SS ”与参考电源地“V REF - / VeREF -”之间选择。参考电压接线端“V R +”可以在模拟电源“AV CC ”、内部参考电源“V REF+”、外部参考电源“Ve REF +”以及经过缓冲电路以后的外部参考电源之间进行选择。信号“SREFx ”实现上述各种选择。 模拟/数字转换模块(ADC10)内部包含参考电压源“1.5V or 2.5V Reference”。参考电压源可以提供2种参考电压,1.5V 或者2.5V ,输出电压的选择通过信号“2_5V”实现。信号“REFON ”用来控制这个内部参考电压源工作与否,在不使用这个参考电压源的情况下,停止它的工作可以降低芯片的功耗。信号“REFBURST ”能够使得参考源仅在模拟/数字转换过程中激活。这个参考电压也可以通过管脚送出芯片,供其它器件使用。 模拟/数字转换器“10-bit SAR”将模拟电压转换为数字量,输出具有2种格式,普通2进制格式,或者2进制补码格式。式(9-2)为采用普通2进制格式时的输出数字量与输入模拟电压的关系式。 N ADC = 1023×(V IN - VR -)/(V R+ - VR -) (9-2) 数字量的满刻度值为0x3ff 。信号“ADC10ON ”用来打开,或者停止模拟/数字转换器“10-bit SAR ”的工作。信号“BUSY ”用来显示模拟/数字转换的进行过程是否结束。模拟/数字转换结果被存储在寄存器“ADC10MEM ”。 模块“Data Transfer Controller”用来自动地将模拟/数字转换结果存储在MSP430芯片的存储器之中。当完成相关的设置以后,转换结果的存储不需要CPU 的干预,这样可以提高数据传输速率,间接地加快了对模拟电压的采样速率。 模拟/数字转换模块也提供中断能力。当完成模拟/数字转换过程,相应的中断标志将置位。即使不使用这个中断功用,利用这个标志也可以判断数字/模拟转换过程是否完成。MSP430系列微控制器的开发软件中,模拟/数字转换模块的中断矢量名称为“ADC10_VECTOR”。 6

9.2.2 模拟/数字转换模块(ADC10)的寄存器

模拟/数字转换模块(ADC10)的寄存器分为3类。第一类为控制模拟/数字转换工作的寄存器,包括ADC10输入使能寄存器0和1,ADC10AE0和ADC10AE1,ADC10控制寄存器0和1,ADC10CTL0和ADC10CTL1;第二类为存储模拟/数字转换结果的寄存器,ADC10MEM ;第三类涉及模拟/数字转换结果的传输,包括ADC10数据传输控制寄存器0和1,ADC10DTC0和ADC10DTC1,数据传输起始地址寄存器,ADC10SA 。 本小节只讨论模拟/数字转换模块(ADC10)的寄存器前两类中每一位的功能,这些功能已经足够满足通常的需要。第三类寄存器涉及如何将模拟/数字转换的结果直接存储到数据存储器,不需要通过CPU 以加快数据的采样率。作为一本入门级书籍,为了突出重点,同时减少篇幅,这里不涉及这部分内容。有兴趣的读者可以参考TI 公司提供的“MSP430x2xx Family User’s Guide”的相关内容。

ADC10AE0x :Bit7~Bit0,模拟输入管脚使能位。 0 不使能 1 使能

BIT0对应模拟电压输入管脚A0,BIT1对应模拟电压输入管脚A1,其它依次类推。

ADC10AE1x :Bit7~Bit4,模拟输入管脚使能位。 0 不使能 1 使能

BIT4对应模拟电压输入管脚A12,BIT5对应模拟电压输入管脚A13,BIT6对应模拟电压输入管脚A14,BIT7对应模拟电压输入管脚A15。

Reserved :Bit3~Bit0,当前没有使用,保留。 MSP430G2231芯片由于没有对应的管脚,因此不存在这个寄存器(ADC10AE1)。

7

注意:ADC10控制寄存器0(ADC10CTL0)中有阴影位的调整必须在该寄存器的位ENC

状态为0的情况下才能进行。 SREFx :参考电源选择控制位

Bit15 Bit14 Bit13 SREF2 SREF1 SREF0 0 0 0 V R+ = VCC 0 0 1 V R+ = VREF+

0 1 0 V R+ = VeREF+ 0 1 1 V R+ = 缓冲Ve REF+ 1 0 0 V R+ = VCC 1 0 1 V R+ = VREF+ 1 1 0 V R+ = VeREF+ 1 1 1 V R+ = 缓冲Ve REF+ ADC10SHx :采样-保持时间选择控制位 Bit14 Bit13

ADC10SHT 1 ADC10SHT0 0 0 0 1 1 0 1 1 ADC10SR :采样速率选择控制位 0 最高200ksps 1 最高50ksps REFOUT :参考源输出控制位 0 关闭 1 打开 8

V R - = VSS

V R - = VSS V R - = VSS V R - = VSS

V R - = VREF - / VeREF - V R - = VREF - / VeREF - V R - = VREF - / VeREF - V R - = VREF - / VeREF -

4个ADC10CLK 持续时间 8个ADC10CLK 持续时间 16个ADC10CLK 持续时间 64个ADC10CLK 持续时间

REFBURST :参考源间断输出控制位 0 参考源缓冲电路连续工作 1 参考源缓冲电路仅在模拟/数字转换的过程时工作 MSC :进行多次模拟/数字转换控制位 0 每次模拟/数字转换需要触发 1 仅第1次模拟/数字转换需要触发

该位的功能仅在顺序通道,或者重复模拟/数字转换模式下才有效。

REF2_5V:内部参考源输出电压选择控制位 0 1.5V 1 2.5V

REFON :参考源工作控制位 0 关闭 1 打开

ADC10ON :模拟/数字转换模块(ADC10)工作控制位 0 关闭 1 打开

ADC10IE :模拟/数字转换模块(ADC10)中断使能控制位 0 不使能 1 使能

ADC10IFG :模拟/数字转换模块(ADC10)中断标志 0 无中断申请 1 有中断申请

当完成模拟/数字转换模块(ADC10)中断服务程序,该位可以自动清零,也可以由用户软件清零。

ENC :模拟/数字转换模块(ADC10)转换使能控制位 0 不使能 1 使能

ADC10控制寄存器0(ADC10CTL0)和ADC10控制寄存器1(ADC10CTL1)中有阴影的位的调整必须在位ENC 状态为0的情况下才能进行。

ADC10SC :模拟/数字转换模块(ADC10)转换启动控制位 0 不启动 1 启动 用户软件置位该位将启动模拟/数字转换模块(ADC10)的工作。该位可以自动清零,也可以由用户软件清零。

9

注意:ADC10控制寄存器1(ADC10CTL1)中有阴影位的调整必须在ADC10控制寄存

器0(ADC10CTL0)的位ENC 状态为0的情况下才能进行。

INCHx :模拟电压输入通道选择控制位

Bit15 Bit14 Bit13 Bit12 INCH3 INCH2 INCH1 INCH0 0 0 0 0 0 0 0 1

0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1

1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 SHSx :采样-保持电路触发信号选择控制位

Bit11 SHS1 0

Bit10 SHS0 0

A0 A1 A2 A3 A4 A5 A6 A7 Ve REF+

V REF - / VeREF -

芯片内部温度传感器 (V CC -V SS )/ 2

(V CC -V SS )/ 2 或者A12 (V CC -V SS )/ 2 或者A13 (V CC -V SS )/ 2 或者A14 (V CC -V SS )/ 2 或者A15

10

ADC10CTL0的位ADC10SC 置位

0 1 定时器A (TimerA )的捕捉/比较模块1(CCR1)输出 1 0 定时器A (TimerA )的捕捉/比较模块0(CCR0)输出 1 1 定时器A (TimerA )的捕捉/比较模块2(CCR2)输出 ADC10DF :模拟/数据转换器输出数据格式控制位 0 普通2进制数据格式 1 2进制补码数据格式

ISSH :采样-保持电路触发信号反相控制位 0 不反相 1 反相

ADC10DIVx :模拟/数字转换电路时钟分频选择控制位 Bit7 Bit6 Bit5 ADC10DIV2 ADC10DIV1 ADC10DIV0 0 0 0 1 0 0 1 2

0 1 0 3 0 1 1 4 1 0 0 5

1 0 1 6

1 1 0 7 1 1 1 8

ADC10SSELx :模拟/数字转换电路时钟信号源选择控制位 Bit4 Bit3 ADC10SSEL1 ADC10SSEL0 0 0 0 1 1 0 1 1 CONSEQx :转换顺序模式选择控制位

ADC10OSC ACLK MCLK SMCLK

Bit11 Bit10 CONSEQ1 CONSEQ0 0 0 单通道,单次 0 1 顺序通道,单次 1 0 单通道,重复 1 1 顺序通道,重复

ADC10BUSY :模拟/数字转换模块(ADC10)忙标志,该位置位表示转换正在进行中 0 不工作 1 正在工作

11

9.3 模拟/数字转换模块(ADC10)检查程序

程序示例9.1可以用来检查模拟/数字转换模块(ADC10)的工作情况。这里通过管脚P1.0(A0)引入被转换的模拟电压。注意,这个模拟电压的范围为0到参考电压之间。这个模拟电压可以利用1个具有3个接线端的电位器来产生。电位器的两个固定接线端将分别与MSP430芯片的电源端和接地端相连接,可变电阻端输出模拟电压。电位器的阻值推荐值为10k Ω,使用三用表监视输入模拟电压数值。

程序示例9.1

// 程序名称:adc10_examine

// 程序功能:模拟/数字转换模块 ADC10 检测程序 // 使用芯片:MSP430G2231-14 N

// 模拟电压输入管脚:P1.0 / A0(Pin2) // 模拟/数字转换的结果使用数码管显示

#include // 包含名称定义和对应地址或数据的头函数 void delay_1s(void);

// 声明 1s 延迟函数

void seg7_1ms(unsigned char seg7_data); // 声明驱动 1 位数码管的驱动函数 void seg7_3ms(unsigned char seg7_data2, unsigned char seg7_data1, unsigned char seg7_data0); // 声明驱动 3 位数码管的驱动函数 const unsigned char decoder_seg7[18] // 声明显示代码

={0xee,0x82,0xdc,0xd6,0xb2,0x76,0x7e,0xc2,0xfe,0xf6,0xde,0x3e,0x6c,0x9e, 0x7c,0x78,0x00,0xff};

void main(void) {

unsigned int data_adc10; // 声明模拟 / 数字转换结果存储变量 unsigned char data_seg7_2, data_seg7_1, data_seg7_0;

// 声明每一位数据显示变量

WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗

P1SEL&=0x3f; // 设置P1.7和P1.6管脚为数字输入/输出管脚 P1DIR|=0xc0; // 设置 P1.7 和 P1.6 管脚为输出管脚 adc10_begin( ); // ADC10 配置 while(1) // 重复执行 {

ADC10CTL0|=ADC10SC; // ADC 转换软件启动控制位使能 while((ADC10CTL1&0x01)==1); // 等模拟 / 数字转换结束

// 主函数

// 共阴极数码管显示代码

void adc10_begin(void); // 声明 ADC10 配置函数

12

data_adc10=ADC10MEM; // 读取转换结果 data_seg7_0=data_adc10&0x000f; data_seg7_1=(data_adc10&0x00f0)>>4; data_seg7_2=(data_adc10&0x0300)>>8;

seg7_3ms(data_seg7_2, data_seg7_1, data_seg7_0); delay_1s ( ); // 延时 } }

void adc10_begin(void) {

// 配置 ADC10 模块模拟电压输入管脚

P1SEL|=BIT0; P1DIR&=~BIT0; // ADC10 模块相关寄存器配置

ADC10CTL0&=~ENC; // ADC10AE0|=BIT0; ADC10CTL0|=SREF_1; ADC10CTL0|=ADC10SHT_0; ADC10CTL0|=ADC10SR; ADC10CTL0|=REFOUT; ADC10CTL0&=~REFBURST; // ADC10CTL0&=~MSC; ADC10CTL0|=REF2_5V; // ADC10CTL0|=REFON; ADC10CTL0|=ADC10ON; // ADC10 ADC10CTL0&=~ADC10IE; // ADC10CTL1|=INCH_0; ADC10CTL1|=SHS_0; ADC10CTL1&=~ADC10DF; // ADC10 ADC10CTL1&=~ISSH; ADC10CTL1|=ADC10DIV_0; ADC10CTL1|=ADC10SSEL_2; ADC10CTL1|=CONSEQ_0; // ADC10CTL0|=ENC; }

// ADC10 配置函数 // 设置 P1.0 管脚为外围模块输入 / 输出管脚 // 设置 P1.0 管脚为输入管脚 调整 ADC10CTLx,位 ENC 必须清零 // 使能 A0 通道转换 // 参考电压选择:VR+ = VREF+

VR- = VSS

// 采样-保持时间选择:4 ADC10CLK // 采样速率选择:50ksps // 参考电源输出打开 参考电源连续工作 // 每次转换都需要触发 内部参考电压选择:2.5V // 内部参考电源打开 模块打开 不使能 ADC10 模块中断 // 模拟电压输入通道选择:A0

// 采样触发信号选择:ADC10SC/ADC10CTL0 模块输出数据格式选择:线性二进制 // 采样-保持电路触发信号不反相 // ADC10CLK 时钟源分频选择:1 // ADC10CLK 时钟源选择:MCLK 转换模式选择:单通道,单次 // ADC10 模块使能 13

在程序示例9.1中,模拟/数字转换模块(ADC10)的配置使用函数

void adc10_begin(void) // ADC10 配置函数

来实现。使用函数可以简化主函数的结构。这个函数内部对涉及的3个寄存器的每种功能分别进行配置,这样既能加深对相关内容的理解,也方便将这部分内容用于其它地方。 类似于前面出现的程序示例,程序示例9.1只声明了需要使用的函数,除过模拟/数字转换模块(ADC10)的配置函数,其它函数的原型并没有写出。 主函数在完成所有配置工作以后,重复进行对A0模拟电压输入通道(P1.0)输入的模拟电压完成模拟/数字转换、显示转换结果。模拟/数字转换工作的启动通过置位ADC10控制寄存器0(ADC10CTL0)的位ADC10SC 来实现。完成模拟/数字转换工作的启动以后,位ADC10SC 能够自动清零,因此程序中不需要完成该位清零的语句。 模拟信号的采样以及到数字量的转换需要一段时间,循环语句 while((ADC10CTL1&0x01)==1); // 等模拟 / 数字转换结束

通过检测ADC10控制寄存器1(ADC10CTL1)位BUSY 的状态来判断模拟/数字转换工作是否完成。在包括采样、模拟/数字转换的整个过程中,位BUSY 置位,因此程序重复执行这条语句,等待过程的结束。转换过程完成以后,位BUSY 自动清零,循环语句结束执行。 当模拟/数字转换工作完成以后,从模拟/数字转换模块(ADC10)的转换结果寄存器ADC10MEM 就能够自动获得转换结果。使用程序示例9.1,MSP430G2231芯片模拟/数字转换模块(ADC10)的测量结果如表9.1所示。

理想转换结果由三用表测量得芯片管脚P1.0的模拟电压值,通过下式计算获得 N ADC = 1023×V IN / 2.5 (9-3) 当输入模拟电压大于2.5V ,转换结果将保持0x3ff 数值不变。

测量结果显示,实际转换结果与理想数值之间存在误差。模拟/数字转换特性不是线性,当输入模拟电压较小时,实际转换结果大于理想转换结果;当输入模拟电压较大时,实际转换结果小于理想转换结果。 14

9.4 模拟/数字转换模块(ADC12)

9.4.1 模拟/数字转换模块(ADC12)

MSP430F2619芯片内部包含模拟/数字转换模块(ADC12)。该模块的工作原理也属于逐次逼近型模拟/数字转换器(SAC ),也具有200ksps 的转换速率,但是它具有12位分辨率。模拟/数字转换模块(ADC12)的组成方框图如图9.5所示。

图9.5 模拟/数字转换模块(ADC12)的组成方框图

由于都是采用逐次逼近型模拟/数字转换器(SAC ),模拟/数字转换模块(ADC12)与模拟/数字转换模块(ADC10)的组成基本相同,但是仍然存在一些差别。 图中的模拟电压输入通道A0~A7分别可以与芯片的管脚相连接,模拟输入电压还包括芯片电源AV CC 以及芯片内部温度传感器的输出电压。通道A12~A15现在不存在,对应的多路选择器触点直接与芯片接地(GND )相连接。

15

在信号“INCHx ”的控制下,多路选择开关选择1个通道的模拟电压进行采样。虽然没有画在一起,信号“CONSEQx ”仍然用来实现单次单通道、单次顺序通道、重复单通道和重复顺序通道这样的通道转换模式的选择。

采样-保持电路“Sample and Hold”和模拟/数字转换器“12-bit SAR”仍然共用一个时钟信号“ADC12CLK ”。时钟信号源同样还是模拟/数字转换模块内部时钟信号源“ADC10OSC ”、MSP430芯片的系统时钟信号ACLK 、MCLK 或者SMCLK ,并通过信号“ADC12SSELx ”实现信号源的选择。为满足对时钟频率数值的要求,被选中的时钟信号利用分频电路“Divider /1„/8”,在信号“ADC12DIVx ”控制下,实现直接通过,或者从2到8的分频。

采样触发信号源有一些改变,仍然使用ADC12控制寄存器0(ADC12CTL0)的位ADC12SC ,或者定时器A (TimerA )的捕捉/比较模块1(CCR1)的输出,更换使用了定时器B (TimerB )的捕捉/比较模块0(CCR0)的输出,或者定时器B (TimerB )的捕捉/比较模块2(CCR2)的输出。信号“SHSx ”完成采样触发信号的选择。 信号“ENC ”使能选择的采样触发信号,即使能模拟/数字转换模块(ADC12)的工作。信号“ISSH ”能够实现采样触发信号的同相输出,或者反相输出。

信号“SHI ”的上升边沿用来触发计数器“Sample Timer”的计数工作,在规定范围内进行计数的过程中,它输出高电平信号;计数结束后,它则输出一个低电平信号。输出为高电平时,模拟信号被采样;输出为低电平时,采样信号被保持,这个期间完成模拟电压到数字量的转换。信号“SHI ”也可以直接控制采样过程,同样在这个信号处于高电平期间进行采样。直接使用信号“SHI ”控制采样过程使得程序设计者能够通过控制信号“SHI ”高电平持续时间来控制采样时间,信号“SHI ”的下降沿将触发转换过程,转换过程自动使用时钟信号“ADC12CLK ”。

采样计数器“Sample Timer”以信号“ADC12CLK ”为计数时钟,在信号“SHTx ”的控制下,实现范围为4~1024的计数过程。采用更长时间的计数过程是由于现在的满量程电压分辨率从1/1023上升到1/4095,采样电容需要被充电到更接近实际的模拟电压数值,因此需要更多的时间。 模拟/数字转换模块(ADC12)内部也包含参考电压源“1.5V or 2.5V Reference”。这个参考电压源的使用与模拟/数字转换模块(ADC10)内部参考电压源的使用方法相同,但是这里推荐在参考电源输出管脚V REF+和模拟地管脚AV SS 之间添加一个10uF 和一个0.1uF 的并联电容,因为现在由于分辨率提高使得电路对干扰更加敏感。 模拟/数字转换器“12-bit SAR”将模拟电压转换为数字量。模拟/数字转换模块(ADC12)提供了16个缓冲存储器ADC12MEM0~ADC12MEM15,它们分别具有各自的控制寄存器ADC10CTLx ,由此能够配置缓冲存储器存储的转换结果。 模拟/数字转换模块(ADC12)的中断矢量,ADC12_VECTOR,为该模块的18个中断信号源所共同使用。这些中断信号源就包括向任何一个缓冲存储器,ADC12MEM0~ADC12MEM15,写入数据所产生的中断信号。为利用一个中断矢量服务众多的中断信号源,模块具有一个专门的寄存器,中断矢量寄存器(ADC12IV )。 16

9.4.2 模拟/数字转换模块(ADC12)的寄存器

模拟/数字转换模块(ADC12)的寄存器也分为3类。第一类为控制模拟/数字转换工作的寄存器,包括ADC12控制寄存器0和1,ADC10CTL2和ADC12CTL1;第二类为存储模拟/数字转换结果的寄存器和对应的控制寄存器,ADC12MEMx 和ADC12MCTLx ,这里的x 的取值范围为0~15;第三类涉及中断的寄存器,包括ADC12中断使能寄存器,ADC12IE ,中断标志寄存器,ADC12IFG ,中断矢量寄存器,ADC12IV ,。

注意:ADC12控制寄存器0(ADC12CTL0)中有阴影的位的调整必须在该寄存器的位ENC

状态为0的情况下才能进行。

SHT1x 和SHT0x 用来选择采样时间,单位为ADC12CLK 的周期。其中SHT1x 用来控制缓冲存储器ADC12MEM8~ADC12MEM15对应的模拟电压对应的采样时间;SHT0x 用来控制缓冲存储器ADC12MEM0~ADC12MEM7对应的模拟电压对应的采样时间。SHT1x 和SHT0x 的取值对应的采样时间如表9.2所示。

17

MSC :进行多次模拟/数字转换控制位 0 每次模拟/数字转换需要触发 1 仅第1次模拟/数字转换需要触发

该位的功能仅在顺序通道,或者重复模拟/数字转换模式下才有效。

REF2_5V:内部参考源输出电压选择 0 1.5V 1 2.5V

REFON :参考源开关控制位 0 关闭 1 打开

ADC12ON :模拟/数字转换模块(ADC12)工作控制位 0 关闭 1 打开

ADC10OVIE :模拟/数字转换结果寄存器,ADC12MEMx ,溢出中断使能位 0 不使能 1 使能

当模拟/数字转换结果寄存器,ADC12MEMx ,的转换结果尚没有被读取,又有一次转换结果再被写入能够产生中断信号。该位使能这个中断。

ADC10TOVIE :模拟/数字转换时间溢出中断使能位 0 不使能 1 使能

当完成模拟/数字转换模块(ADC10)中断服务程序,该位可以自动清零,也可以由用户软件清零。

ENC :模拟/数字转换模块(ADC10)转换使能 0 不使能 1 使能

ADC10控制寄存器0(ADC10CTL0)和ADC10控制寄存器1(ADC10CTL1)中有阴影的位的调整必须在位ENC 状态为0的情况下才能进行。

ADC10SC :模拟/数字转换模块(ADC10)转换启动控制位 0 不启动 1 启动 用户软件置位该位将启动模拟/数字转换模块(ADC10)的工作。该位可以自动清零,也可以由用户软件清零。 18

注意:ADC12控制寄存器1(ADC12CTL1)中有阴影的位的调整必须在ADC12控制寄存

器0(ADC12CTL0)的位ENC 状态为0的情况下才能进行。

CSTARTADDx :转换开始地址选择控制位。

转换开始地址选择控制位CSTARTADDx 的内容0x0~0xf 依次对应模拟/数字转换结果的寄存器ADC12MEM0~ADC12MEM15。这个地址既可以是单次转换结果的存储地址,也可以是顺序转换的首个模拟输入电压通道转换结果的存储地址。

模拟/数字转换结果的寄存器ADC12MEM0~ADC12MEM15与输入模拟电压通道之间没有关系。任何一个模拟电压输入通道的转换结果可以存储在任意一个模拟/数字转换结果的寄存器ADC12MEMx 之中。

SHSx :采样-保持电路触发信号选择

Bit11 Bit10 SHS1 SHS0 0 0 ADC10CTL0的位ADC10SC 置位 0 1 定时器A (TimerA )的捕捉/比较模块1(CCR1)输出 1 0 定时器B (TimerB )的捕捉/比较模块0(CCR0)输出 1 1 定时器B (TimerB )的捕捉/比较模块1(CCR2)输出 SHP :采样时间控制信号SAMPCON 选择位 0 控制信号SAMPCON 直接来源于采样-保持电路触发信号 1 控制信号SAMPCON 来源于采样计数器的输出 ISSH :采样-保持电路触发信号反相控制位 0 不反相 1 反相 ADC10DIVx :模拟/数字转换电路时钟分频选择。ADC10DIVx 的内容0~7依次对应1~8的分频比例。

19

ADC10SSELx :模拟/数字转换电路时钟信号选择 Bit4 Bit3 ADC10SSEL1 ADC10SSEL0 0 0 0 1 1 0 1 1 CONSEQx :转换顺序模式选择

ADC10OSC ACLK MCLK SMCLK

Bit11 Bit10 CONSEQ1 CONSEQ0 0 0 单通道,单次 0 1 顺序通道,单次 1 0 单通道,重复 1 1 顺序通道,重复

ADC10BUSY :模拟/数字转换模块(ADC10)忙标志,表示转换正在进行 0 不工作 1 正在工作

寄存器名称ADC12MEMx 中的x 可以取0~15中任意一个值,分别用来表示16个转换结果存储寄存器。模拟数字转换结果以普通2进制格式存储在寄存器的位11~0,其中位11为转换结果的最高位。MSP430芯片的复位对寄存器的位11~0中的内容无影响。寄存器的位15~12没有被使用,其内容总是0000。模拟/数字转换完成以后,转换结果将自动进入这个寄存器。写这个寄存器可以产生中断申请。

注意:该寄存器调整必须在ADC12CTL0的位ENC 状态为0的情况下才能进行。 20

寄存器名称ADC12MCTLx 中的x 可以取0~15中任意一个值,分别用来表示16个存储控制寄存器。每个存储控制寄存器控制对应的转换结果存储寄存器的工作,例如寄存器ADC12MCTL0控制ADC12MEM0,依次对应。

EOS :顺序转换过程结束指示位 0 过程进行 1 过程结束 SREFx :参考电源选择

Bit6 Bit5 Bit4 SREF2 SREF1 SREF0 0 0 0 V R+ = VCC V R - = VSS 0 0 1

V R+ = VREF+ V R - = VSS 0 1 0 V R+ = VeREF+ V R - = VSS 0 1 1 V R+ = 缓冲Ve REF+ V R - = VSS

1 0 0 V R+ = VCC V R - = VREF - / VeREF - 1 0 1 V R+ = VREF+ V R - = VREF - / VeREF - 1 1 0 V R+ = VeREF+ V R - = VREF - / VeREF - 1 1 1 V R+ = 缓冲Ve REF+ V R - = VREF - / VeREF -

INCHx :模拟电压输入通道选择

Bit3 Bit2 Bit1 Bit0 INCH3 INCH2 INCH1 INCH0 0 0 0 0 A0

0 0 0 1 A1 0 0 1 0 A2 0 0 1 1 A3 0 1 0 0 A4 0 1 0 1 A5 0 1 1 0 A6 0 1 1 1 A7 1 0 0 0 Ve REF+

1 0 0 1 V REF - / VeREF -

1 0 1 0 芯片内部温度传感器 1 0 1 1 (V CC -V SS )/ 2 1 1 0 0 GND 1 1 0 1 GND 1 1 1 0 GND 1

1

1

1

GND

21

ADC12IEx :中断使能控制位 0 不使能 1 使能

ADC12IEx :中断标志指示位 0 无中断申请 1 中断申请

ADC12中断使能寄存器(ADC12IE )和ADC12中断标志寄存器(ADC12IFG )的每一位对应一个ADC12转换结果存储寄存器(ADC12MEMx )。例如位ADC12IE1和位ADC12IFG1对应寄存器ADC12MEM1。当转换结果写入寄存器ADC12MEM1,位ADC12IFG1将置位,如果位ADC12IE1被置位,这时就会产生中断。

模拟/数字转换模块(ADC12)的所有中断信号源共用1个中断矢量,ADC12_VECTOR,因此需要在进入中断服务程序之后再次判断具体的中断信号源。中断矢量寄存器ADC12IV 中位ADC12IVx 的不同取值代表了不同的中断信号源,这个取值可以用来实现具体中断信号源的判断。

表9.3给出了ADC12IVx 的取值与具体中断信号源的对应关系。

22

9.5 模拟/数字转换模块(ADC12)初始化函数

程序示例9.1可以用来检查模拟/数字转换模块(ADC10)的工作情况。更改为模拟/数字转换模块(ADC12)的初始化函数,这个程序示例就可以用来检查模拟/数字转换模块(ADC12)的工作情况。

需要注意,MSP430微控制器芯片包含的外围模块能够工作在不同的工作状态下,具体的工作状态就是靠对这些外围模块的正确配置来实现的,因此不可能给出一个适应所有要求的配置程序,需要设计者根据具体要求进行设置。

类似于程序示例9.1中的模拟/数字转换模块(ADC10)初始化函数 void adc10_begin(void) // ADC10 配置函数 这里仍然对涉及的所有寄存器的每种状态分别进行配置。这样既能加深对相关内容的理解,也方便将这部分内容用于其它地方。

23

// 函数名称:adc12_begin

// 函数功能:模拟/数字转换模块 ADC12 初始化 //

目标芯片MSP430F2619-64Pin PM

// 模拟电压输入管脚:P6.0 / A0(Pin59) // 函数参量:无 // 函数返回值:无

void adc12_begin(void) {

// 配置 ADC12 模块模拟电压输入管脚

P6SEL|=BIT0; P6DIR&=~BIT0; // ADC12 模块相关寄存器配置

ADC12CTL0&=~ENC; //

ADC12CTL0|=SHT1_4; ADC12CTL0|=SHT0_4;

ADC12CTL0&=~MSC; ADC12CTL0|=REF2_5V; // ADC12CTL0|=REFON; ADC12CTL0|=ADC12ON; // ADC12CTL0&=~ADC12OVIE; ADC12CTL0&=~ADC12TOVIE;

ADC12CTL1|=CSTARTADD_0; ADC12CTL1|=SHS_0; ADC12CTL1|=SHP; ADC12CTL1&=~ISSH; ADC12CTL1|=ADC12DIV_0; ADC12CTL1|=ADC12SSEL_2; ADC12CTL1|=CONSEQ_0; //

ADC12MCTL0|=SREF_1; ADC12MCTL0|=INCH_0;

ADC12CTL0|=ENC; }

24

// 声明 ADC12 配置函数 // 设置 P6.0 管脚为外围模块输入 / 输出管脚 // 设置 P6.0 管脚为输入管脚 注意,ADC12 模块相关寄存器配置的许多情况 // 位 ENC 必须清零

// 采样-保持时间选择:64 ADC10CLK // 每次转换都需要触发 内部参考电压选择:2.5V // 打开内部参考电源 打开 ADC12 模块

// 不使能写 ADC12MEMx 中断 // 不使能转换时间溢出中断 // 转换结果存储寄存器选择:ADC12MEM0 // 采样触发信号选择:ADC12SC/ADC12CTL0 // 采样控制信号 SAMPCON 选择:采样计数器 // 采样-保持电路触发信号不反相 // ADC12CLK 时钟源分频选择:1 // ADC12CLK 时钟源选择:MCLK 转换模式选择:单通道,单次 // 参考电压选择:VR+ = VREF+,VR- = Vss

// 模拟电压输入通道选择:A0

// ADC10 模块使能

模拟/数字转换模块(ADC12)初始化函数使用语句

ADC12CTL1|=CSTARTADD_0; // 转换结果存储寄存器选择:ADC12MEM0

指定转换结果存储器ADC12MEM0存储模拟/数字转换的结果。因此这里需要对存储控制寄存器ADC12MCTL0进行配置了。语句

ADC12MCTL0|=SREF_1; // 参考电压选择:VR+ = VREF+

VR- = Vss

ADC12MCTL0|=INCH_0; // 模拟电压输入通道选择:A0

指定模拟电压输入通道以及转换过程中参考电压的选择。 这里使用转换结果存储器ADC12MEM0来存储模拟电压输入通道A0的转换结果,事实上可以使用16个转换结果存储器ADC12MEMx 的任意一个来做这个工作。任意一个输入模拟电压的转换结果能够存储到任意一个转换结果存储器。 初始化函数中没有使能模拟/数字转换模块(ADC12)的中断,因此这里没有涉及中断使能寄存器ADC12IE 的相关内容。

9.6 模拟信号的采集与回放

MSP430F3619微控制器芯片内部包含12位分辨率的模拟/数字转换模块ADC12,12位分辨率的数字/模拟转换模块DAC12。程序示例9.2利用这两个芯片内部的外围模块,在不需要添加其它器件的情况下,完成模拟信号的采集和回放。

被采集的模拟信号可以使用实验室里的信号产生器输出的正弦电压。这里需要注意,大多数正弦信号产生器输出的默认信号是正、负对称的信号,MSP430F3619芯片的模拟/数字转换模块ADC12输入电压幅度范围为0~V REF+,只能是正电压,这需要合适地调整正弦信号产生器输出信号的幅度和直流偏移以满足微控制器芯片的要求。

回放的信号可以使用示波器进行观察。如果示波器具有2个输入信号通道,则可以使用其中的1个通道观察模拟信号源的波形,使用另一个观察MSP430F3619芯片的数字/模拟转换模块输出信号波形。

程序示例9.2

// 程序名称:adc_dac

// 程序功能:模拟信号的采集与回放 //

目标芯片MSP430F2619-64Pin PM

// 模拟电压输入管脚:P6.0 / A0(Pin59)

// DAC12_0 模拟电压输出管脚 P6.6 / DAC12_0(Pin5)

#include // 包含名称定义和对应地址或数据的头函数 void adc12_begin(void); // 声明 ADC12 配置函数 void dac12_0_begin(void); // 声明 DAC12_0 配置函数

25

int main(void) // 主函数 {

unsigned int data_adc12; // 声明模拟 / 数字转换结果存储变量 WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 adc12_begin( ); // ADC12 配置 dac12_0_begin( ); // DAC12_0 配置 while(1) // 重复执行 {

ADC12CTL0|=ADC12SC; // ADC 转换软件启动控制位使能

while((ADC12CTL1&0x01)==1); // 检测 BUSY 标志,等模拟 / 数字转换结束 data_adc12=ADC12MEM0; // 读取模拟 / 数字转换结果 DAC12_0DAT=data_adc12; // 启动数字 / 模拟转换 } }

程序示例9.2分别通过调用函数

adc12_begin( ); // ADC12 配置 dac12_0_begin( ); // DAC12_0 配置

完成MSP430F2619芯片内部的外围模块ADC12和DAC12的配置。同样,这里也没有写出这2个函数的原型。

外围模块ADC12的配置函数可以使用上一节给出的模拟/数字转换模块(ADC12)的初始化函数。外围模块DAC12的配置函数可以使用程序示例8.2中给出的模拟/数字转换模块(DAC12)的初始化函数。 模拟信号的采集过程中,通过检测“BUSY ”标志来确保模拟/数字转换过程完成以后再读取结果。数字/模拟转换过程并没有考虑输出模拟电压的建立时间。这里使用等待模拟/数字转换过程的完成时间来建立输出要求的模拟电压,实验证明这是可以的。 一个正弦信号周期如果具有10个以上的采样点,示波器就能够显示一个可以识别的信号波形。如果具有30个以上的采样点,示波器将显示一个很好的正弦信号波形。采样点之间的时间间隔(也称为采样周期,它的倒数称为采样频率)可以通过示波器测量。 当信号产生器输出的正弦信号频率很低,例如100Hz ,这时示波器显示的波形会非常的好。保持正弦信号的幅度不变,提高它的频率,当正弦信号的频率接近采样频率时,示波器显示的波形将杂乱无章。继续提高信号产生器输出正弦信号的频率,会出现一个有趣的现象,在某些频率范围,示波器又会显示一个正弦信号波形,当然这个正弦信号波形的频率与信号产生器输出正弦信号的频率并不相等,但是具有一定的关系。这种现象出现在被采样的信号频率高于采样频率的状态下,被称为频率混叠。 频率混叠在将模拟信号转换为数字信号时必须避免。采样定理,也称奈奎斯特定理,指出,采样频率需要高于被转换信号中最高频率分量的2倍。 26

虽然在模拟信号转换为数字信号的过程中混叠现象必须避免,但是它也具有实际应用价值。例如利用定时/计数器A (TimerA )测量信号频率时,对最高测量频率是有限制的。如果知道有一个高频率的信号的频率范围

B 1

9.7 小结

MSP430系列微控制器中的大部分芯片内部包含模拟/数字转换模块,这些数字/模拟转换模块具有不同的工作原理和技术指标。本章分别描述了MSP430G2231芯片和MSP430F2619芯片内部包含模拟/数字转换模块。两种芯片所包含的模拟/数字转换模块具有同样的工作原理,逐次逼近型模拟/数字转换器(SAC ),但是具有不同的分辨率,前者为10位分辨率,后者为12位分辨率。

提供10位分辨率的DAC10模拟/数字转换模块和提供12位分辨率的DAC12模拟/数字转换模块虽然都属于逐次逼近型模拟/数字转换器(SAC ),但是它们的组成、工作过程以及实现工作控制的寄存器都有明显的差别。这些差别在使用中必需注意。

MSP430系列微控制器中同样功能外围模块之间的多样性对初学者会带来一些不便,但是对于应用系统的设计将带来较大的灵活性。设计者具有较多的选择,自然能够设计出性价比更高的产品。

27


相关内容

  • 模拟数字转换器的基本原理
  • 模拟数字转换器的基本原理 我们处在一个数字时代, 而我们的视觉.听觉.感觉.嗅觉等所感知的却是一个模拟世界.如何将数字世界与模拟世界联系在一起, 正是模拟数字转换器(ADC)和数字模拟转换器(DAC)大显身手之处.任何一个信号链系统, 都需要传感器来探测来自模拟世界的电压.电流.温度.压力等信号.这 ...

  • 单片机在家用电器中的应用
  • 单片机在家用电器中的应用 一.概况随着单片机技术日新月异的发展, 单片机以其可靠性高.控制功能强.环境适应性 好.体积小等优点在家用电器中得到日益广泛的应用. 用单片机取代传统家电中的机械控制部件, 正在使传统的家用产品走向智能化. 如-能识别衣物种类.脏物程度, 自动选择洗涤时间.强度的洗衣机; ...

  • 数字与模拟电路设计技巧
  • 数字与模拟电路设计技巧 前言 IC与LSI的功能大幅提升使得高压电路与电力电路除外,几乎所有的电路都是由半导体组件所构成,虽然半导体组件高速.高频化时会有EMI的困扰,不过为了充分发挥半导体组件应有的性能,电路板设计与封装技术仍具有决定性的影响. 模拟与数字技术的融合 由于IC与LSI半导体本身的高 ...

  • 别被表面现象迷惑,谨防模拟或数字电路的设计误区
  • 别被表面现象迷惑,谨防模拟或数字电路的设计误区 人类是不同寻常的"动物",有些时候,在某些方面,一知半解.自负和盲目自大比无知更危险,比如电路设计,可能导致电路无法正常工作.当看到有经验的工程师犹豫不决时,某些人觉得自己还不如和没有经验的人合作,不明白为什么这些经验丰富的工程师反 ...

  • 电路设计及技巧
  • 电路设计技巧 学 院 **** 专 业 **** 年级班别 **** 学生姓名 **** 指导教师 **** 2017年 3月 摘要 电路(电子线路) 是由电气设备和元器件按一定方式联接起来,为电流流通提供了路径的总体,也叫电子网路.根据所处理信号的不同,电子电路可以分为模拟电路和数字电路.一般PC ...

  • 数字电压表课程设计
  • <单片机技术>课程设计说明书 数字电压表 院 . 部: 电气与信息工程学院 学生姓名: zxxxx 指导教师: 肖冬瑞 职称 讲师 专 业: 电气工程及其自动化 学 号: 班 级: 电气本xxx 完成时间: 2016年x 月 湖南工学院<单片机技术>课程设计课题任务书 学院: ...

  • 数据采集与处理技术试卷
  • 一.绪论 (一).1."数据采集"是指什么? 将温度.压力.流量.位移等模拟量经测量转换电路输出电量后再采集转换成数字量后,再由PC 机进行存储.处理.显示或打印的过程. 2.数据采集系统的组成? 由数据输入通道,数据存储与管理,数据处理,数据输出及显示这五个部分组成. 3.数据 ...

  • 数字电压表-量程20V
  • 本科学生设计性实验报告 项目组长____学号成 员 专 业 实验项目名称__基于单片机的数字电压表 _ 指导教师及职称___ _ _ 开课学期 至_学年_学期 上课时间 年月日 摘 要 本实验是利用单片机设计一个简易的数字电压表,能够测量交流直流电压值,通过LED数码管显示,使用的元器件数目较少.外 ...

  • 细说模拟信号采样与AD转换
  • 细说模拟信号采样与AD 转换 尽管大家都知道,但还是提一提.大牛奥本海姆的<信号与系统>中是这样描述的: Let x(t) be a band-limited signal with X(jw) = 0 for |w|> wM . Then x(t) is uniquely det ...