ABZ编码器角度测量原理与实现:从技术选型到避坑指南

1次阅读
没有评论

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

image.webp

ABZ 编码器角度测量原理与实现:从技术选型到避坑指南

背景与核心问题

在伺服控制系统和工业机器人中,ABZ 编码器(又称正交编码器)是位置反馈的核心传感器。它通过两路相位差 90°的方波信号(A/ B 相)和一个每转一次的索引脉冲(Z 相)来传递运动信息。实际应用中常遇到两个关键问题:

ABZ 编码器角度测量原理与实现:从技术选型到避坑指南

  • 脉冲丢失 :高速旋转时因信号边沿抖动或采样频率不足导致漏计数
  • 噪声干扰 :工业环境中的电磁干扰引发误触发,特别是长电缆传输场景

技术方案对比

硬件解码方案(如 LS7366 芯片)

  • 优点
  • 自带 4 倍频计数逻辑,最高支持 40MHz 时钟
  • 硬件滤波消除毛刺
  • 32 位计数器避免频繁溢出

  • 缺点

  • 成本增加(约 $5/ 片)
  • 占用 PCB 面积
  • 灵活性差,参数固化

软件解码方案(基于 MCU)

4 倍频原理
通过检测 A / B 相的上升沿和下降沿,将物理线数(PPR)的分辨率提高 4 倍。例如 500 线编码器可实现 2000 计数 / 转,理论精度 0.18°。

数学关系

 角度 = (计数值 × 360°) / (PPR × 4)

STM32 实现详解

1. 定时器编码器模式配置

// 使用 TIM3 编码器模式
TIM_Encoder_InitTypeDef encoder_config = {
  .EncoderMode = TIM_ENCODERMODE_TI12, // 双通道计数模式
  .IC1Filter = 6,  // 8 个时钟周期的滤波
  .IC1Polarity = TIM_ICPOLARITY_RISING,
  .IC2Polarity = TIM_ICPOLARITY_RISING
};
HAL_TIM_Encoder_Init(&htim3, &encoder_config);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);

2. 方向判断与溢出处理

// 获取计数值(16 位有符号)int16_t count = __HAL_TIM_GET_COUNTER(&htim3);

// 溢出补偿(每 65536 脉冲补偿)static uint32_t overflow_count = 0;
if(count - last_count > 32768) {overflow_count--;} else if(last_count - count > 32768) {overflow_count++;}
int32_t total_count = count + overflow_count * 65536L;

3. 带滤波的边沿检测

推荐在 GPIO 输入模式中启用内部滤波:

GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;

性能测试数据

转速 (RPM) 理论脉冲数 实测脉冲数 误差率
300 6000 5998 0.03%
1500 30000 29982 0.06%
3000 60000 59941 0.10%

中断延迟影响 :当转速达到 5000RPM 时,500 线编码器要求中断响应时间 <3μs,否则会出现漏计数。建议:

  • 使用 DMA 传输计数寄存器
  • 启用定时器溢出中断

避坑指南

机械安装误差

  • 症状 :低速时角度周期性波动
  • 解决方案
  • 使用千分表检查编码器轴偏心(应 <0.05mm)
  • 联轴器选用弹性材质
  • 软件校准:记录全周期误差后查表补偿

电源噪声抑制

  • 在编码器电源端并联 100μF 电解电容 +100nF 陶瓷电容
  • 信号线采用双绞线或屏蔽线
  • 接地采用单点接地

多轴串扰防护

  • 不同编码器的 A / B 相线分开走线
  • 在 MCU 输入端串联 22Ω 电阻并并联 100pF 电容

进阶思考

如何通过算法补偿齿轮回差?这里提供两个思路:

  1. 双向校准法
  2. 记录正反转切换时的脉冲差值
  3. 在换向时动态补偿该偏移量

  4. 预测补偿法

  5. 通过加速度预测负载方向变化
  6. 提前叠加补偿脉冲

实际应用中,可将机械回差视为非线性环节,采用 PID+ 前馈复合控制。你有哪些更好的方案?欢迎在评论区探讨。

本文部分实现参考《STM32F4 参考手册》第 18 章 ” 通用定时器 ”,完整工程代码已开源至 GitHub(链接见文末)

正文完
 0
评论(没有评论)