打印
[方案相关]

增量式编码器 4 倍频实现步骤

[复制链接]
1030|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1. 正交信号基本原理
增量式编码器输出 A 相 和 B 相 两路相位相差 90° 的方波信号,每个信号周期对应一个编码器刻线。

例如:
当编码器正向旋转时,A 相 领先 B 相 90°。
当编码器反向旋转时,B 相 领先 A 相 90°。
由于每个信号周期有 4 个边沿(A 上升、A 下降、B 上升、B 下降),利用这些边沿可以将编码器的分辨率提高 4 倍。

2. 4 倍频的具体实现

方法 1:软件轮询检测
步骤:

通过 GPIO 读取 A、B 相电平。

监听 A 相或 B 相的变化(上升沿或下降沿)。

计算方向:

如果 A 相变化时 B 相的状态为 1,则为正转;否则反转。

如果 B 相变化时 A 相的状态为 0,则为正转;否则反转。

每次边沿触发时,计数器 ±1,实现 4 倍频。

示例代码(基于中断方式):

c
复制
编辑
volatile int32_t encoder_count = 0;

void EXTI_IRQHandler(void) {
    static uint8_t last_AB = 0;
    uint8_t AB = (GPIO_ReadInputDataBit(GPIOA, A_PIN) << 1) | GPIO_ReadInputDataBit(GPIOA, B_PIN);

    // 计算方向
    if ((last_AB == 0b00 && AB == 0b01) ||
        (last_AB == 0b01 && AB == 0b11) ||
        (last_AB == 0b11 && AB == 0b10) ||
        (last_AB == 0b10 && AB == 0b00)) {
        encoder_count++;  // 正转
    } else {
        encoder_count--;  // 反转
    }

    last_AB = AB;  // 更新状态
    EXTI_ClearITPendingBit(EXTI_LineX); // 清除中断标志
}
优点: 适用于 低速 编码器,软件逻辑简单。
缺点: 依赖 中断处理,高频时 CPU 负担较重。


使用特权

评论回复
沙发
自动化陈稳|  楼主 | 2025-3-30 02:05 | 只看该作者
方法 2:定时器+硬件解码
大部分 MCU(如 STM32、NXP、TI)支持 定时器正交解码模式,可以利用硬件 自动完成 4 倍频计数,减少 CPU 负担。

实现步骤:

选择支持正交解码的 定时器(如 STM32 的 TIM2/TIM3)。

配置定时器的 编码模式(Encoder Mode)。

选择 4 倍频模式(检测 A、B 相的上升沿和下降沿)。

读取定时器计数器 CNT 直接获取位置信息。

示例代码(基于 STM32 HAL 库):

c
复制
编辑
TIM_Encoder_InitTypeDef encoderConfig;

encoderConfig.EncoderMode = TIM_ENCODERMODE_TI12;
encoderConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
encoderConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
encoderConfig.IC1Prescaler = TIM_ICPSC_DIV1;
encoderConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
encoderConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
encoderConfig.IC2Prescaler = TIM_ICPSC_DIV1;

HAL_TIM_Encoder_Init(&htim2, &encoderConfig);
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);
然后,读取 TIM2->CNT 直接获得 编码器当前位置。

优点:

硬件自动处理,适用于 高速旋转,不会占用 CPU。

通过 定时器 CNT 值 直接读取角度/位移。

缺点: 需 MCU 支持编码器模式(部分低端 MCU 不支持)。

使用特权

评论回复
板凳
自动化陈稳|  楼主 | 2025-3-30 02:06 | 只看该作者
方向判断
无论采用 软件轮询 还是 定时器解码,方向判断方式都类似:

A 相变化时 B 相高电平 → 正转,低电平 → 反转。

B 相变化时 A 相低电平 → 正转,高电平 → 反转。

使用特权

评论回复
地板
自动化陈稳|  楼主 | 2025-3-30 02:07 | 只看该作者
计算旋转角度
如果编码器有 N 线刻度,则:

单圈分辨率 = N × 4(因为 4 倍频)。

角度计算公式:
例如:
1000 线编码器,4 倍频后分辨率 4000 线,如果 CNT = 2000:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

1350

帖子

1

粉丝