【CubeMX配置STM32使用360°旋转编码器(KY-040)】

CubeMX配置STM32使用360°旋转编码器(KY-040)

一、使用CubeMX进行基本的配置
所使用编码器的图片为:

在这里插入图片描述
在编码电机上面的编码器与这个的使用方法类似。

选择编码器模式

在这里插入图片描述
另外还需要选择
在这里插入图片描述
在这里需要选择TI1还是TI2,也就是AB相,因为单独选择一个的话旋转编码器的精度会小很多(关于编码器具体的判断方向的方法可以去具体了解一下,这里我不过多赘述),所以我选择的是TI1 and TI2
到此使用编码器最主要的配置就结束了;此外,因为我使用到了串口打印数据,以及定时器中断,所以我还配置了TIM2和USART1.每0.5s输出一次数据。
在这里插入图片描述
在这里插入图片描述

二、使用keil5进一步开发

CubeMX只是生成了底层代码,定时器的开启还需要自己开启:

  /* USER CODE BEGIN TIM1_Init 2 */
	
	HAL_TIM_Encoder_Start(&htim1,TIM_CHANNEL_ALL);
  /* USER CODE END TIM1_Init 2 */
  /* USER CODE BEGIN TIM2_Init 2 */
	//开启中断
  HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END TIM2_Init 2 */

这两个我都是在定时器的初始化中就直接开启了,在main中再开启的作用是一样的。

关于读取编码器的脉冲数有如下函数:

int TimerEncoder;
int getTimerEncoder(void)
{
	TimerEncoder=(short)(__HAL_TIM_GET_COUNTER(&htim1));
	__HAL_TIM_SET_COUNTER(&htim1,0);
	return TimerEncoder;
}

__HAL_TIM_GET_COUNTER(&htim1)函数返回的数据是0 ~ 65535,使用short强制转换就可以将其转换为-32768 ~ 32767,就可以实现编码器反转输出负数,不需要再用65535来减了。关于编码器hal库的一些函数可以自己在软件中去看看。
剩下的就是每0.5s输出一次编码器的数据了。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)
	{
		getTimerEncoder();
		printf("捕获到的脉冲数:%d\r\n",TimerEncoder);
	}
}

关于printf函数的使用方法在我前面的文中有写。
具体使用效果如图:
在这里插入图片描述

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值