# APM32F411的COMP模块使用随笔
在嵌入式系统中COMP(比较器模块)是一种常见的硬件模块,其一般有一个同相输入端、一个反相输入端和一个输出端,主要功能为比较同相反相输入,并在输出端进行输出比较结果。
## APM32F411的COMP模块介绍
APM32F411中共有两个COMP(COMP1和COMP2)。根据参考手册描述,COMP1支持在超低功耗模式下运行;COMP2支持轨对轨输入(即输入电压范围为芯片的最小负电压至最大电压),速度可调节。这两个COMP还可以融合成一个窗口比较器使用。COMP模块的输出还可以控制是否反相。
实际上COMP模块在低功耗模式下的运行功能暂无用处,因为APM32F411中COMP没办法将MCU从低功耗模式中唤醒。
COMP模块是没有单独的时钟使能位,其是挂载在SYSCFG模块时钟上的,在使用时需要注意使能SYSCFG时钟。
COMP模块的输入引脚需要被配置为模拟输入模式,依据1.4版本的APM32F4XX_SDK中的API,以COMP2的同相输入引脚PC2为例,GPIO的参考配置代码如下:
void GpioInit(void)
{
GPIO_Config_T gpio;
RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOC);
gpio.mode = GPIO_MODE_AN;
gpio.speed = GPIO_SPEED_50MHz;
gpio.pupd = GPIO_PUPD_NOPULL;
gpio.pin = GPIO_PIN_2;
GPIO_Config(GPIOC, &gpio);
}
附上结构框图:
从框图看来,COMP1的同相输入固定为PC0,但在作为窗口比较器时会与COMP2的同相输入端短路,COMP1的反相输入可选择PC1或是参考电压VREFINT;
而COMP2的同相输入固定为PC1,反向输入可选PC3、参考电压VREFINT或是参考电压的1/4、1/2、3/4。
## APM32F411的COMP模块使用
APM32F411的COMP模块只能与定时器模块配合使用,COMP模块的输出可以定向到定时器上,作为高级定时器的刹车信号控制PWM输出,或是作为定时器的输入捕获信号计算超过阈值电压的频率和脉宽,又或是作为计数器的外部时钟源信号使用。
OUTVAL表示的是COMP的输出状态,可在COMP的状态控制寄存器中查看,但无法在IO上体现。
在使用时会出现的一些细节:
- COMP模块的输出在作为高级定时器的刹车信号时,当同相输入信号大于反相输入信号时,COMP输出逻辑电平1,定时器接收到刹车信号,停止PWM输出;当同相信号小于反相信号时,COMP输出恢复逻辑电平0,定时器将在下一次时钟更新时恢复PWM输出。
- COMP模块输出在作为定时器外部时钟源信号时,需要开启定时器的从模式功能,并将触发输入信号配置为外部输入触发。
|