admin管理员组

文章数量:1516870

TIM输入捕获

目录

一、输入捕获与输出比较

1、输入捕获简介

2、输出比较简介

3、输出比较与输入捕获的区别

二、频率测量

三、输入捕获各电路

四、主从触发模式

五、输入捕获基本结构

六、PWMI基本结构


一、输入捕获与输出比较

1、输入捕获简介

  • IC输入捕获
  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲问题、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配合主从模式,实现硬件全自动测量

电平跳变是指上升沿或者下降沿,可以通过程序配置。发生电平跳变的瞬间,输入捕获电路会让当前CNT的值锁存在CCR中,存CCR中的意思就是把当前CNT的值读出来,写入到CCR中。

四个边沿信号输入引脚(TIM_CHx),一旦有边沿,比如上升沿,那这一块输入滤波和边沿检测电路就会检测到这个上升沿,让输入捕获电路产生动作,所以这一块的作用和外部中断差不多,都是检测电平跳变,然后执行动作。不过外部中断执行的动作是向CPU申请中断,而这里电路执行的动作就是,控制后续电路,让当前CNT的值,锁存到CCR寄存器中。

 图1-1输入捕获电路与输出比较部分

4个输入捕获和输出比较通道,公用4个CCR寄存器,另外他们的CH1到CH4,4个通道,也是共用的,所以对于同一个定时器,输入捕获和输出比较,只能使用其中一个,不能同时使用。

2、输出比较简介

  • OC输出比较
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出功能

3、输出比较输入捕获的区别

输出比较,引脚是输出端口;输入捕获,引脚是输入端口。

输出比较,是根据CNT 和CCR的大小关系来执行输出动作;输入捕获,是接收到输入信号,执行CNT锁存到CCR的动作。

通用定时器和高级定时器有4个输入捕获通道,都是一样的,没有区别,基本定时器没有输入捕获的功能。

PWMI模式就是PWM的输入模式,是专门为测量PWM频率和占空比设计的。

二、频率测量

 图2-1频率测量

在图2-1中,越往左,频率越高,越往右,频率越低。这里信号都是只有高低电平的数字信号,对于STM32测频率而言,它只能测量数字信号的;如果需要测量一个正弦波,还需要搭建一个信号预处理电路,最简单的就是用运放搭一个比较器,把正弦波转换为数字信号,再输入给STM32就行了。如果测量的信号电压非常高,还要考虑一下隔离的问题,比如用一些隔离放大器、电压互感器等元件,隔离高压端和低压端,保证电路的安全。

总之,经过处理最终输入给STN32的信号需要上图的高低电平数字信号,高电平3.3v,低电平0v。

测量频率方法:

1、测频法:由图2-2左边为例,比如我们要测量这块信号的频率,可以自定一个闸门时间T,通常设置为1s,在1s时间内,对信号上升沿计次,从0开始计次,每来一个上升沿,计次+1,等于多一个周期信号。在1s内来个多少个周期,频率就是多少Hz。

2、测周法:基本原理就是,周期的倒数就是频率。如果能测出一个周期的时间,再取个倒数,就是频率

捕获信号的两个上升沿,测量两个上升沿之间持续的时间。但是实际上,我们并没有一个精度无穷大的秒表来测量时间。测量时间的方法,实际上也是定时器计次,我们使用一个已知的标准频率fc的计次时钟,来驱动计数器。从一个上升沿开始计,计数器从0开始。一直计到下一个上升沿停止。计一个数的时间是1/fc,计N个数,时间就是N/fc。N/fc就是周期,再取个倒数,就得到公式,fx=fc/N。

测频法与测周法的区别:测频法适合测量高频信号,测周法适合测量低频信号。

测频法,在闸门时间内,最好要多出现一些上升沿,计次数量多,有助于减小误差。(假设定了1s的闸门时间,结果信号频率非常低,1s时间没有几个上升沿,甚至一个上升沿都没有,总不能认为频率是0吧。)在计次N很少时,误差会非常大,所以测频法要求,需要频率要稍微高一些。

对于测周法就要求信号频率低一些,低频信号,周期比较长,周期比较长,计次就会比较多,有助于减小误差。否则的话,比如标准频率fc为1MHz,待测信号频率太高(比如待测信号500KHz,那在一个周期内只能计一两个数,如果待测信号在高一些,甚至一个数也计不到,那总不能认为频率无穷大吧)。

所以测周法需要待测信号频率低一些。测频法测量结果更新的慢一些,数值相对稳定;测周法更新的快,数据跳变也非常快。

测频法测量的时闸门时间内的多个周期,自带一个均值滤波,如果在闸门时间内波形频率有变化,那得到的其实是这一段时间的平均频率,时间为1s,每隔1s才能得到一次结果。所以测频法更新慢,测量结果是一段时间的平均值,值比较平滑。

测周法测量一个周期,就能出一个结果,出结果的速度取决于待测信号的频率,一般待测信号都是几百几千Hz。所以测周法结果更新更快,但是由于只测一个周期,所以结果值会受噪声的影响,波动比较大。

中界频率:在测频法和测周法中,计次可能存在正负1误差,比如测频法,在闸门内,并不是每一个周期信号都是完整的,比如在最后时间里,可能会有一个周期刚出现一半,闸门时间就到了,那这只有半个周期,只能舍弃掉或者当作一整个周期来看,因为计次只有整数,不可能计次0.5个数。那么在这个过程,就会出现多计一个,或者少计一个的情况,这就是正负1误差。在测周法中也有,标准频率fc计次,在最后时刻,有可能一个数刚到一半,计时就结束了,那这半个数也只能舍弃或者按一整个数来算了,这里也会出现正负1误差,所以这两个测量法都会存在正负1误差,想要减小正负1误差的影响,就只能尽量多计一些数,当计次N比较大时,正负1对N的影响就会很小。

总结:N越大,正负1误差的影响越小,那当有一个频率,测频法和测周法计次的N相同,那说明误差相同,这就是中界频率。

公式由来:把测频法公式中的N提出来,测周法公式中的N也提出来,令两个方法的N相等,把fx解出来,就得到中界频率fm。

对应图上,当待测信号频率小于中界频率时,测周法误差更小,选用测周法更合适,当待测信号频率大于中界频率时,测频法误差更小,选用测频法更合适。

三、输入捕获各电路

 

 图3-1输入捕获电路图

输入捕获的各部分电路,从左到右来看,是四个通道的引脚(TIM_CHx),可以参考引脚定义表,就可以知道这个引脚是复用在哪个位置。在引脚进来后,又三个输入的异或门,异或门的输入接在通道1,2,3端口。(异或门的执行逻辑是,当三个输入引脚的任何一个有电平翻转时,输出引脚就产生一次电平翻转,)之后输出通过数据选择器(TI1),到达输入捕获通道1,如果数据选择器选择上面一个,那输入捕获通道1的输入,就是3个引脚的异或值,如果选择下面一个,异或门就没有用,4个通道各用各的引脚。(设计这个异或门,其实还是为三相无刷电机服务的,无刷电机有3个霍尔传感器检测转子的位置,可以根据转子的位置进行换相,有了这个异或门,就可以在前三个通道接上无刷电机的霍尔传感器,然后这个定时器就作为无刷电机的接口定时器,去驱动换相电路工作)

输入信号过来,来到了输入滤波器和边沿检测器,输入滤波器可以对信号进行滤波,避免一些高频的毛刺信号误触发,然后边沿检测器,这就和外部中断哪里一样,可以选择高电平触发,或者低电平触发,当出现指定的电平时,边沿检测电路就会触发后续电路执行动作。 

(另外,这里其实设计了两套滤波和边沿检测电路,)第一套电路,经过滤波和极性选择,得到TI1 FP1,输入给通道1(IC1)的后续电路;第二套电路,经过另一个滤波和极性选择,得到TI1 FP2,输入给下面通道2(IC2)的后续电路

同理,下面TI2信号进来,也经过两道滤波和极性选择,得到TI2FP1,和TI2FP2,其中TI2FP1,输入给上面(IC1),TI2FP2输入给下面(IC2)。

这里,两个信号进来,可以选择各走各的,也可以选择进行一个交叉,让CH2引脚输入给通道1,或者 CH1引脚输入给通道2。

做出交叉的目的:

  1. 可以灵活切换后续捕获电路的输入,比如一会相以CH1作为输入,一会想以CH2作为输入,这样就可以通道数据选择器,灵活地进行选择,
  2. 就时可以把一个引脚地输入,同时映射到两个捕获单元,这也是PWMI模式地经典结构。第一个捕获通道,使用上升沿触发,来捕获周期;第二个通道,使用下降沿触发,用来捕获占空比,两个通道同时对一个引脚进行捕获,就可以同时测量频率和占空比。这就时PWMI模式。

TRC信号,也可以选择作为捕获部分输入,TRC信号来源于图3-2

 

图3-2  TRC信号 

看回图3-1输入捕获电路,输入信号进行滤波和极性选择后,来到预分频器,每个通道各有一个,可以选针对前面的信号进行分频,分频之后的触发信号,就可以出触发捕获电路进行工作,每来一个触发信号,CNT的值就会向CCR转运一次,转运的同时,会发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间,处理一些事情的话,就可以开启这个捕获中断,这就是整个电路的工作流程。

比如我们可以配置上升沿触发捕获,每来一个上升沿,CNT转运到CCR一次,又因为这个CNT计数器是由内部的标准时钟驱动的,所以CNT的数值,其实可以用来记录两个上升沿之间的时间间隔,这个时间间隔就是周期,再取个倒数,就是测周法测量的频率。

上升沿用于触发输入捕获,CNT用于计数计时,每来一个上升沿,去一下CNT的值,自动存在CCR里,CCR捕获到的值,就是计数值N。CNT的驱动时钟,就是fc。Fc/N就得到了待测信号的频率。(类似于上面的测周法)

细节问题:每次捕获上升沿后,都要把CNT清0,这样下次上升沿再捕获的时候,取出的CNT才是两个上升沿的时间间隔。

图3-3输入捕获1的细化图

 引脚进来,先经过一个滤波器,滤波器的输入是TI1,就是CH1的引脚,输出的TI1F就是滤波后的信号;fDTS是滤波器的采样时钟来源,下面CCMR1寄存器的ICF位可以控制滤波器的参数。

 CCMR1:参考手册

 

原理:以采样频率对输入信号进行采样,当连续N个值都位高电平,输出才为高电平,连续N个值为低电平,输出才为低电平。如果信号出现高频抖动,导致连续采样N个值都不一样,那输出就不会变化,就可以达到滤波效果。采样频率越低,采样个数N越大,滤波效果越好。

在实际应用中,如果波形噪声比较大,就可以把这个参数设置大一些,这样就可以过滤噪声了。

回到上图3-3输入捕获1细化图,滤波之后信号通过边沿检测器,捕获上升沿或者下降沿,用这个CCER寄存器里的CC1P位,就可以选择极性了。最后得到TI1FP1触发信号,通过数据选择器,进入通道1后续的捕获电路,(这里还会由一套得到TI1FP2触发信号,连通到通道2的后续电路,总共是四种连接方式)。然后经过这里的数据选择器,进入后续捕获部分电路,CC1S位可以对数据选择器进行选择,之后ICPS位,可以配置这里的分频器,可以选择不分频、2分频、4分频、8分频。最后CC1E位,控制输出使能或失能。

如果使能了输出,输入端产生指定边沿信号,经过层层电路,到达最后一步,就可以让这里CNT的值,转运到CCR。因为每次CNT捕获后需要清0,在这里硬件电路就可以在捕获之后自动完成CNT的清0工作。

如何清0 CNT,TI1FP1信号和TI1的边沿信号,都可以通向从模式控制器,比如TI1FP1信号的上升沿触发捕获;TI1FP1还可以也同时触发从模式,这个从模式里面,就有电路,可以自动完成CNT的清0,(可以看出,这个从模式就是完成自动化操作的利器)

 四、主从触发模式

 图4-1主从触发模式图解

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

从模式:就是接收其他外设或者自身外设一些信号,用于控制自身定时器的运行,也就是被别的信号控制。

触发源选择:就是选择从模式的触发信号源的,也可以认为是从模式的一部分,触发源选择,选择指定的一个信号,得到TRGI,TRGI去触发从模式,从模式可以在这个列表里,选这择项操作来在自动执行。

例子:清0CNT。TI1FP1信号自动触发CNT清0,触发源选择,可以选中这里的TI1FP1,从模式执行的操作,就可以选择执行Reset的操作,这样TI1FP1的信号就可以自动触发从模式,从模式自动清0 CNT,实现硬件全自动测量。

 

 

 

五、输入捕获基本结构

图5-1输入捕获基本结构

输入捕获基本结构:只使用了一个通道,目前只能测量频率。

时基单元配置好,启动定时器,CNT就会在预分频之后的这个时钟驱动下,不断自增,这个CNT,就是我们测周法用来计数计时的东西,经过预分频之后这个位置的时钟频率,就是驱动CNT的标准频率fc。标准频率=72M/预分频系数,然后下面输入捕获通道1的GPIO口,输入一个这样的方波信号,经过滤波器和边沿检测,选择TI1FP1上升沿触发,之后输入选择直连的通道,分频器选择不分频,当TI1FP1出现上升沿之后,CNT的当前计数值转运到CCR1,同时触发源选择,选中TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1的上升沿,也会通过上面这一路,去触发CNT清0。(这里会有一个先后顺序,先转运CNT的值到CCR里去,再触发从模式给CNT清零,或者是非阻塞的同时转移,CNT的值转移到CCR,同时0转移到CNT里面去。)

左上角的图:信号触发上升沿,CCR1=CNT,就是CNT的值值转运到CCR1里面去,这是输入捕获自动执行的,然后CNT=0,清零计数器,这是从模式自动执行的,然后再一个周期之内,CNT在标准时钟的驱动下,不断自增,并且由于之前清零过,所以CNT就是从上升沿开始,从0开始计数,一直++,直到下一次上升沿来临,然后执行相同的操作,CCR1=CNT,CNT=0。注意第二次捕获的时候,这个CNT就是由上一次上升沿到这一次上升沿的计数值,这个计数值就自动放在CCR1里面,然后下一个周期,继续同样的过程。所以这个电路工作时,CCR1的值始终保持为最新一个周期的计数器,这个计数值就是这里的N,

然后fc/N就是信号的频率。当我们想要读取信号的频率时,只需要读取CCR1得到的N,再计算fc/N,就行了,不需要读取的时候,整个电路全自动的测量,不需要占用任何软件资源。

注意;CNT的值是有上限的,ARR一般设置为65535,CNT最大也只能计65535个数,如果信号频率太低,CNT计数值可能会溢出。  从模式的触发源选择,只有TI1F1和TI2FP2,没有3和4通道,所以在这里如果想使用从模式自动清零CNT,就只能用通道1和通道2,对于通道3和通道4,就只能开启捕获中断,在中断里手动清零,这样程序会处于频繁中断的状态,比较消耗软件资源。

六、PWMI基本结构

 图6-1PWMI基本结构

PWMI模式:使用了两个通道同时捕获一个引脚,可以同时测量周期和占空比,对比输入捕获,多了下面一个通道,首先,TI1FP1配置上升沿触发,触发捕获和清零CNT,正常的捕获周期, 这时候再来一个TI1FP2,配置为下降沿触发,通过交叉通道,去触发通道2的捕获单元。

这时候发生(左上角图):最开始上升沿,CCR1捕获,同时清零CNT,之后CNT一直++,然后在下降沿这一个时刻,触发CCR2捕获,这是CCR2的值们就是CNT从这里到这里的计数值,就是高电平期间的计数值,CCR2捕获,并不触发CNT清零,所以CNT继续++,直到下一次上升沿,CCR1捕获周期,CNT清零,这样执行之后,CCR1就是一整个周期的计数值,CCR2就是高电平期间的计数值,用CCR2/CCR1,就是占空比了。

 

本文标签: TIM输入捕获