函数用于获取CCR计数值一、预备知识
1.关于输入捕获
IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
每个高级定时器和通用定时器都拥有4个输入捕获通道
可配置为PWMI(即PWM输入模式)模式,同时测量频率和占空比
可配合主从触发模式,实现硬件全自动测量
2.测量方法
每计算完一次频率后需要将CNT值清零,可利用主从触发模式自动实现。
3.主从触发模式
从模式选择TRGI触发的操作
主模式触发信号说明
从模式触发源说明:
4.工作流程
GPIO配置→TIM时基单元配置→输入捕获通道配置(滤波,极性,直连or交叉,预分频...) →从模式配置(从模式reset,触发源TIFP1) 启用功能,每次需要读取最新频率时,直接读取CCR寄存器,用fc/N即可得到频率
二、CubeMX配置
1.Mode setting
常规输入捕获IC
主从模式配置:选择触发源(TI1FP1为CH1输入来的信号上升沿)和从模式(重置清零CRR)
PWMI模式
也可以不用集成好的配置,手动分别配置CH1和CH2
2.Parameters Setting
单独只测频率
测频+测占空比
Counter Setting为TIM通用设置,设置CNT自增还是自减,以及自增的速度
这里分频则fc等于1MHZ;ARR设置为最大值65535;
TGRO Parameters 主模式配置
IC channel1配置:极性选择上升沿触发,分频器n,n分频则n次上升沿有效统计一次CRR IC selection选择直连通道或交叉通道,这里只开启了CH1所以只有direct模式,如果是PWMI模式则CH1为直连direct,CH2为交叉indirect
三、代码部分
相关函数:
启用定时器对应通道的输入捕获功能
HAL_TIM_IC_Start_IT(&htim8,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim8,TIM_CHANNEL_2);
函数用于获取CCR计数值
IC1Value = HAL_TIM_ReadCapturedValue(&htim8,TIM_CHANNEL_1);//获取CCR1数值
IC2Value = HAL_TIM_ReadCapturedValue(&htim8,TIM_CHANNEL_2);//获取CCR2的数值
int CRR_VALUE;
float Frequency; //创建全局变量用于调试
int main(void)
{
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
while(1)
{
CRR_VALUE=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1 );// 获取CRR1的值
Frequency=1000000/(float)CRR_VALUE; //计算频率
}
}
四、注意事项
用于测量IC信号的基础频率不宜过高,否则在一个周期内CCR的值就可能溢出超过最大值造成测量数值不准确。
如我们的电机测速FG信号频率为100HZ,若不预分频直接用64MHZ进行测量,则一个周期1/100s内可计次64000000/100=640000>65535(CCR最大值),所以最终设置prescale=63,则一个周期内1000000/100=10000<65535可行😀