编码器信号波形解析:从a+b+z+到a-b-z-的实战入门指南

1次阅读
没有评论

共计 1356 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

在工业自动化现场,增量式编码器信号常常面临干扰和误判问题。常见痛点包括:

编码器信号波形解析:从 a +b+z+ 到 a -b-z- 的实战入门指南

  • 长距离传输时信号衰减导致波形畸变
  • 电机启停瞬间产生电磁干扰(EMI)造成计数错误
  • 机械振动引起 Z 相(Index 信号)误触发
  • 相位差偏离 90°导致方向误判

波形解析

a+b+z+ 信号特征

  1. A 相和 B 相信号相位差严格 90°(正交)
  2. Z 相脉冲宽度通常为 1 个机械周期
  3. 信号幅值典型为 5V(TTL)或 RS422 差分
  4. 上升 / 下降时间应小于 100ns(高速编码器)

a-b-z- 差分信号优势

  • 抗共模干扰能力提升 20dB 以上
  • 传输距离可达 100 米(RS422 标准)
  • 信号边沿更陡峭(典型值 50ns)

解码逻辑

正交解码原理

  1. 每个边沿触发状态变化(4 倍频)
  2. 状态转换顺序决定方向判断
  3. Z 相作为机械零点基准

状态转换图示例

stateDiagram
    [*] --> State0
    State0 --> State1: A 上升沿
    State1 --> State3: B 上升沿
    State3 --> State2: A 下降沿
    State2 --> State0: B 下降沿 

代码实现(STM32 HAL)

GPIO 初始化

// 编码器接口配置
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;  // A 相 &B 相
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

定时器编码器模式

TIM_Encoder_InitTypeDef sConfig = {0};
sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
HAL_TIM_Encoder_Init(&htim2, &sConfig);

抗干扰设计

硬件 RC 滤波

  • 截止频率计算:fc=1/(2πRC)
  • 推荐值:R=100Ω, C=100pF(适合 1MHz 信号)

软件消抖算法

// 3 次采样投票法
uint8_t debounce(uint8_t new_sample) {
    static uint8_t history = 0;
    history = (history<<1) | (new_sample&0x01);
    return (history & 0x07) > 4 ? 1 : 0;
}

避坑指南

电缆接地要点

  • 屏蔽层单端接地(控制器侧)
  • 避免形成接地环路
  • 使用双绞线降低串扰

高速计数方案

  1. 启用定时器溢出中断
  2. 32 位计数器扩展(软件拼接)
  3. DMA 直接捕获计数值

验证建议

边界测试方法

  • 注入±10% 时钟抖动的 A / B 相信号
  • 模拟 Z 相脉冲宽度异常(<50ns)
  • 测试正交相位偏差(85°~95°)

推荐工具

  • Saleae Logic Pro 16(16 通道分析)
  • 普源 DS1102Z 示波器(100MHz 带宽)
  • 编码器信号模拟器(PXIe-6341)

延伸阅读

  1. 绝对式编码器 SSI 协议解析
  2. EnDat2.2 双向通信协议
  3. 光电编码器码盘生产工艺
  4. 伺服系统位置环整定方法
正文完
 0
评论(没有评论)