目录
一,引入
二,具体结构
三,实现步骤
四,PWM输入模式
一,引入
上篇博客,我们对于定时器的计数核心——时基单元作了细致的了解。这篇博文,我们来介绍定时器的四大功能模块之一——输入捕获模块。
输入捕获模块,顾名思义,当外界有电平输入MCU时,定时器的输入捕获模块能够捕获到电平,进而通过时基单元(计数器),记录捕获的电平的时间、占空比等数据。
了解了大体功能后,我们来具体了解输入捕获功能的具体结构与实现步骤。
二,具体结构
图 2.1 为输入捕获功能的框图:
图 2.1 输入捕获模块
此处,我们以通道 1 为例。
TIMx_CH1为外界电平输入引脚,TIMx_CHy的定义引脚可在数据手册中的引脚定义目录查看(图2.2)。
图 2.2 引脚定义表
注意到,在通道1至3上,连接着一个异或门。异或门的功能机理为“相异出1,相同出0”——当异或门的两个(或多个)输入端口的逻辑值不同时(一个为0,另一个为1),输出端口将输出高电平(逻辑1);而当输入端口的逻辑值相同时(都为0或都为1),输出端口将输出低电平(逻辑0)。这个异或门是用来连接三相无刷电机的霍尔传感器的,在此处不作说明。
/*
本人曾写过一篇博客,介绍无霍尔传感器控制无刷电机换相(无感控制),原文指路:
四轴-无刷电机无感控制(BLDC)-CSDN博客
*/
不看异或门:电平通过TIMx_CH1端口进入定时器,通过输入滤波器和边缘检测器后,通过边沿检测,到达预分频器,最后到达捕获/比较寄存器。当发生有效的电平转换时(通过通道1的电平发生翻转,被捕获/比较寄存器检测到),计数器中的值传到捕获/比较寄存器中(输入比较模块框图解释)。
由上述语段,可以发现,捕获/比较寄存器(TIMx_CCRy)既需要检测电平变化,又需要储存计数器中的值,且捕获比较寄存器也有影子寄存器。(关于影子寄存器的内容,可参考本人上一篇博客,指路:机器人是怎么计时的(通用定时器 - 时基单元)-CSDN博客)
介绍一下输入捕获的中断。
当捕获事件发生时,相应的CCxIF标志(捕获比较中断标志,只在需要中断时才有用)被置’1’。如果使能了中断(CCxIE)或者DMA(CC1DE)操作,则将产生中断或者DMA。如果捕获事件发生时CCxIF标志已经为高,那么重复捕获标志CCxOF被置’1’。
上述文字中所提及的“标志”,都是寄存器中所需 读/写的位 的名称。
其中,重复捕获标志(CCxOF)的作用是,当捕获事件发生时(有电平进入定时器,CCxIF标志被置1),当正在发生此次事件的中断时,又发生了一次捕获事件。
为了记录重新发生的捕获事件,提醒用户有一次新的捕获事件未被执行,便有了这个“重复捕获标志”,当然,如果CCxOF被置1后,又有新的捕获事件发生,第三次捕获的数据便会遮盖第二次的捕获数据,毕竟重复捕获标志只有一个。
关于中断,就是框图上那个像闪电一样的箭头,上面写着“CCxI”。
以上,便是输入捕获通道的具体结构。
下面,我们介绍实现步骤。
三,实现步骤
以下,是官方参考手册(不是数据手册)中关于 如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中:
图 3.3 DMA/中断使能寄存器
通过配置所选寄存器中的特定位的数据,可以使输入捕获模块执行输入捕获的功能。
四,PWM输入模式
在输入捕获框图中,我们可以看到如图4.1所示的图像:
图 4.1 PWM输入捕获
此处,我们只介绍TI1FP2,它的功能是,通过通道1的电平,可以同时到达捕获/比较寄存器1和捕获/比较寄存器2。这样,一组含有高低电平的数据进入MCU时,MCU能够同时检测它的高低电平信号的时间数据,图 4.2 说明了双通道测量数据:
图 4.2 双通道测量数据
通过时序图,我们可以看到通过IC1、IC2分别计数的过程,配置方法如下:
可以看到,PWM输入模式需要配置从模式控制器为复位模式,在一轮计数完成后(计数值达到预设的周期匹配值),计数器中的数据会复位(如图4.2)。而两个输入信号分别配置为上升沿有效与下降沿有效,就能同时记录PWM的高低电平时间。
以上,便是输入捕获模式的介绍,欢迎交流喔!