[其他ST产品] 基于CubeMX-STM32F1_Encoder 接口读取 EC11

[复制链接]
 楼主| kzlzqi 发表于 2024-1-30 16:46 | 显示全部楼层 |阅读模式
简介
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 会出现下降沿跳变。

 楼主| kzlzqi 发表于 2024-1-30 16:47 | 显示全部楼层
当 MCU 无 Encoder 功能时可参考上述解释通过端口的中断来识别 EC11 的旋转

4009565b8b78a95302.png
 楼主| kzlzqi 发表于 2024-1-30 16:47 | 显示全部楼层
EC11 应用电路图
139165b8b79a6b6c0.png
 楼主| kzlzqi 发表于 2024-1-30 16:47 | 显示全部楼层
定时器的 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 位。
 楼主| kzlzqi 发表于 2024-1-30 16:47 | 显示全部楼层
使用 CubeMX 来配置 Encoder 功能
选择 Encoder 模式

3552865b8b7b7491eb.png
 楼主| kzlzqi 发表于 2024-1-30 16:48 | 显示全部楼层
计数器的预分频器
该参数设置的定时器 PSC 寄存器的值,PSC 值与计数器相关,计数器的时钟 CK_CNT = fCK_PSC/(PSC[15:0]+1)
该值的设定与选择的 Encoder 模式相关

9981265b8b7c7467d1.png
 楼主| kzlzqi 发表于 2024-1-30 16:48 | 显示全部楼层
3541965b8b7d051907.png 设置 Encoder 的模式为 TI1
 楼主| kzlzqi 发表于 2024-1-30 16:48 | 显示全部楼层
设置 TI1 模式下 TIMx_CCER 寄存器的 CC1P 位,计数为下降沿

456965b8b7e46c210.png
 楼主| kzlzqi 发表于 2024-1-30 16:48 | 显示全部楼层
以上配置结合 EC11 数据手册,MCU 的 Encoder 接口模式进行配置
 楼主| kzlzqi 发表于 2024-1-30 16:48 | 显示全部楼层
生成代码处理
启动 Encoder 功能
在 TIMx Encoder 功能的初始化函数中添加启动编码器函数,使能通道 1

HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_1)
 楼主| kzlzqi 发表于 2024-1-30 16:49 | 显示全部楼层
获取计数器值
获取计数器寄存器 TIMx_CNT 的值

__HAL_TIM_GET_COUNTER(&htim2)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

992

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部