HAL库 AB相编码器
文章涉及Cube MX的配置、Keil代码的编写以及模板存放之BaiDu Pan
用到的软件:STM32CubeMX & Keil 5
用到的硬件:光电式编码器、F411RE NUCLEO板、电机
一、操作思路
1、 启用TIM5的Encoder Mode
2、 启用TIM 10用作定时器,定时读取
3、 启用串口UART 2,将读取数据发送至PC
二、操作过程
- 启用TIM5的Encoder Mode
模式:TI1 and TI2
PSC设为4-1=3(encoderMode是 TI1和TI2模式。参考数据手册(见图2),此模式下,AB两相的上升沿和下降沿都计数,故计数值是实际值的4倍。)
ARR设为100-1。(我的是100线编码器)
- 启用TIM 10用作定时器,定时读取
PSC:100-1,ARR:10000-1
时钟树100MHz,10ms响应一次
- 启用串口UART 2,将读取数据发送至PC
启用即可,其他默认设置
三、代码
1.重定义fput函数
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit (&huart2 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
return ch;
}
2.定时器回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim ->Instance == TIM10 )
{
Encoder_Value = __HAL_TIM_GET_COUNTER (&htim5 );
printf ("Encoder_Value=%03d\r\n",Encoder_Value);
}
}
需注意,printf函数需#include “stdio.h”上述代码置于
/* USER CODE BEGIN 4 */
//置于此处
/* USER CODE END 4 */
需注意,printf函数需#include “stdio.h”
在while(1)前添加启动代码
__HAL_TIM_CLEAR_IT (&htim10 ,TIM_IT_UPDATE );
HAL_TIM_Encoder_Start (&htim5 ,TIM_CHANNEL_ALL );
HAL_TIM_Base_Start_IT (&htim10 );
四、效果
五、一些链接
整体工程已打包至BaiDu Pan链接: link提取码:o9re
链接:https://pan.baidu.com/s/1y86Jkie4GRW7NWiTK4nSkA
提取码:o9re
复制这段内容后打开百度网盘手机App,操作更方便哦