笔记 13:STM32F4的输入捕获

一.原理介绍
通用定时器2-5的总框图
在这里插入图片描述
上图的红色框里面的部分对应如下部分:
在这里插入图片描述

  1. 第一部分:滤波
    在这里插入图片描述

由图中我们可以看到,滤波器递减计数器的输入有两个,一个是定时器的输入频率(TIMxCLK),一般为 84Mhz/168Mhz(看该定时器在那个总线上),一个是我们可以设定的值fdts,是根据TIMx_CR1的CKD[1:0]的设置来确定的。如果我们设置CKD[1:0]=01,则是将定时器输入频率2分频=fdts。
在这里插入图片描述
至于如何起到滤波作用,还需要用到另外一个位(TIMx 捕获/比较模式寄存器 1 (TIMx_CCMR1)):
在这里插入图片描述
假设 IC1F[3:0]=0011,则8个事件才视为一个有效边沿。
在上面两个位设置完毕之后,如果我们设置 IC1 映射到通道 1 上,且
为上升沿触发,那么在捕获到上升沿的时候那么在,会以fdts=1/2定时器输入频率(相当于2倍定时器周期时间)连续采样 8 次通道 1 的电
平,如果都是高电平,则说明却是一个有效的触发,就会触发输入捕获中断(如果开启了的话)。这样可以滤除那些高电平脉宽低于 8 个采样周期的脉冲信号,从而达到滤波的效果。如果不想要有滤波的处理,则设置 IC1F[3:0]=0000,只要采集到上升沿,就触发捕获。
2.第二部分:设置输入捕获极性
在这里插入图片描述

TIMx 捕获/比较使能寄存器 (TIMx_CCER):
在这里插入图片描述
3.第三部分:设置输入捕获映射通道(通道1为例)
在这里插入图片描述
由输入捕获寄存器TIMx 捕获/比较模式寄存器 1 (TIMx_CCMR1)中的CC1S控制:
在这里插入图片描述
4.第四部分:设置输入捕获分频器

在这里插入图片描述
由输入捕获寄存器的IC1PSC位控制:
在这里插入图片描述
当然,输入捕获使能要打开:
在这里插入图片描述
5. 捕获到有效电平可以开启中断
在这里插入图片描述
二 . 输入捕获通道初始化函数
初始化结构体:
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);

在这里插入图片描述
另外两个比较重要的函数:
通道极性设置独立函数:void TIM_OCxPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
获取通道捕获值:uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx);
三. IC(input capture)可以用来干嘛
输入捕获模式可以用来测量脉冲宽度或者测量频率。
我们以测量脉宽为例:
在这里插入图片描述
上图展示了输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为上升沿捕获,这样, t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。 这样,根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。
在 t1~t2 之间,可能产生 N 次定时器溢出,这就要求我们对定时器溢出,做处理,防止高电平太长,导致数据不准确。如图15.1.1所示, t1~t2之间, CNT计数的次数等于: N*ARR+CCRx2,
有了这个计数次数,再乘以 CNT 的计数周期,即可得到 t2-t1 的时间长度,即高电平持续时间。

猜你喜欢

转载自blog.csdn.net/weixin_46468790/article/details/107732368