AGV轮式编码器入门指南:从原理到实战避坑

1次阅读
没有评论

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

image.webp

背景痛点:为什么轮速测量是 AGV 的命门?

在 AGV 开发中,轮速测量就像汽车的里程表,直接影响路径规划的精度。但新手常遇到这些坑:

AGV 轮式编码器入门指南:从原理到实战避坑

  • 脉冲丢失 :编码器线松动导致计数漏拍,AGV 走着走着就偏离路线
  • 信号抖动 :电机启停时产生电磁干扰,速度显示像过山车一样波动
  • 累计误差 :长时间运行后,1% 的测量误差可能导致 10cm 的位置偏移

技术对比:四种编码器怎么选?

1. 光电 vs 磁电编码器

  • 光电编码器 (200-500 元)
  • 优点:分辨率高(可达 5000PPR),响应快
  • 缺点:怕灰尘油污,装配要求严苛

  • 磁电编码器 (100-300 元)

  • 优点:抗污染强,IP67 防护很常见
  • 缺点:温度漂移明显(0.1%/℃)

2. 增量式 vs 绝对式

  • 增量式 (推荐新手使用)
  • 只有 A / B 两相脉冲,需上电归零
  • 成本低,STM32 可直接解码

  • 绝对式

  • 多位数输出(如 SSI 接口)
  • 断电记忆位置,但需专用解码芯片

核心实现:STM32 编码器接口实战

硬件连接(以增量式编码器为例)

 编码器 A 相 --- PA0(TIM2_CH1)
编码器 B 相 --- PA1(TIM2_CH2)
GND 接电机外壳 

代码配置(HAL 库版本)

// 1. 定时器初始化
TIM_Encoder_InitTypeDef encoder_config = {
  .EncoderMode = TIM_ENCODERMODE_TI12, // 双相计数
  .IC1Polarity = TIM_ICPOLARITY_RISING,
  .IC1Selection = TIM_ICSELECTION_DIRECTTI,
  .IC1Prescaler = TIM_ICPSC_DIV1,
  .IC1Filter = 6, // 滤波 8 个时钟周期
  // B 相配置同上...
};
HAL_TIM_Encoder_Init(&htim2, &encoder_config);

// 2. 启动编码器接口
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);

// 3. 速度计算(每 100ms 执行)int32_t get_speed_rpm() {
  static int32_t last_count = 0;
  int32_t current = __HAL_TIM_GET_COUNTER(&htim2);
  int32_t delta = (current - last_count) & 0xFFFFFFFF; // 处理 32 位溢出
  last_count = current;

  // 换算公式:转速 RPM = (Δ 脉冲数 /PPR)/(采样时间秒)*60
  return (delta * 60) / (500 * 0.1); // 假设 500PPR,100ms 采样
}

工业实践:抗干扰三板斧

1. 硬件滤波设计

在编码器信号线上并联 100Ω 电阻 +0.1μF 电容(截止频率 16kHz):

 A 相 ——●——||—— GND
       |
      100Ω

2. 布线规范

  • 使用双绞屏蔽线(如 CAT5 网线)
  • 屏蔽层单端接地(接控制器 GND)
  • 远离电机电源线至少 10cm

3. 软件容错

// 异常脉冲检测(A/ B 相应该永远差 90°)if(ABS(current_A_rise_time - current_B_rise_time) > 0.75*ideal_interval) {trigger_error_handler();
}

避坑指南:老司机经验包

1. 溢出处理

STM32 的 16 位计数器在高速时会溢出,两种解决方案:

  • 启用 32 位定时器(如 TIM2/TIM5)
  • 在中断里手动扩展计数:
volatile uint32_t overflow_count = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if(htim->Instance == TIM2) overflow_count++;
}

2. 轮径校准

AGV 运行 100 圈后,轮胎磨损会导致实际位移变小。校准方法:

  1. 让 AGV 直线行走 5 米
  2. 记录编码器总脉冲数 N
  3. 新轮径 = (旧轮径 × 实际距离) / (N/PPR × π)

验证环节:示波器诊断法

  1. 连接探头到 A 相和 GND
  2. 手动转动轮子,应看到规整的方波
  3. 启动电机,检查波形是否出现:
  4. 毛刺(需加强滤波)
  5. 幅度衰减(检查线阻)
  6. 相位抖动(检查电源稳定性)

思考题

当 AGV 使用四个带编码器的麦克纳姆轮时,如何保证四个编码器的数据同步采样?欢迎在评论区分享你的方案!

(提示:可以考虑 TIM 的从模式 + 触发信号同步)

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