TIM输入捕获:
IC(Input Capture)输入捕获
输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR 中, 可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
每个高级定时器和通用定时器都拥有4个输入捕获通道
在高级定时器与通用定时器中,输入捕获电路没有区别,都是一样的,而基本定时器没有入 捕获电路。
可配置为PWMI模式,同时测量频率和占空比
这里的PWMI模式是PWM的输入模式,是专门为车辆PWM频率和占空比设计的。可配合主从 触发模式,实现硬件全自动测
注:对比输出比较,引脚是输出端口,而输入捕获,引脚是输入端口
频率测量:
图中左边频率高,周期短,右边频率低,周期长。
- 测频法:在闸门时间T内,对上升沿计次,得到N,则频率fx=N / T 频率是单位时间内完成周期性变化的次数。
- 测周法:两个上升沿内,以标准频率fc计次,得到N ,则频率 fx=fc / N 意思是:一次标准频率的周期是1/fc,N次就是N/fc,所以频率就是fc/N. 适合测量低频信号
上面两种测量方法都具备正负一的误差(最后一个周期 多或少半个周期),只能将计次N增加,减小正负一对N的影响。
- 中界频率:测频法与测周法误差相等的频率点
- fm=√fc / T
- fm是上面两种方法的式子联立,将fx解出来,就是Fm的值。
当待测信号大于中介频率fm时,测频法误差更小,选用测频法更合适。
当待测信号小于中介频率fm时,测周法误差更小,选用测周法更合适。
输入捕获CH1通道详细框图及分析:
1.TI1是滤波器的输入(CH1的引脚),TI1F是滤波后的输出信号,fDTS是滤波器的采样时钟来源
2.下面的CCMR1寄存器里的ICF位可以控制滤波器的参数
3,。 滤波之后的信号经过边沿检测器,捕获上升沿或下降沿, 用这个CCER寄存器里的CC1P位,就可以选择极性了,最终得到了TI1FP1触发信号,通过数据选择器(就是那个梯形的三输入符号)进入通道1后续的捕获电路(就是分频器及下面的寄存器)
4.CC1S位可以对数据选择器进行选择,之后的ICPS位可以配置分频器(1、2、4、8分频),最后CC1E位控制输出使能或失能,如果使能输出,输入端产生指定边沿信号,经过层层电路到达IC1PS就可以让这里的CNT的值转运到CCR来。
5.记得每捕获一次CNT的值都要把CNT清零,以便于下一次的捕获。
当然,这里的硬件电路就可以在捕获之后自动完成CNT的清零工作,完成自动清零工作可以看向至从模式控制器,TI1FP1信号和TI1的边沿信号都可以通向从模式控制器,比如TI1FP1信号的上升沿触发捕获,通过上面的路径,TI1FP还可以同时触发从模式,在从模式里,就有电路,可以自动完成CNT的清零。
注:当然这个图中应该有123步骤一模一样的电路,得到TI1FP2触发信号,连通到通道2的后续电路,这图中并没有画出来。同样,通道2有TI2FP1,连通到通道1的后续,通道二也有TI2FP2,联通到通道2的后续,经过数据选择器,进入后续的捕获电路。
主从触发模式:
主从触发模式就是包含主模式,从模式,触发源选择。
- 主模式:主模式可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设,所以这部分叫主模式。
- 从模式:从模式就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制,所以这部分叫从模式。
- 触发源选择:触发源选择就是选择从模式的触发源信号源的,可以认为它是从模式的一部分。
触发源选择: 选择指定的一个信号,得到TRGI,TRGI取触发从模式,在从模式列表里,选择一项操作来自动执行。
如果想完成TI1FP1信号自动触发CNT清零,那触发源选择就可以选中这里的TI1FP1,,从模式执行的操作可以选择Reset的操作,这样就可以实现TI1FP1信号自动触发从模式,从模式自动清零CNT,实现硬件全自动测量。
配置时基单元,GPIO,然后输入捕获1的GPIO口输入一个方波信号,经过滤波器和边沿检测,选择TI1FP1为上升沿触发,之后输入选则直连的通道,分频器选择不分频,当TI1FP1出现上升沿后,CNT的当前计数值就会转运到CCR1里,同时触发源选择,选择TI1FP1为触发信号,从模式选择复位操作,转运TI1FP1的上升沿也会通过上面这一路,取触发CNT的清零。
注:1.ARR一般设置为最大数65535,那CNT最大也就65535,如果信号频率太低(周期长),CNT计数值可能会溢出。
2.还有从模式的触发源选择只有TI1FP1和TI2FP2,没有TI3和TI4的信号,所以想使用从模式自动清零,就只能使用通道1和2对于通道3和4只能手动开启捕获中断手动清零了。
PWMI模式,使用了两个通道调试捕一个引脚,可以调试测量周期和占空比,比输入捕获基本结构多了一个TI1FP2,可以配置为下降沿触发,通过交叉通道,取触发通道2的捕获单元,当上升沿来临CCR1=CNT,CNT=0,CNT继续++,当下降沿来临,CCR2=CNT,然后直至下一个上升沿循环往复。
可以看出:
CCR1是一整个周期的计数值.
CCR2是周期中高电平的计数值.
所以CCR2/CCR1,就是占空比了。
输入捕获对应的函数及用法:
- 输入捕获的初始化函数(配置1个通道)
- 输入捕获初始化函数(快速配置两个通道,例如PWM1模式)
- 给输入捕获结构体赋一个初始值
- 选择输入触发源TRGI,对应上面主从触发模式图片中的从模式触发源选择
- 选择输出触发源TRGO,对应主模式输出的触发源选择。
- 选择从模式,对应主从模式图片中从模式部分。
7~10. 分别单独配置通道1、2、3、4的分频器。
11~14. 分别读取四个通道的CCR,且与SetCompare1~4对应,
在输出比较模式下,CCR是只写的,用要SetCompare1~4 写入。
在输入捕获模式下,CCR是只读的,要用GetCapture1~4读出。
配置输入捕获的基本步骤:
- RCC开启时钟,把GPIO和TIM的时钟打开。
2.GPIO初始化,把GPIO配置成输入模式
3. 配置时基单元,让CNT计数器在内部时钟的驱动下自增运行
4.配置输入捕获单元,包括滤波器,极性选择,分频器等等参数
5.选择从模式的触发源,TI1FP1
6.选择触发后执行的操作,Reset