嵌入式学习日志————TIM输入捕获
前言
本篇文章主要记录TIM输入捕获的理论知识。如有问题,望指正!
正文
1.TIM输入捕获简介
IC(Input Capture)输入捕获
输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
每个高级定时器和通用定时器都拥有4个输入捕获通道
可配置为PWMI模式,同时测量频率和占空比
可配合主从触发模式,实现硬件全自动测量
2.频率测量
(1)测频法:在闸门时间T内,对上升沿计次,得到N,则频率f_x=N / T
适用于高频波
测量结果更新慢一点
数值相对稳定
(2)测周法:两个上升沿内,以标准频率fc计次,得到N ,则频率f_x=f_c / N
适用于低频波
测量结果更新快
数据跳变也快
(3)中界频率:测频法与测周法误差相等的频率点f_m=√f_c / T
当待测信号频率<中介频率时:测周法误差更小
当待测信号频率>中介频率时:测频法误差更小
3.捕获/比较通道
4.主从触发模式
对于通道三和通道四,只能开启捕获中断,手动清零——频繁中断、比较消耗软件资源
5.输入捕获基本结构
6.PWMI基本结构
同时测量占空比和频率
7.库函数
1)初始化输入捕获单元的函数1——一次只能配置一个通道(四个通道共用一个函数)
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
2)初始化输入捕获单元的函数2——可以快速配置两个通道
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
3)给输入捕获结构体赋一个初始值
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct);
4)选择输入触发源TRGI
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
5)选择输出触发源TRGO
void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);
6)选择从模式
void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode);
7)分别单独配置四个通道的分频器
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
8)分别读取四个通道的CCR
输入捕获下,CCR是只读的
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
还会持续更新哒~