跳转到主要内容

AT32F421 CMP使用指南

<strong><font color="#4e5e9e">CMP特性 </font> </strong>

<ul>
<li>
<p>比较器迟滞程度可配</p>
</li>
<li>
<p>定时器输出作为比较器消隐源</p>
</li>
<li>
<p>比较器输出极性可配</p>
</li>
<li>
<p>比较器输出速度可配</p>
</li>
<li>
<p>比较器同相和反相输入源可选:</p>
<p> — I/O引脚</p>
<p> — 内部参考电压和三个系数分压值(1/4,1/2,3/4)</p>
</li>
<li>
<p>支持输出重定向功能:</p>
<p> — 普通I/O</p>
<p> — 定时器断路输入TMRx_BRK</p>
<p> — 定时器输入捕获TMR_CH</p>
<p> — 定时器输出比较参考值清零TMR_CH_CLR</p>
</li>
<li>
<p>结合EXINT产生中断,从低功耗模式唤醒</p>
</li>
</ul>
<p>CMP可用于多种功能,包括:</p>
<ul>
<li>由模拟信号触发从低功耗模式唤醒</li>
<li>模拟信号调节</li>
<li>与定时器的PWM输出结合使用时,组成逐周期的电流控制环路</li>
</ul>

<strong><font color="#4e5e9e">CMP功能介绍 </font> </strong>

<strong>CMP功能框图</strong>

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273210-1.png…; alt=“图1. CMP功能框图" /></center><center><i>图1. CMP功能框图</i></center>

<strong>迟滞</strong>

寄存器CMP_CTRLSTS的CMPHYST[1:0]控制比较器迟滞输出,该功能可避开噪声信号带来的虚假传输信号,如果不需要迟滞,可以关闭掉。

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273211-2.png…; alt=“图2. 比较器迟滞" /></center><center><i>图2. 比较器迟滞</i></center>

<strong>输出消隐功能</strong>

寄存器CMP_CTRLSTS的CMPBLANKING[2:0]位用于选择比较器消隐窗口的来源,该功能可以用于防止电流调节在PWM起始时刻产生的尖峰电流。

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273212-3.png…; alt=“图3. 比较器输出消隐" /></center><center><i>图3. 比较器输出消隐</i></center>

<strong>干扰滤波器</strong>

干扰滤波器可以用来滤除毛刺和噪声干扰。

滤波器的敏感性由H_PULSE_CNT和L_PULSE_CNT 位控制。滤波器的敏感性会影响相同的连续采样的数量,在滤波器输入上检测到此类连续采样时,才能将某信号电平变化视为有效切换。例如H_PULSE_CNT=2和L_PULSE_CNT=1时干扰滤波器时序图,如下:

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273213-4.png…; alt=“图4. 干扰滤波器时序图" /></center><center><i>图4. 干扰滤波器时序图</i></center>

注:因为滤波器采样数据需要时钟,系统在深度睡眠模式下关闭比较器时钟,因此,要让比较器在深度睡眠模式下工作,必须在进入深度睡眠模式前关闭滤波器(G_FILTER_EN寄存器中的GFE=0)。

<strong>CMP中断</strong>

比较器输出从内部连接到扩展中断和事件控制器,能够产生中断或事件。该机制还可以用于退出低功耗模式。

比较器通过EXINT线21来产生中断或事件。

<strong><font color="#4e5e9e">应用实例</font> </strong>

下面介绍了比较器的三个应用实例,分别是:

<ul>
<li>输出消隐功能</li>
<li>干扰滤波功能</li>
<li>深度睡眠模式唤醒</li>
</ul>

这三个实例演示了比较器的用途,并介绍了它们与定时器等外设联合工作的方式,为了方便用户快速入门使用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)进行简单修改即可。

<strong>输出消隐功能</strong>

前面提到了输出消隐的功能,下面来看一下这个功能的具体用法,首先我们需要在TMR1/3/15中选择一个TMR_CHx来作为比较器的消隐窗口,这里需要相应的配置好CMP_CTRLSTS中的CMPBLANKING位来进行选择。由于没有单独的使能位,只要此位非0就表示开启了blanking功能。这里我们选择TMR1_CH1的输出比较PWM模式1来作为CMP的消隐窗口,外部输入100kHz的方波来模拟CMP同相输入端。则可以得到如下波形:

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273214-5.png…; alt=“图5. 输出消隐波形" /></center><center><i>图5. 输出消隐波形</i></center>

<strong>干扰滤波功能</strong>

对于干扰滤波功能也使用TMR来做一个辅助测试,使用TMR1的PWM模式来模拟CMP同相输入信号,然后完成对CMP比较后的输出波形的滤波。配置方式如下:

<ul>
<li>配置TMR1_CH1为PWM模式2,频率468.7KHz,周期2.1333us,占空比50%</li>
<li>CMP滤波配置为H_PULSE_CNT=63,L_PULSE_CNT =0,即滤掉64个PCLK的高电平</li>
<li>连接TMR1_CH1(PA8)与CMP_NINV(PA1)</li>
</ul>

在主频120mHz时,每个PCLK周期为8.33ns,64个PCLK就是533.33ns,CMP滤波前高电平时长为1066.66ns,则CMP滤波后高电平占空比减半,即为25%占空比。但是,以上仅为理论值,实际测试发现最终输出会有误差,这是由于CMP输出有一定的偏移,在无滤波的情况下实际CMP输出的高电平长度会比输入多26ns,偏移量会随着输入频率的增加而增加,最多26ns。实测得到的波形如下:

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273215-6.png…; alt=“图6. 干扰滤波波形" /></center><center><i>图6. 干扰滤波波形</i></center>

<strong>深度睡眠模式唤醒</strong>

利用比较器的以下两个特性:
<ul>
<li>CMP极性选择逻辑和输出端口的重定向工作独立于PCLK时钟</li>
<li>CMP输出可以连接到EXINT线21</li>
</ul>

可以将MCU从深度睡眠模式唤醒,只需要在使能CMP的基础上,将EXINT 21配置为中断或事件模式即可。需要注意的是在退出深度睡眠模式后需要重新配置系统时钟,具体配置方法请参考BSP提供的example。

<center><img src="https://mcu.eetrend.com/files/2022-10/wen_zhang_/100564513-273216-7.png…; alt=“图7. 深度睡眠模式唤醒" /></center><center><i>图7. 深度睡眠模式唤醒</i></center>

来源:<a href="https://mp.weixin.qq.com/s/3yqDPIOxVBMYkRGDp8ITQA">AT32 MCU 雅特力科技</a>
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。