1、3.6 比较器B (Comparator_B)本节内容 Comp_B 概述 Comp_B 结构 Comp_B 功能使用 模拟输入端 模拟输入开关 比较器 参考电压发生器 输出电路 Comp_B 中断 Comp_B 库函数 Comp_B 应用举例比较器B 概述(1/1)比较器B是为精确的比较测量而设计的,如电池电压监测、产生外部模拟信号、测量电流、电容和电阻,结合其他模块还可实现精确的A/D模数转换功能。比较器B 是工业仪表、手持式仪表等产品设计中的理想选择。5系列之前的MSP430单片机仅有比较器A,5/6系列430单片机升级为比较器B。Comp_B是一个模拟电压比较器,涵盖了多达16通道的通
2、用比较器功能。比较器B 概述(2/2)Comp_B模块主要特性有:正向反向终端输入多路选择器 通过软件选择比较器输出的RC滤波可输出到TA的捕获输入 软件控制端口输入缓冲 具有中断能力 可选的参考电压发生器、电压磁滞发生器 参考电压输入可选择共用参考电压 超低功耗的比较模式 低功耗模式支持中断驱动测量系统比较器B 结构(1/1)比较器B 的结构,如下图所示:比较器B包括:两个模拟量输入端CB0和CB1一个模拟比较器参考电压发生器和输出滤波器还有一些控制单元比较器B 功能使用(1/5)比较器B的主要功能:指出两个输入电压CB0和CB1的大小关系,然后设置输出信号CBOUT的值。如果CB0CB1
3、则:CBOUT1,否则CBOUT0。模拟输入端 参与比较的两个模拟信号通过正、负两个输入电压端:CB0和CB1进入比较器B,输入电流极小。这两个输入端可由用户软件设置,最终能够选择6种信号(CB0、CB1、0.5VCC、0.25VCC、三极管阀值电压和外部参考源),而且能够进行多种组合比较。硬件提供的比较组合如下:两个外部输入比较每个外部输入与0.5VCC或0.25VCC比较每个外部输入与内部基准电压比较比较器B 功能使用(2/5)模拟输入开关通过CBIPSELx及CBIMSELx位,用于选择两个比较器输入终端与相应端口管脚之间连接还是断开。比较器的输入终端可以分别进行控制。通过配置CBIPS
4、ELx/CBIMSELx位可以实现:将外部信号连接到比较器的正端或负端 内部参考电压到相应输出端口管脚选择一个路径 将外部电流源应用到比较器的正端或负端 内部多路选择器的两个端口到外部的映射 CBEX位控制输入多路选择器,改变比较器正端或负端输入信号的顺序。另外,当比较器终端顺序发生改变时,比较器输出信号也发生反转,这使用户可以检测或补偿比较器输入端的偏置电压。比较器B 功能使用(3/5)比较器如比较器B 的结构图所示,比较器位于模拟信号输入和滤波输出之间的部分。比较器对正和负输入终端的模拟信号进行比较。如果正端信号大于负端,则比较器输出CBOUT为高。其中与门负责将比较输出信号进行整形。可以
5、通过CBON 位来关闭或打开比较器。控制位CBEX选择正向或反向输出。比较器B 功能使用(4/5)参考电压发生器COMP_B参考电压的 框图,如下图所示:参考电压发生器用于 产生用于比较器任意 输入端的VREF。如果外部信号用于两个 比较器输入端,应当关闭 内部参考电压发生器,从 而降低电流消耗。比较器B 功能使用(5/5)输出电路最终输出信号的上升沿或下降沿可以设置为具有中断能力。如果不使用中断,可将输出信号送给内部其他模块,作为 其他模块的一个输入信号;还可以由外部引脚引出。另外,比较器B 可以适合于低功耗应用,该模块可通过软件打开/关闭,不用时关闭以便电流消耗最小。比较器B 中断(1/1
6、)中断标志CBIFG,在比较器输出的上升沿或下降沿时都会置位,上升沿或下降沿由CBIES位选择。如果CBIE及GIE位都置位,CBIFG标志将产生中断请求。比较器B 库函数(1/3)比较器 API分成3组函数:处理初始化和输出,处理中断,处理辅助功能。处理初始化和输出的相关API:COMPB_init()COMPB_setReferenceVoltage()COMPB_enable()COMPB_disable()COMPB_outputValue()比较器B 库函数(2/3)处理中断的相关APICOMPB_enableInterrupt()COMPB_disableInterrupt()CO
7、MPB_clearInterrupt()COMPB_getInterruptStatus()COMPB_interruptSetEdgeDirection()COMPB_interruptToggleEdgeDirection()比较器B 库函数(3/3)处理辅助功能的相关APICOMPB_enableShortOfInputs()COMPB_disableShortOfInputs()COMPB_disableInputBuffer()COMPB_enableInputBuffer()COMPB_IOSwap()比较器B 应用举例(1/9)例1、使用CompB,比较输入电压和内部参考电压大小
8、,如果大于内部参考电压2.0V,则CBOUT输出高电平,否则输出低电平,用LED亮灭来标识比较结果。相关程序如下:#include void main(void)WDTCTL=WDTPW+WDTHOLD;/关闭看门狗定时器关闭看门狗定时器 P3DIR|=BIT0;/P3.0输出方向输出方向 P3SEL|=BIT0;/选择选择P3.0/CBOUT引脚为外设功能引脚为外设功能 /配置配置 比较器比较器B CBCTL0|=CBIPEN+CBIPSEL_0;/使能使能V+,输入通道,输入通道CB0 CBCTL1|=CBPWRMD_1;/正常电源模式正常电源模式 CBCTL2|=CBRSEL;/VREF
9、应用到负端应用到负端比较器B 应用举例(2/9)/R-ladder off;bandgap ref voltage(1.2V)CBCTL2|=CBRS_3+CBREFL_2;/supplied ref amplifier to get Vcref=2.0V(CBREFL_2)CBCTL3|=BIT0;/关闭输入缓冲关闭输入缓冲P6.0/CB0 CBCTL1|=CBON;/打开打开CompB _delay_cycles(75);/延时,用于延时,用于comp判断电压大小判断电压大小 _bis_SR_register(LPM4_bits);/进入进入LPM4 _no_operation();/空操
10、作,用于调试空操作,用于调试 比较器B 应用举例(3/9)用库函数调用,实现例1相同功能相关程序如下:void main(void)/关闭看门狗定时器关闭看门狗定时器 WDT_hold(_MSP430_BASEADDRESS_WDT_A_);/选择选择P3.0/CBOUT引脚为外设功能引脚为外设功能 GPIO_setAsPeripheralModuleFunctionOutputPin (_MSP430_BASEADDRESS_PORT3_R_,GPIO_PORT_P3,GPIO_PIN0);/初始化比较器初始化比较器B /CB0连接到正端,连接到正端,/VREF应用到负端,应用到负端,/正常
11、电源模式正常电源模式 COMPB_init(_MSP430_BASEADDRESS_COMPB_,COMPB_INPUT0,COMPB_VREF,COMPB_POWERMODE_NORMALMODE,COMPB_FILTEROUTPUT_DLYLVL1,COMPB_NORMALOUTPUTPOLARITY);比较器B 应用举例(4/9)/VREF应用到负端,选择参考电压为应用到负端,选择参考电压为2V /参考电压为参考电压为 2.0 V,/上线上线 2.0*(32/32)=2.0V,/下线下线 2.0*(32/32)=2.0V COMPB_setReferenceVoltage (_MSP43
12、0_BASEADDRESS_COMPB_,COMPB_VREFBASE2_0V,32,32);/使能使能COMP模块模块 COMPB_enable(_MSP430_BASEADDRESS_COMPB_);/延时,用于延时,用于comp判断电压大小判断电压大小 _delay_cycles(75);比较器B 应用举例(5/9)例2:利用COMPB中断处理能力:Vcompare与内部参考电压1.5V比较,如果超过1.5V,就置位CBIFG,进入中断处理函数。相关程序如下:#include void main(void)WDTCTL=WDTPW+WDTHOLD;/关闭看门狗定时器关闭看门狗定时器 P1
13、DIR|=BIT0;/P1.0/LED设为输出方向设为输出方向 /打开打开CompB CBCTL0|=CBIPEN+CBIPSEL_0;/使能使能V+,输入输入CB0通道通道 CBCTL1|=CBPWRMD_1;/正常电源模式正常电源模式 CBCTL2|=CBRSEL;/VREF应用到负端应用到负端 /R-ladder off;bandgap ref voltage(1.2V)CBCTL2|=CBRS_3+CBREFL_1;/设置参考电压设置参考电压Vcref=1.5V(CBREFL_2)CBCTL3|=BIT0;/关闭输入缓存关闭输入缓存 P6.0/CB0 _delay_cycles(75)
14、;/延时,用于延时,用于comp判断电压大小判断电压大小 比较器B 应用举例(6/9)CBINT&=(CBIFG+CBIIFG);/清除中断标志清除中断标志 CBINT|=CBIE;/在在CBIFG(CBIES=0)上升沿使能上升沿使能CompB中断中断 CBCTL1|=CBON;/使能使能 比较器比较器B _bis_SR_register(LPM4_bits+GIE);/打开全局中断,进入打开全局中断,进入LMP4 _no_operation();/空操作,用于调试空操作,用于调试 /Comp_B ISR 翻转翻转LED#pragma vector=COMP_B_VECTOR_interru
15、pt void Comp_B_ISR(void)CBCTL1=CBIES;/翻转中断跳变沿翻转中断跳变沿 CBINT&=CBIFG;/清除中断标志清除中断标志 P1OUT=0 x01;/翻转翻转P1.0比较器B 应用举例(7/9)用库函数调用,实现例2相同功能相关程序如下:void main(void)/关闭看门狗定时器关闭看门狗定时器 WDT_hold(_MSP430_BASEADDRESS_WDT_A_);/P1.0/LED设为输出方向设为输出方向 GPIO_setAsOutputPin (_MSP430_BASEADDRESS_PORT1_R_,GPIO_PORT_P1,GPIO_PIN
16、0);/初始化比较器初始化比较器B模块模块 /VREF应用到负端应用到负端 /普通电源模式普通电源模式 COMPB_init (_MSP430_BASEADDRESS_COMPB_,COMPB_INPUT0,COMPB_VREF,COMPB_POWERMODE_NORMALMODE,COMPB_FILTEROUTPUT_DLYLVL1,COMPB_NORMALOUTPUTPOLARITY);比较器B 应用举例(8/9)/VREF应用到负端应用到负端 /参考电压为参考电压为1.5V /上限上限1.5*(32/32)=1.5V,/下限下限1.5*(32/32)=1.5V COMPB_setRefe
17、renceVoltage (_MSP430_BASEADDRESS_COMPB_,COMPB_VREFBASE1_5V,32,32);/使能中断使能中断 COMPB_enableInterrupt (_MSP430_BASEADDRESS_COMPB_,CBIE);/使能使能CompB模块模块 COMPB_enable(_MSP430_BASEADDRESS_COMPB_);_bis_SR_register(LPM4_bits+GIE);/打开全局中断,进入打开全局中断,进入LPM4 _no_operation();/空操作,用于调试空操作,用于调试比较器B 应用举例(9/9)#pragma vector=COMP_B_VECTOR_interrupt void COMPB_B_ISR(void)/翻转中断跳变沿翻转中断跳变沿 COMPB_interruptToggleEdgeDirection (_MSP430_BASEADDRESS_COMPB_);/清除中断标志清除中断标志 COMPB_clearInterrupt(_MSP430_BASEADDRESS_COMPB_,CBIFG);/翻转翻转P1.0 GPIO_toggleOutputOnPin(_MSP430_BASEADDRESS_PORT1_R_,GPIO_PORT_P1,GPIO_PIN0);谢谢
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。