登录/注册

如何实现旋转编码器的电路设计?

增量式编码器轴旋转时,有相应的相位输出。其旋转方向的判别和脉冲数量的增减,需借助后部的判向电路和计数器来实现。

更多

实现旋转编码器的电路设计需要根据其类型(增量式或绝对值式)进行,增量式旋转编码器因其成本低、接口简单而最为常用。以下是针对增量式旋转编码器的完整电路设计步骤及注意事项:


一、硬件电路设计

1. 基础连接

2. 电路设计

+-----------------+          +-----------------+
| 旋转编码器       |          | 微控制器       |
|                 |          | (如MCU)        |
| A相  -----------|----------> GPIOx (如PC0)  |
| B相  -----------|----------> GPIOx (如PC1)  |
| SW   -----------|----------> GPIOx (如PC2)  |
| COM  -----------|----------| GND            |
+-----------------+          +-----------------+

3. 关键外围电路


二、软件解码逻辑

1. 状态检测(四步法)

通过检测A、B相的当前状态(current)前一状态(previous) 变化确定方向:

// 定义引脚
#define ENC_A  PC0
#define ENC_B  PC1

// 状态存储
uint8_t prevState = 0;
uint8_t currState = 0;

void readEncoder() {
  prevState = currState;
  currState = (digitalRead(ENC_A) << 1) | digitalRead(ENC_B); // 组合为2bit状态

  // 状态变化表
  if (prevState == 0b00 && currState == 0b10) direction = CW;  // 顺时针
  if (prevState == 0b00 && currState == 0b01) direction = CCW; // 逆时针
  // 其他状态转换逻辑类似(完整需16种组合)
}

2. 完整四步状态机

前状态 新状态 方向
00 10 CW
00 01 CCW
01 00 CW
01 11 CCW
11 01 CW
11 10 CCW
10 11 CW
10 00 CCW

3. 代码优化(位运算)

// 高效解码函数(每步变化调用一次)
void handleEncoderInterrupt() {
  static uint8_t prev = 0;
  uint8_t curr = (GPIOA->IDR & 0x03); // 假设A/B接PA0/PA1

  // 状态变化检测:仅当A或B变化时处理
  if (curr == prev) return;

  // 方向判定(XOR与移位组合)
  if ((prev == 0x00 && curr == 0x02) || 
      (prev == 0x02 && curr == 0x03) || 
      (prev == 0x03 && curr == 0x01) || 
      (prev == 0x01 && curr == 0x00)) {
    position++; // 顺时针
  } else {
    position--; // 逆时针
  }
  prev = curr;
}

三、防抖动处理

软件消抖方案

// 在中断服务程序(ISR)中添加延时消抖
void EXTI0_IRQHandler() {      // A相中断
  if (EXTI->PR & EXTI_PR_PR0) {
    delayMicroseconds(200);   // 阻塞延时200μs
    readEncoder();            // 读取状态
    EXTI->PR |= EXTI_PR_PR0;  // 清除中断标志
  }
}

优化方案(非阻塞)

// 定时器中断中周期性采样(推荐)
void TIM2_IRQHandler() {
  if (TIM2->SR & TIM_SR_UIF) {
    static uint8_t lastA = 0;
    uint8_t currentA = digitalRead(ENC_A);
    if (lastA != currentA) {
      readEncoder();
    }
    lastA = currentA;
    TIM2->SR &= ~TIM_SR_UIF;
  }
}

四、高级优化技巧

  1. 正交编码器接口(QEI)

    • STM32等MCU内置硬件编码器模块,自动计数方向与步数。
    • 配置示例(STM32CubeIDE):
      htim3.Instance = TIM3;
      htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
      TIM_EncoderInterfaceConfig(&htim3, TIM_ENCODERMODE_TI12, 
                             TIM_POLARITY_RISING, TIM_POLARITY_RISING);
      HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
  2. 高速应用建议

    • 使用光耦隔离(如HCPL-2630)减少电气干扰。
    • PCB布局:信号线差分走线,避免并行长走线。

五、完整电路示例(带消抖与ESD)

+-----------------+          +-----------------+
| 旋转编码器       |          | 微控制器        |
| A相  --[10kΩ]---+----------| PA0             |
|        |        |          |                 |
|       [100nF]   |          |                 |
|        |        |          |                 |
|       GND       |          |                 |
|                 |          |                 |
| B相  --[10kΩ]---+----------| PA1             |
|        |        |          |                 |
|       [100nF]   |          |                 |
|        |        |          |                 |
|       GND       |          |                 |
|                 |          |                 |
| SW   --[10kΩ]---+----------| PA2             |
|        |        |          |                 |
|       GND       |          |                 |
| COM  -----------|----------| GND             |
+-----------------+          +-----------------+

设计验证要点

  1. 示波器检测A/B相信号相位差是否为90°。
  2. 旋转时检查波形是否有抖动毛刺。
  3. 通过串口输出位置值测试连续旋转计数精度。

按此方案可实现稳定可靠的旋转编码器接口,适用于工业控制、人机交互等场景。

旋转编码器在PLC中怎么编程

在工业自动化领域,旋转编码器与可编程逻辑控制器(PLC)的结合应用极为广泛。旋转

2024-06-17 09:24:06

旋转编码器的常见类型

在工业自动化和精密测量领域中,旋转编码器是一种不可或缺的设备。它能够将旋转位置或旋转

2024-05-29 15:59:29

旋转编码器能直接换吗_旋转编码器更换注意事项

旋转编码器更换步骤第一步,卸开电机后盖,编码器的后盖。第二步,松开编码器

2023-11-12 08:07:20

增量旋转编码器

电子发烧友网站提供《增量旋转编码器.pdf》资料免费下载

资料下载 姬盼希 2024-09-03 11:51:14

旋转编码器控制电机速度

旋转编码器控制电机速度

资料下载 jf_24373135 2024-06-24 09:16:17

旋转编码器的原理

旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转

资料下载 雾被华林 2022-05-10 15:06:49

无接触式磁旋转编码器AS5045B中文数据手册

无接触式磁旋转编码器AS5045B中文数据手册

资料下载 代小军ss 2021-12-17 15:06:58

如何使用CPLD进行旋转编码器接口电路的设计及应用

介绍一种基于CPLD的高精度旋转编码器信号处理电路设计,电路简单,能与多

资料下载 佚名 2019-06-06 16:52:30

旋转编码器是什么?浅读旋转编码器工作原理与特点及应用

旋转编码器是什么?浅读旋转编码器工作原理与特点及应用:

2023-05-29 09:21:15

关于旋转编码器电路中的应用

旋转编码器在电路中的应用,主要是编码器脉冲识别使用单片机的。具体就是看A

2020-07-26 11:28:15

旋转编码器电路原理图

本文主要介绍了旋转编码器电路原理图。增量式编码器轴

2019-08-06 14:25:58

旋转编码器能直接换吗_旋转编码器更换注意事项

本文首先介绍了旋转编码器更换步骤,其次介绍了旋转编码器更换注意事项,最后

2019-08-06 14:18:38

旋转编码器拆卸方法_旋转编码器型号说明

本文首先介绍了旋转编码器拆卸方法,其次阐述了旋转编码器更换步骤,最后介绍

2019-08-06 11:48:33

旋转编码器测量_旋转编码器安装方式

本文主要介绍了旋转编码器测量及安装方法。旋转编码器检测直线位移方法具体如

2019-08-06 11:40:50

旋转编码器参数_旋转编码器与plc连接

本文主要介绍了旋转编码器参数以及与plc的连接方法。在我们选择旋转编码器

2019-08-06 11:24:17

7天热门专题 换一换
相关标签