跳到主要内容

TIM输入捕获

1. 输入捕获简介

输入捕获(IC, Input Capture)。

输入捕获模式下,当通道输入引脚出现指定电平的跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。

每个高级定时器和通用定时器都拥有4个输入捕获通道。

可配置为PWMI模式,此时可以同时测量频率和占空比。

可配置为主从触发模式,实现硬件全自动测量。

对于同一个定时器,只能同时存在输入捕获/输出比较其中一种模式。

Image

将PWMI和主从触发模式相结合,测量频率占空比就是硬件全自动执行的流程了。需要测量时,即直接读取CCR的值。

2. 频率测量

对于STM32测量频率而言,它只能是测量数字信号。

Image

如果你需要测量正弦波,还需要搭建一个信号预处理电路,比如用运放搭一个比较器,把正弦波转化为数字信号。

测高频适合测频法,低频适合测周法。

测频法的时候,N可能出现多出一个或者少一个的情况,此时就要引出正负1误差。要想减小正负1误差的影响,就只能多计一些数。

3. 测周法实现

我们重新看通用定时器框图:

Image

最左边是四个通道的引脚。参考引脚定义表,就能知道这个引脚是复用在了哪个位置。

引脚进来之后,有一个三输入的异或门,该异或门的输入接在了通道1,2,3端口,异或门的执行逻辑是,当三个输入引脚的任何一个有电平翻转时,输出引脚就产生一次电平翻转。之后输出通过数据选择器,到达输入捕获通道1。数据选择器如果选择上面一个,那输入捕获通道1的输入,就是3个引脚的异或值。如果选择下面一个,那异或门就没有用,4个通道各用各的引脚。

异或门的设计目的主要还是服务于三相无刷电机

TRC信号,也可以选择作为捕获部分的输入。

输入信号进行滤波和极性选择后,来到预分频器;每个通道各有一个预分频器,分频后的触发信号,可以触发捕获电路进行工作。每来一个触发信号,CNT的值,就会向CCR转运一次。

转运的同时会发生一个捕获事件。这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间处理一些事情的话,就可以开启捕获中断。

我们可以配置上升沿触发捕获,每来一个上升沿,CNT转运到CCR一次。

CNT的数值,可以用来记录两个上升沿之间的时间间隔,这个时间间隔就是周期,再取个倒数就是测周法测量的频率了。

总的来说,上升沿用于触发输入捕获,CNT用于计数计时,每次捕获之后都要把CNT清零(下次上升沿捕获之后,取出的CNT才是两个上升沿的时间间隔),这一清零操作可以通过设置主从触发模式自动完成。

4. 输入捕获通道

引脚进来,还是先经过一个滤波器,滤波器的输入是TI1,就是CH1的引脚。

Image

输出的TI1F,就是滤波后的信号。fDTS是滤波器的采样时钟来源。

这几位定义了TI1输入的采样频率及数字滤波器长度。

Image

数字滤波器是由一个事件计数器组成,它记录到N个事件后会产生一个输出的跳变,简单理解下来,该滤波器工作原理就是:以采样频率对输入信号进行采样,当连续N个值都为高电平,输出才为高电平;连续N个值都为低电平,输出才为低电平。

如果信号出现高频抖动,导致连续采样N个值不全都一样,那输出就不会变化,这样就可以达到滤波的效果。

采样频率越低,采样个数N越大,滤波效果就越好。

在实际应用中,如果波形噪声比较大,采样频率可以设置的大一些,用以滤除噪声。

滤波之后的信号通过边沿检测器捕获上升沿或者下降沿。

用CCER寄存器里的CC1P位,就可以选择极性,最终得到TI1FP1触发信号。通过数据选择器,进入通道1后续的捕获电路。通道2有TI2FP1,连通到通道1的后续;还有TI2FP2,连通到通道2的后续。(实际上还有一套一样的电路得到TI1FP2触发信号,随后进入通道2)

CC1S位可以对数据选择器进行选择,之后ICPS位可以配置分频器。分频器可以选择不分频、2分频、4分频、8分频。

CC1E位,可以控制输出使能或者失能。

如果使能了输出,输入端产生指定边沿信号,经过层层电路到达最终端,便可以让CNT的值转运到CCR里面去。每捕获一次CNT的值,都要把CNT清零。

在该电路中,硬件电路可以在捕获之后自动完成CNT的清零工作。TI1FP1信号和TI1ED的边沿信号,都可以通向从模式控制器(如TI1FP1信号的上升沿触发捕获,还可以同时触发从模式,从模式中有电路可以自动完成清零)。

5. 主从触发模式

主从触发模式是主模式、从模式和触发源选择这三个功能的简称。

Image

主模式,可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设。

从模式,接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,本质上是接收别的信号。故称为从模式。

触发源选择,就是选择从模式的触发信号源。选择指定的一个信号,得到TRGI,TRGI触发从模式,从模式可以在该列表里,选择一项操作自动执行。

提示

如果想让TI1FP1信号自动触发CNT清零,触发源选择可以选择TI1FP1,从模式执行的操作,可以选择执行Reset的操作。

这样,TI1FP1的信号可以自动触发从模式,从模式自动清零CNT。从而实现了硬件全自动测量。

主模式触发:

Image

从模式触发:

Image

6. 输入捕获基本结构

输入捕获基本结构:

Image

在该结构中只使用了一个通道,所以只能测量频率。

时基单元配置好后,启动定时器,CNT就会在预分频之后的这个时钟驱动下,不断的自增。

经过预分频之后这个位置的时钟频率,就是驱动CNT的标准频率fcf_c

在这里,标准频率=72M/预分频系数。选择TI1FP1为上升沿触发,输入选择直连的通道,分频器选择不分频,当出现上升沿之后,CNT当前的计数值转运到CCR1里面。

CNT最大只能计到65535,所以,如果信号频率太低那么,CNT的值,就会溢出。

提示

因为CNT计数的快慢是根据时基单元的时钟频率而变化的,如果时钟频率很高,CNT增长非常快,如果被测信号频率太低,完全有可能CNT计满65536都不到被测信号的一个周期.

在这里,只有TI1FP1和TI2FP2,没有TI3和TI4,想使用从模式自动清零CNT,只能用通道1/2,对于通道3/4,只能开启捕获中断,在中断中手动清零。

7. PWMI基本结构

PWMI基本结构:

Image

要想测量占空比,首先,TI1FP1配置上升沿触发,触发捕获和清零CNT,正常捕获周期,这时再来一个TI1FP2,配置为下降沿触发,通过交叉通道,去触发通道2的捕获单元。

注意

此时会发生什么?

Details

最开始上升沿,CCR1捕获,同时清零CNT,这个时候CNT开始累加计数;直到下降沿时,触发CCR2捕获,此时CCR2的值就是CNT在高电平期间的计数值。此时,CCR2/CCR1就是占空比。

这也是PWMI的基本原理,使用两个通道来捕获频率和占空比的思路。

可以配置两个通道同时捕获第二个引脚的输入,此时即为使用TI2FP1和TI2FP2两个引脚。这两个输入可以灵活切换。