![cathy的头像 cathy的头像](https://mcu.eetrend.com/files/styles/picture200/public/letter-avatars/u-593.png?itok=XTs2kpZ8)
CMP特性
-
比较器迟滞程度可配
-
定时器输出作为比较器消隐源
-
比较器输出极性可配
-
比较器输出速度可配
-
比较器同相和反相输入源可选:
— I/O引脚
— 内部参考电压和三个系数分压值(1/4,1/2,3/4)
-
支持输出重定向功能:
— 普通I/O
— 定时器断路输入TMRx_BRK
— 定时器输入捕获TMR_CH
— 定时器输出比较参考值清零TMR_CH_CLR
-
结合EXINT产生中断,从低功耗模式唤醒
CMP可用于多种功能,包括:
- 由模拟信号触发从低功耗模式唤醒
- 模拟信号调节
- 与定时器的PWM输出结合使用时,组成逐周期的电流控制环路
CMP功能介绍
CMP功能框图
![“图1.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273210-1.png)
迟滞
寄存器CMP_CTRLSTS的CMPHYST[1:0]控制比较器迟滞输出,该功能可避开噪声信号带来的虚假传输信号,如果不需要迟滞,可以关闭掉。
![“图2.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273211-2.png)
输出消隐功能
寄存器CMP_CTRLSTS的CMPBLANKING[2:0]位用于选择比较器消隐窗口的来源,该功能可以用于防止电流调节在PWM起始时刻产生的尖峰电流。
![“图3.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273212-3.png)
干扰滤波器
干扰滤波器可以用来滤除毛刺和噪声干扰。
滤波器的敏感性由H_PULSE_CNT和L_PULSE_CNT 位控制。滤波器的敏感性会影响相同的连续采样的数量,在滤波器输入上检测到此类连续采样时,才能将某信号电平变化视为有效切换。例如H_PULSE_CNT=2和L_PULSE_CNT=1时干扰滤波器时序图,如下:
![“图4.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273213-4.png)
注:因为滤波器采样数据需要时钟,系统在深度睡眠模式下关闭比较器时钟,因此,要让比较器在深度睡眠模式下工作,必须在进入深度睡眠模式前关闭滤波器(G_FILTER_EN寄存器中的GFE=0)。
CMP中断
比较器输出从内部连接到扩展中断和事件控制器,能够产生中断或事件。该机制还可以用于退出低功耗模式。
比较器通过EXINT线21来产生中断或事件。
应用实例
下面介绍了比较器的三个应用实例,分别是:
- 输出消隐功能
- 干扰滤波功能
- 深度睡眠模式唤醒
这三个实例演示了比较器的用途,并介绍了它们与定时器等外设联合工作的方式,为了方便用户快速入门使用AT32F421xx的比较器,本文档介绍的三个应用实例的工程代码都可以在BSP软件包的AT32F421_Firmware_Library_V2.x.x\project\at_start_f421\examples\cmp中获取到,以下三个实例对应工程名称分别为:blanking,glitch_filter和deep_sleep_mode。
注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
输出消隐功能
前面提到了输出消隐的功能,下面来看一下这个功能的具体用法,首先我们需要在TMR1/3/15中选择一个TMR_CHx来作为比较器的消隐窗口,这里需要相应的配置好CMP_CTRLSTS中的CMPBLANKING位来进行选择。由于没有单独的使能位,只要此位非0就表示开启了blanking功能。这里我们选择TMR1_CH1的输出比较PWM模式1来作为CMP的消隐窗口,外部输入100kHz的方波来模拟CMP同相输入端。则可以得到如下波形:
![“图5.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273214-5.png)
干扰滤波功能
对于干扰滤波功能也使用TMR来做一个辅助测试,使用TMR1的PWM模式来模拟CMP同相输入信号,然后完成对CMP比较后的输出波形的滤波。配置方式如下:
- 配置TMR1_CH1为PWM模式2,频率468.7KHz,周期2.1333us,占空比50%
- CMP滤波配置为H_PULSE_CNT=63,L_PULSE_CNT =0,即滤掉64个PCLK的高电平
- 连接TMR1_CH1(PA8)与CMP_NINV(PA1)
在主频120mHz时,每个PCLK周期为8.33ns,64个PCLK就是533.33ns,CMP滤波前高电平时长为1066.66ns,则CMP滤波后高电平占空比减半,即为25%占空比。但是,以上仅为理论值,实际测试发现最终输出会有误差,这是由于CMP输出有一定的偏移,在无滤波的情况下实际CMP输出的高电平长度会比输入多26ns,偏移量会随着输入频率的增加而增加,最多26ns。实测得到的波形如下:
![“图6.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273215-6.png)
深度睡眠模式唤醒
利用比较器的以下两个特性:
- CMP极性选择逻辑和输出端口的重定向工作独立于PCLK时钟
- CMP输出可以连接到EXINT线21
可以将MCU从深度睡眠模式唤醒,只需要在使能CMP的基础上,将EXINT 21配置为中断或事件模式即可。需要注意的是在退出深度睡眠模式后需要重新配置系统时钟,具体配置方法请参考BSP提供的example。
![“图7.](https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273216-7.png)
来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。