作者:lady张昕彤 | 来源:互联网 | 2023-10-10 18:58
本文主要介绍关于stm32,单片机,arm的知识点,对【【STM32】【HAL库】定时器编码器模式测速】和【stm32编码器测速度的程序】有兴趣的朋友可以看下由【Hz1213825】投稿的技术文章,希
本文主要介绍关于stm32,单片机,arm的知识点,对【【STM32】【HAL库】定时器编码器模式测速】和【stm32编码器测速度的程序】有兴趣的朋友可以看下由【Hz1213825】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的STM32_HAL库,模块介绍,STM32F4系列相关技术问题。
stm32编码器测速度的程序
概述
电机AB相增量型编码器的介绍和解码方法在这里介绍过了
电机编码器
https://mp.csdn.net/mp_blog/creation/editor/125279297
代码
在main的初始化后循环之前加入
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL); //开启编码器模式
HAL_TIM_Base_Start_IT(&htim2); //开启编码器的中断
HAL_TIM_Base_Start_IT(&htim3); //开启定时器的中断
中断回调函数
int32_t Speed = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
int16_t zj;
if (htim == &htim2) //编码器
{
}
else if (htim == &htim3) //计算转速10ms
{
zj = __HAL_TIM_GetCounter(&htim2);//获取计数值
__HAL_TIM_SetCounter(&htim2, 0);//清空计数值
Speed = (float)zj / (4 * 96) * 100 * 60;//计算转速
printf("%d\r\n", Speed);//输出转速
}
}
在这个函数中根据之前的公式计算处转速
这里要注意:
1.数据范围,不能溢出
2.正数代表正转,负数代表反转
3.需要加入强转(float),因为涉及到了除法,需要避免出现因为舍去位数,导致一直出现0
(或者乘法放到前步)
到最后给速度赋值时在进行丢失小数位(当然也可以直接用小数进行运算)
本文《【STM32】【HAL库】定时器编码器模式测速》版权归Hz1213825所有,引用【STM32】【HAL库】定时器编码器模式测速需遵循CC 4.0 BY-SA版权协议。