基于CubeMX-STM32F1_Encoder 接口读取 EC11

基于CubeMX-STM32F1_Encoder 接口读取 EC11


简介

Encoder

增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。
绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。

由上可知 EC11 属于增量式编码器的类型

EC11 旋转方向及波形图

编码器 CW、CCW

  • 当顺时针方向旋转(CW)时输出的波形为

  • 1、以 A 端为参考
    当 A 为高电平时,B 会出现上升沿跳变。
    当 A 为低电平时,B 会出现下降沿跳变。

  • 2、以 B 端为参考
    当 B 为高电平时,A 会出现下升沿跳变。
    当 B 为低电平时,A 会出现上降沿跳变。

  • 当逆时针方向旋转(CCW)时输出的波形为

  • 1、以 A 端为参考
    当 A 为高电平时,B 会出现下升沿跳变。
    当 A 为低电平时,B 会出现上降沿跳变。

  • 2、以 B 端为参考
    当 B 为高电平时,A 会出现上升沿跳变。
    当 B 为低电平时,A 会出现下降沿跳变。

当 MCU 无 Encoder 功能时可参考上述解释通过端口的中断来识别 EC11 的旋转
基于CubeMX-STM32F1_Encoder 接口读取 EC11_第1张图片

EC11 应用电路图

基于CubeMX-STM32F1_Encoder 接口读取 EC11_第2张图片

定时器的 Encoder 功能

使用通用定时器的 Encoder 功能时要确定该定时器是否支持,
例如:
STM32F1 中 高级定时器 TIM1&TIM8、通用定时器 TIM2 - TIM5 都支持 Encoder 功能,但基本定时器 TIM6&TIM7 不支持 Encoder 功能
STM32F4 中 高级定时器 TIM1&TIM8、通用定时器 TIM2 - TIM5 都支持 Encoder 功能,但通用定时器 TIM9 - TIM14 和 基本定时器 TIM6&TIM7 不支持 Encoder 功能

Encoder 功能接口:根据两个输入信号的跳变顺序,产生计数脉冲和方向信号。根据两个输入信号的跳变顺序,计数器向上或向下计数,同时硬件对 TIMx_CR1 寄存器的 DIR 位进行相应的设置。不管计数器是依据 TI1 计数、依靠 TI2 计数或者靠 TI1 和 TI2 计数,在任意输入端(TI1 或 TI2)的跳变都会改变 DIR 位。

使用 CubeMX 来配置 Encoder 功能

选择 Encoder 模式
基于CubeMX-STM32F1_Encoder 接口读取 EC11_第3张图片
计数器的预分频器
该参数设置的定时器 PSC 寄存器的值,PSC 值与计数器相关,计数器的时钟 CK_CNT = fCK_PSC/(PSC[15:0]+1)
该值的设定与选择的 Encoder 模式相关
基于CubeMX-STM32F1_Encoder 接口读取 EC11_第4张图片

基于CubeMX-STM32F1_Encoder 接口读取 EC11_第5张图片

设置 Encoder 的模式为 TI1

设置 TI1 模式下 TIMx_CCER 寄存器的 CC1P 位,计数为下降沿
基于CubeMX-STM32F1_Encoder 接口读取 EC11_第6张图片
以上配置结合 EC11 数据手册,MCU 的 Encoder 接口模式进行配置

生成代码处理

启动 Encoder 功能

在 TIMx Encoder 功能的初始化函数中添加启动编码器函数,使能通道 1

HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_1)

获取计数器值

获取计数器寄存器 TIMx_CNT 的值

__HAL_TIM_GET_COUNTER(&htim2)

你可能感兴趣的:(#,STM32,stm32,单片机)