HAL库开发——TIM输入捕获

函数用于获取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可行😀

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 抱歉,我不清楚您的问题上下文是什么,因此无法为您提供有关“hal_tim_readcapturedvalue”的回答。但是,通常情况下,该函数是针对STM32芯片中的定时器模块进行编程的,用于读取定时器捕获寄存器的值。如果您能提供更多信息,我可以更好地帮助您。 ### 回答2: hal_tim_readcapturedvalue是基于HAL库的函数,用于读取定时器的捕捉值。 首先,需要了解什么是定时器捕捉。定时器捕捉是指在定时器计数器计数过程中,通过外部输入捕获一个信号引脚的电平变化,记录此时计数器的值。通过捕捉到的定时器计数器值,可以计算出外部信号的持续时间或周期。 在使用定时器捕捉功能时,通过hal_tim_readcapturedvalue函数可以读取捕捉到的定时器计数器值,从而进行后续的数据计算和处理。该函数需要传入一个TIM_HandleTypeDef类型的结构体指针作为参数,在函数内部会通过结构体指针获取该定时器的相关参数和计数器值,并将其返回给调用者。 使用该函数需要注意的是,定时器捕捉功能必须在定时器初始化的时候进行配置,包括捕捉模式、触发源和相关参数等。此外,在使用该函数前需要先启动定时器计数器,否则无法捕捉到有效的信号。同时,由于定时器捕捉功能一般用于计算信号持续时间或周期,因此需要借助其他方式对定时器计数器进行溢出的处理,以保证计算结果的准确性。 总之,hal_tim_readcapturedvalue是HAL库中用于读取定时器捕捉值的函数,可以实现对外部信号的捕捉和后续数据处理。在使用该函数时需要注意定时器捕捉功能的相关配置和处理。 ### 回答3: hal_tim_readcapturedvalue是一个函数,它的作用是读取定时器的捕获寄存器的值。这个函数通常被用于测量定时器的时间间隔或脉冲信号的频率。 在使用hal_tim_readcapturedvalue函数之前,需要先对定时器进行初始化,并配置好定时器的捕获通道。通常可以使用HAL库里面的函数进行初始化。 在读取定时器的捕获值之前,需要先触发定时器的捕获事件。如果要测量时间间隔,可以在事件触发后再次触发定时器来获取第二个捕获值。 读取捕获值之后,可以根据定时器的配置计算出时间间隔或脉冲信号的频率。如果使用的是32位定时器,则可以直接计算差值,否则需要对溢出进行处理。 在使用hal_tim_readcapturedvalue时需要注意的是,定时器的捕获值是存储在寄存器中的,因此需要保证读取的时机正确,并且在读取之后需要对寄存器进行清零或重置,以避免下一次读取出现问题。 总之,hal_tim_readcapturedvalue是一个非常重要的函数,它可以帮助我们在嵌入式系统中进行精确的时间测量和脉冲信号的处理,对于很多实时控制系统来说都是必不可少的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值