Analog Comparator

smallcracker 2021-01-30 00:00:00
Categories: Tags:

Analog Comparator

一、简介

模拟比较器是一个外设,它能比较两个模拟电压的大小,并通过自身提供的逻辑输出端将比较结果以信号的形式输出。

模拟比较器可以将一个测试电压和一个独立的外部参考电压,共用的外部参考电压或共用的内部参考电压进行比较。它可以把比较结果输出到引脚上,也可以用于触发中断、触发ADC采样。它的中断产生逻辑是独立于ADC触发逻辑的,所以,AC可以基于一个事件产生一个中断,ADC可以基于另一个事件产生触发。比如说,让上升沿触发一次中断,让下降沿触发一次ADC。
比较器可以将测试电压和下面的其中一种电压进行比较

照片
原理演示图
image-20210130173642377
它的头文件是driverlib/comp.h

二、功能说明

比较器通过比较VIN-和VIN+来产生输出VOUT
VIN- < VIN+ , VOUT = 1
VIN- > VIN+ , VOUT = 0
VIN- 的输入源是外部输入,VIN+ 的输入源可以使Cn+,C0+,或者是内部参考源VIREF

三、函数介绍

image-20210130100105290

  1. ComparatorConfigure() 用来配置一个AC模块触发ADC模块的条件、触发中断的条件、和谁比较、正常输出还是反转输出
  2. ComparatorIntClear() 用于清除比较器中断标志,( 小贴士,因为在Contex-M处理器中写入有缓冲,所以执行函数之后过几个周期中断源才可能真正被清除,所以我们推荐在中断函数的一开始就清除中断标识)
  3. ComparatorIntDisable() 失能一个比较器中断
  4. ComparatorIntEnable() 使能一个比较器中断
  5. ComparatorIntRegister() 注册中断函数
  6. ComparatorIntStatus() 获取当前中断状态
  7. ComparatorIntUnregister() 注销一个中断函数
  8. ComparatorRefSet() 设定内部参考电压
  9. ComparatorValueGet() 获取当前比较器输出值,true表示比较器输出是高,false表示比较器输出是低

四、例程

1
2
3
4
5
6
7
8
9
10
11
12
13
SysCtlPeripheralEnable(SYSCTL_PERIPH_COMP0);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_COMP0)){}
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
ROM_GPIOPinTypeComparator(GPIO_PORTC_BASE, GPIO_PIN_7);
ComparatorRefSet(COMP_BASE, COMP_REF_1_65V);
ComparatorConfigure(COMP_BASE, 0,(COMP_TRIG_NONE | COMP_INT_BOTH |COMP_ASRCP_REF | COMP_OUTPUT_NORMAL));
//
// Delay for some time...
//
//
// Read the comparator output value.
//
ComparatorValueGet(COMP_BASE, 0);