030:MSP430单片机Comparator_A模块
1, 比较器 A 模块概述
MSP430F169 含有比较器 A 模块,它是为精确比较测量而设计的,如电池电压监测,产生外部模拟
信号,测量电流,电容和电阻,结合其他模块还可以实现精确的 A/D 模数转换功能。
比较器 A 模块支持精确的 A/D 转换、供电电压管理以及外部模拟信号的监管。
比较器 A 的特点包括:
同相端和反相端输入复用;
软件选择 RC 滤波器作为比较器输出;
输出作为 Timer_A 的捕获输入;
软件控制端口输入缓冲
具有中断能力
可选择参考电压发生器
比较器和参考电压发生器可以低功耗。
2 比较器 A 模块的结构

[1]比较器A工作原理
比较器A可完成对其正向输入端和反向输入端的模拟信号的电压的比较。如果正向输入电压
大于反向输入电压,则CAOUT输出为高,反之则CAOUT输出为低。
注意:若寄存器CAEX位为1时,比较器输出则进行取反操作。
可用CAON位来控制比较器可开启或关闭。在不使用比较器的情况下,可关闭比较器以降低其功耗。
当比较器关闭时, 输出CAOUT总为低。
[2],比较器A基本操作流程
打开比较器单元
打开参考电压发生器单元(若比较器的输入信号全为外部输入,则可关闭该单元)
选择相应输入信号(CA0、CA1和内部参考信号)连接到比较器的输入端口
分别将单片机比较器A的外部输入端口CA0和CA1接至P2.3和P2.4
选择配置相关寄存器;
使能中断信号(若需要)
读取比较输出信号。
[3] 模拟输入信号选择
通过对P2CAx位的设置可控制输入开关断开或连接比较器与外部输入端口,也可对外部输入端口进行单独控制,
可归纳为: 可以使外部信号输入到比较器的正或负端; 可以使内部参考信号连接到比较器端;
在本质上,输入开关是一个T型开关,它有利于抑制信号路径的失真。
注意:如果比较器已打开,必须保证其输入端已连接信号端,或参考电源与地,否则,这种浮地会导致系统的意外中断和功耗的增大。
寄存器的CAEX位控制输入多路开关,决定哪种信号和比较器的正负端相连接,如果比较器的正负端互换,其输出也将转变,
这便于用户对失调电压进行测量或补偿。 在物理结构上,CA0、CA1分别于外部引脚P2.3和P2.4连接。
[4]输出滤波器选择
比较器的输出信号可通过CAF位来选择是否使用内部滤波器,如果CAF位置位,则信号输出时还会经过RC滤波器再滤波。
如果输入端压差很小,比较器输出将出现振荡。内部与外部电路的寄生效应,信号线、电源线经及其它部件之间的交叉耦合
都将对输出产生影响,会降低比较结果的输出精度及分辨率。当使用内部滤波器则可以减少与之相关的错误振荡输出。
可以清楚的看到使用和不使用输出滤波器的输出振荡比较的结果,因此在使用比较单元时建议选择内部输出滤波器。

[5]电压基准的产生和选择
参考电压(VCAREF)发生器用于产生VCAREF信号,它可以连接到比较器的任意一个输入端。
CAREFx位则用以控制参考电压的产生,CARSEL位则来决定比较器终端选择哪一个参考电压VCAREF。
如果比较器输入端都与外部模拟电压相连接,则应该关闭内部参考电源发生器以降低功耗。
内部电源发生器可产生小数倍(0.5倍或0.25倍)的电源电压或固定的三极管阈值电压(约0.55V)。
[6] 比较器 A 的中断

中断电路如图所示。比较器 A 响应中断的条件为:
有中断源:比较器模块有比较结果输出;
设置中断标志:CAIES 选择比较器输出的上升沿或下降沿使中断标志 CAIFG 置位;
中断允许:比较器 A 的中断允许(CAIE 置位)、系统总中断允许(GIE 置位)。
中断响应后,硬件会自动清除中断标志位 CAIFG。
3 比较器 A 模块的寄存器
[1] CACTL1 比较器 A 控制寄存器 1

CAEX:比较器的输入端,控制比较器 A 的输入信号和输出方向
0: 比较器的正输入端接 P2CA0,正输入端接 P2CA1,输出同相
1: 比较器的正输入端接 P2CA1,正输入端接 P2CA0,输出反相
CARESL:选择内部参考源加到比较器 A 的正端或负端
当 CAEX=0 时:
0: 选择内部参考源加到比较器 A 的正端
1: 选择内部参考源加到比较器 A 的负端
当 CAEX=1 时:
0: 选择内部参考源加到比较器 A 的负端
1: 选择内部参考源加到比较器 A 的正端
CAREFx:选择参考源
0: 内部参考电源关闭,使用外部参考源
1: 0.25 * Vcc
2: 0.50 * Vcc
3: 三极管阈值电压
CAON:比较器 A 开关控制
0: 关闭
1: 开启
CAIES:中断触发沿选择
0: 上升沿触发
1: 下降沿触发
CAIE:中断允许
0: 中断禁止
1: 中断允许
CAIFG:比较器中断标志
0: 没有中断请求
1: 有中断请求
[2] CACTL2 比较器 A 控制寄存器 2

P2CA1:控制输入端 CA1
0: P2CA1 不接 CA1
1: P2CA1 接 CA1
P2CA0:控制输入端 CA0
0: P2CA0 不接 CA0
1: P2CA0 接 CA0
CAF:选择比较器输出端是否经过 RC 低通滤波器
0: CAOUT 不经输出滤波
1: CAOUT 使用输出滤波
CAOUT:比较器 A 的输出
写操作无效
[3] CAPD 比较器 A 端口禁止寄存器

比较器 A 模块的输入输出与 I/O 共用引脚,CAPD 可以控制 I/O 端口输入缓冲器的通断开关。当输入电压
不接近 Vss 或 Vcc 时,CMOS 型的输入缓冲器可以起到分流作用。
CAPDx:端口输入缓冲器控制
0: 输入缓冲使用
1: 输入缓冲禁止
4,程序设计举例
本例主要实现CA0引脚电压检测。当外部输入电压(P2.2)小于0.5VCC时,(P1.1)LED灯闪烁提示用户电压过低。
该例可以实现系统电源监测,读者可以通过调节CA0的电压来观察。
1 #include <msp430f169.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 uchar flag = 0; 5 /* 6 * 延时函数 7 */ 8 #define CPU_F ((double)8000000) //外部高频晶振8MHZ 9 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 10 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 11 /** 12 * 系统时钟初始化,外部8M晶振 13 */ 14 void Init_Clk() 15 { 16 uchar i; 17 BCSCTL1&=~XT2OFF; //打开XT2振荡器 18 BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ 19 do{ 20 IFG1&=~OFIFG; //清除振荡器错误标志 21 for(i=0;i<100;i++) 22 _NOP(); 23 } 24 while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待 25 IFG1&=~OFIFG; 26 } 27 /* 28 * 比较器寄存器配置 29 */ 30 void Init_Com_A(){ 31 P2SEL = 0x0C; //配置端口 P2.2 P2.3为第二功能端口 32 P2DIR = 0x04; //设置P2.2为输出(比较输出), P2.3为输入(比较输入) 33 CACTL1 &= ~CAEX; //反向输出 34 CACTL1 |= CARSEL + CAREF1 + CAON + CAIE + CAIES; //CA0为正向输入,参考电压0.5VCC反向输入 35 CACTL2 |= CAF + P2CA0; 36 } 37 /* 38 * 比较器A中断函数 39 */ 40 #pragma vector = COMPARATORA_VECTOR 41 __interrupt void COM_A(){ 42 flag = 1; 43 } 44 /** 45 * 主函数 46 */ 47 void main(void) 48 { 49 WDTCTL = WDTPW | WDTHOLD; // 关闭看门狗 50 Init_Clk(); 51 Init_Com_A(); 52 _EINT(); 53 uchar k; 54 while(1) 55 { 56 while(flag) 57 { 58 P6DIR |= BIT0; 59 for(k=0;k<10;k++) 60 { 61 P1OUT = (~(P1OUT&BIT0)); 62 delay_ms(500); 63 } 64 flag = 0; 65 } 66 67 } 68 69 }

浙公网安备 33010602011771号