测量STM32中两个GPIO事件之间的时间

2019-07-14 17:40发布

我想测量我使用STM32和一些驱动芯片控制的电机的RPM。我的理解是我必须测量2个霍尔信号之间的时间并计算速度(RPM)。问题是,如何启动定时器并在每个霍尔信号中断时重新启动定时器。我试着研究计时器,但要学的东西很多......我的意思是我的情况,我应该运行什么模式的计时器?我认为有输入直接捕获,输出捕获等...这是我的中断代码:
  1. void HAL_GPIO_EXti_Callback(uint16_t GPIO_Pin) {
  2.     if(GPIO_Pin == GPIO_PIN_4 || GPIO_Pin == GPIO_PIN_5 || GPIO_Pin == GPIO_PIN_6) {
  3.         commutate();
  4.     }
  5. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
LEON1985
1楼-- · 2019-07-14 22:42
稍微阅读一下STM32定时器的编码器模式,通常是关于正交编码器。
hy381
2楼-- · 2019-07-15 03:48
简短的回答是:你需要在输入捕获模式下使用Timer!
然后可以将Timer_Pin配置为外部中断触发,即当发生外部中断时,会发生输入时间捕获(〜时间戳)。类似地,在下一个中断发生另一次捕获,你只需找到两次捕获之间的差异来计算两次事件之间经过的时间。但是在配置定时器时必须小心,以便它可以捕获至少两个连续的中断!
为了进一步解释,我假设你正在使用STM32CubeMx生成代码,即使不是可以遵循的类似步骤!
需要在“输入捕捉直接模式”下配置定时器,为其分配GPIO引脚。现在,可以将此用于传感器中断!
配置定时器,使其能够捕获至少两个连续的TIM捕获。
计算很简单,如下
你测量最低频率是
MinPulseFrequency = (2*TIMxPeripheralFrequency)/((Period+1)(Prescaler+1))
浏览STM32Cube示例并查找TIM / Timer_Input_Capture示例。它已被解释得相当不错。
即使你不想查看有关所有定时器模式如何工作的完整详细信息,请确保你了解输入捕获模式中发生的情况!并了解如何使用此通用定时器指南进行正确配置。

一周热门 更多>