定时器之输入捕获

同一个定时器,输入捕获和输出比较只能使用一个 

检测到电平跳变,执行后面的动作。当前CNT的值,锁存到CCR寄存器中

 

 

 高频使用测频法,低频使用测周法,分界值呢?使用中界频率区分

 测频法实现逻辑:

每来一个上升沿记一次X+=1,    使用定时器定时1S,到时间统计这个X值,就是频率,同时清零,再次计数,循环

测周法实现逻辑:

 使用标准频率,统计两个上升沿中间有几个标准频率

 

PWMI

 

第一个通道使用上升沿触发来捕获周期

第二个通道使用下降沿触发,来捕获占空比,两个通道同时对一个引脚进行捕获

捕获电路:

每来一个触发信号。CNT的值。就会向CCR转运一次,同时发生一个捕获事件,

这个事件会在状态寄存器置标志位。同时也可产生中断

作用:CNT计数器由内部的标准时钟驱动,可以用来计量两个上沿的时间间隔(周期),每次捕获后要把CNT清零(可以使用主从触发模式,自动清零)   【测周法】

 主从触发模式(完成CNT自动清零)

 

 

 测周法逻辑图解

 GPIO输入方波信号,经过滤波器和边缘检测,选择TI1FP1为上升沿触发,选择直连的通道,不分频, 当TI1FP1出现上升沿时,CNT的当前计数的值转运到CCR1,同时触发源选择,选中TI1FP1为触发信号,进入从模式的复位操作,触发CNT清零,先捕获再清零,这个顺序如何确定呢

这里从模式只能用通道1和通道2, 通道3、4 只能开启捕获中断,再中断中手动清零

使用时只需要读取CCR1就可以得到数据

//输入捕获通道配置
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  //选择4个通道的通道1
	TIM_ICInitStructure.TIM_ICFilter = 0xF; //选择滤波器
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //触发极性
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 每隔几次有效一次,分频
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//配置数据选择器(直连还是交叉)
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	//触发源选择,配置TRGI的触发源为TI1FP1
	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);
	//配置从模式,当信号来时自动置零CNT
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

 TI1FP1上升沿触发

 TI1FP2下降沿触发,通过交叉去触发通道2的捕获(高电平)

CCR1从0开计数,计数到CCR2,下降沿触发,不会清零,到下一个上升沿CCR1数值为颜色线,CCR2数值为红色线,此刻占空比为红/蓝,同时可以清零CNT,开始下一轮计数

代码实现逻辑1:分为两个结构体分别配置实现

代码实现逻辑2:使用其内置的方法TIM_PWMIConfig(),自动把另外一个通道初始化为相反的配置(通道1,直连,上升沿 ==通道2,交叉,下降沿)

	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
uint32_t IC_GetDuty(void)
{	
	//高电平的计数值存在CCR2里,周期计数值存在CCR1里
	return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);
}

代码都为测周法

PWM配置

先确定ARR(与分辨率相关),PSC决定频率,CCR决定占空比

1开始GPIO和TIM的RCC时钟

2GPIO初始化

3配置时基单元

4配置输入捕获单元 

5选择从模式的触发源,并选择其执行的操作

6TIM_Cmd开启定时器

7直接赌气CCR寄存器,fc/n 得到频率

posted @ 2023-08-22 21:08  磕伴  阅读(194)  评论(0编辑  收藏  举报