欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

程序员文章站 2022-06-09 11:36:10
...

STM32定时器编码器模式(Encoder Mode)

机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度、位置等信息

STM32的定时器有编码器模式,大大的方便我们的开发

使用STM32cubeMX配置工具,使得这个过程变得无比简单

我使用STM32cubeMX 开发一个机器人中 使用两个定时器TIM3 和TIM4编码器模式读取编码器的值,做闭环控制

CubeMX配置过程

选择芯片过程不再赘述

RCC: HSE高速总线始终改为外部晶振
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

SYS: DEBUG选择 SW模式
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

TIM3 TIM4 配置成定时器模式 Combined Channels: Encoder Mode
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

TIM3 TIM4 定时器分频配置,我这里还是 72分频,计数1000溢出,定时器就是1KHZ的频率
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

TIM Encoder GPIO上拉模式配置,两个定时器四个引脚,全部改成 Pull-Up,即上拉模式,主要用于没有外部上拉的编码器读取时,可以确定引脚电平,防止出错
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

时钟树配置
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

工程配置 IDE选择 MDK V5
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

第一栏里选择复制必要的库文件 第二栏里勾选将文件分为.c和.h
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

最后点击生成文件
注意 !
工程路径绝对不能有中文名,否则会报错,无法复制stm32的库文件到你的工程

keil中添加处理函数

打开生成的文件,在main.c中初始化的时候开启编码器计数

HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);

在循环中调用 __HAL_TIM_IS_TIM_COUNTING_DOWN 可以获得当前电机的转向 0为正、1为负

DirectionA = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);     
DirectionB = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim4);  

在循环中调用 __HAL_TIM_GET_COUNTER 获取计数器的计数值,即编码器的脉冲数

CaptureNumberA=__HAL_TIM_GET_COUNTER(&htim3);
CaptureNumberB=__HAL_TIM_GET_COUNTER(&htim4);