TIM 编码器接口
目录
编码器接口
正交编码器
编码器接口基本结构
编码器接口三种工作模式
实例(均不反相)
实例(TI1反相)
本篇文章内容的前置知识为 TIM输入捕获,如果不了解,可点击链接学习
TIM 输入捕获-CSDN博客
编码器接口
编码器接口(Encoder Interface)是 STM32 定时器的一种特殊工作模式,专门用于接收增量型(正交)编码器的信号。通过分析编码器发出的两路相位相差90度的脉冲信号,定时器可以自动判断旋转方向,并据此控制计数器(CNT)自增或自减,从而实时反映编码器的位置变化。
使用编码器接口时,定时器能够同时测量旋转方向、位置以及通过计算脉冲频率间接获得旋转速度。每个高级定时器和通用定时器都集成了一个编码器接口,所需的两路输入信号分别通过输入捕获通道1(CH1)和通道2(CH2)引入,完成正交信号的接收与解码。
正交编码器
编码器输出两路相位差90°的脉冲:A相 和 B相
旋转方向由边沿触发时另一相的电平判断
正转判断规则(CNT递增):
边沿 | 判断依据 |
---|---|
A相 ↑ | B相为低电平 |
B相 ↑ | A相为高电平 |
反转判断规则(CNT递减):
边沿 | 判断依据 |
---|---|
A相 ↑ | B相为高电平 |
B相 ↑ | A相为低电平 |
表格都是基于上升沿进行判断,在上面的图片中还有下降沿的判断依据
编码器接口基本结构
信号流动流程:
1. 两路 GPIO 输入(接编码器 A相 和 B相)
2. 滤波器:去抖动,防止误触发
3. 边沿/极性检测:识别上升沿或下降沿
4. 形成 TI1FP1 / TI2FP2 信号
5. 编码器接口模块:分析 A/B 相位差,判断方向
6. 控制计数器 CNT 自增或自减,记录位置
7. 可配合 PSC 预分频 与 ARR 自动重装载实现平滑计数
编码器接口三种工作模式
正转的状态都向上计数,反转的状态都向下计数
实例(均不反相)
对于每个边沿,通过另一相的电平高低判断是向上计数还是向下计数。
TI1FP1 对应 TI2,TI2FP2 对应 TI1
TI1、TI2 正常输入
正转:TI1 先变,TI2滞后 → CNT 递增(向上计数)
反转:TI2先变,TI1滞后 → CNT 递减(向下计数)
整体计数方向与编码器真实方向一致
实例(TI1反相)
由于T1反相,所以上面的表格这时候是错误的,需要先把图片中TI1高低电平取反再查表
和均不反相的实例对比,实际旋转方向不变,计数器方向反了
TIM_EncoderInterfaceConfig() 函数
函数名 | 功能 | 主要作用 |
---|---|---|
TIM_EncoderInterfaceConfig() | 启用定时器的编码器接口模式,将两个通道的输入脉冲用于测量编码器位移和方向 | 自动配置输入捕获 + 从模式,定时器 CNT 会根据编码器 A/B 相位自动计数(增或减) |
函数参数
参数 | 含义 |
---|---|
TIM3 | 目标定时器,一般使用通用定时器(如 TIM2、TIM3、TIM4)。 |
TIM_EncoderMode_TI12 | 编码器模式选择: TI1:只用 TI1 通道 TI2:只用 TI2 通道 TI12:使用 TI1 + TI2(典型增量编码器模式) |
TIM_ICPolarity_Rising | 设置 TI1 输入极性: Rising 实际表示 不反相 Falling 实际表示 反相 |
TIM_ICPolarity_Rising | 设置 TI2 输入极性,同上。 |
在编码器模式下,Rising/Falling 表示是否反相,而不是捕获上升沿/下降沿
尚未完结