通道的概念
如下图右半部分,为定时器的总体结构框图:
可以看出,在时基单元下方,有四个长条形的结构,我们将其称之为:通道1~通道4;每一个通道都会连接一个IO引脚(对应左半部分IO引脚)。
有了这些引脚之后,我们即可以把一些外部信号通过引脚输入到定时器内部进行测量(称之为输入捕获),也可以通过定时器产生一些精确定时的信号通过引脚输出(称之为输出比较)。
输入捕获简介
当我们把外部的信号通过引脚输入进来,定时器会去检测输入信号的变化,比如说当外部信号产生跳变(上升沿或下降沿)时,定时器会对计数器的当前值进行“拍照”,并存储在CCR寄存器里的过程,称之为输入捕获。
把CCR里面的值读取出来,就知道跳变的时间了。【CCR:捕获/比较寄存器,既可以被输入捕获所使用,也可以被输出比较所使用】。
- 关于“拍照”的作用
1、测脉宽:当我们想测量脉冲信号的脉宽时,我们可以同时把这个信号输入给通道1和通道2,让通道1去测量这个信号的上升沿,通道2去测量这个信号的下降沿。将CCR1和CCR2里面的值相减就能得到脉宽。
上述方法需要两个IO引脚。
2、测PWM参数:对于PWM信号(脉冲宽度调制信号),有两个重要的参数:周期和占空比;而这两个参数可通过输入捕获+从模式控制器去测量。
输入捕获的工作原理
如下为输入捕获的内部结构(简要版):
-----模块简要分析-----
1、输入滤波:将外部信号的毛刺进行滤除,从而得到一个纯净的信号;
2、边沿检测:对输入信号的变换边缘进行检测。它有两个输出,一个叫做上升沿脉冲,一个叫做下降沿脉冲,分别对应了上升/下降沿的响应。
3、信号选择:实际上就是一个多路复用器,用来对捕获上升沿还是捕获下降沿进行选择。
4、分频:对应一个分频器,例如将分频系数设置为2,那么左侧每产生两个脉冲,右侧才会输出一个脉冲。
输出的脉冲会触发一个CCx事件(x对应通道号),这个事件会触发“拍照”功能,也就是把计数器的值存储在CCR里面。并且可通过配置,由CCx去产生一个中断。
【注意】其分频系数包括:1 / 2 / 4 / 8
1、输入滤波
原理:我们可以等间隔对输入信号进行采样(读取信号高低电平),再规定一个正整数N,例如当一开始为低电平时,只有连续采集到超过N个高电平,才会认为它是一个从低电平到高电平的上升沿。
以N=4为例,如下图所示:
基于上述工作原理,对于滤波器有两个重要参数:采样率、判定次数N。通过配置这两个参数来改变滤波器的性能。
采样率通过内部RCC的时钟频率CN_INT分频( 1 / 2 / 4 )后来获取;对于输入滤波器,其参数也可以设置,通过设置其参数,可继续对DTS进行分频,而且也可以设置判定次数N。对于输入滤波器来说,可以取以下的16个值之一:
0000 | 不进行滤波 | 1000 | f=DTS/8 | N=6 | |
0001 | f=CK_INT | N=2 | 1001 | f=DTS/8 | N=8 |
0010 | f=CK_INT | N=4 | 1010 | f=DTS/16 | N=5 |
0011 | f=CK_INT | N=8 | 1011 | f=DTS/16 | N=6 |
0100 | f=DTS/2 | N=6 | 1100 | f=DTS/16 | N=8 |
0101 | f=DTS/2 | N=8 | 1101 | f=DTS/32 | N=5 |
0110 | f=DTS/4 | N=6 | 1110 | f=DTS/32 | N=6 |
0111 | f=DTS/4 | N=8 | 1111 | f=DTS/32 | N=8 |
2、信号选择
对于通道1和通道2,可以相互引用(上图所示);对于通道3和通道4之间也可以相互引用。
【小的复用器用于选择检测上升沿还是下降沿,大的复用器用于选择通道;对于前文中,输入捕获的简要版结构框图,其省略了大的复用器】
- 相互引用的作用
只用一个IO引脚测脉宽:假如我们还是要测量脉冲信号的脉宽,将输入信号接到通道1,而通道2悬空;输入信号经过边沿检测,产生一路上升沿脉冲和下降沿脉冲后,通过相互引用分别进入IC1和IC2,随后进入CCR1和CCR2,读取数据得到脉宽。
3、CCx事件和CCx中断
当CCx事件产生时,可以触发CCx中断。当CCx事件发生时,CCx中断标志位会由硬件自动置1,从而触发中断,但其不会自动清0,需要手动清除。
附输入捕获模块的完整版框图: