25GA370电机带编码器:原理剖析与工业自动化中的精准控制实践

1次阅读
没有评论

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

image.webp

电机特性与编码器基础

25GA370 是一款直流有刷电机,额定电压 24V,典型空载转速 3700RPM,峰值扭矩 0.25N·m。配套的增量式编码器采用 ABZ 三相输出:

25GA370 电机带编码器:原理剖析与工业自动化中的精准控制实践

  • A/ B 相 :相位差 90°的方波信号,用于判断转向和位置计数
  • Z 相 :每转产生 1 个脉冲的零位信号
  • 线数 :常见 500 线,即单相每转输出 500 个脉冲(4 倍频后分辨率达 2000PPR)

工业场景中的三大痛点

  1. 低速抖动 :开环控制时 PWM 频率与机械谐振频率耦合导致
  2. 位置累积误差 :负载突变或打滑时开环系统无法感知实际位移
  3. 速度波动 :传统测速法(如反电动势检测)响应延迟达 100ms 级

闭环控制技术方案

开环 vs 闭环对比

指标 开环控制 闭环控制
精度 ±5% ±0.1%
抗扰性 优秀
成本 需编码器 + 处理器

STM32 编码器接口配置

// CubeMX 配置:TIM3 选择 Encoder Mode
void Encoder_Init(void) {
  htim3.Init.Period = 0xFFFF; // 16 位计数器
  htim3.EncoderMode = TIM_ENCODERMODE_TI12; // 双通道计数
  HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
}

// 带软件消抖的位置读取
int32_t Get_Position() {
  static uint16_t last_cnt = 0;
  uint16_t cur_cnt = TIM3->CNT;
  if(abs(cur_cnt - last_cnt) > 1000) { // 防溢出处理
    overflow_count += (cur_cnt < last_cnt) ? 1 : -1;
  }
  last_cnt = cur_cnt;
  return overflow_count * 65536 + cur_cnt;
}

PID 控制核心代码

typedef struct {
  float Kp, Ki, Kd;
  float integral;
  float prev_error;
  float max_output;
} PID_Controller;

float PID_Update(PID_Controller *pid, float error) {
  // 积分抗饱和
  if(fabs(pid->integral) < pid->max_output * 2) {pid->integral += error;}

  float derivative = error - pid->prev_error;
  pid->prev_error = error;

  return pid->Kp * error + 
         pid->Ki * pid->integral + 
         pid->Kd * derivative;
}

关键波形分析

当电机正转时:

  1. A 相上升沿超前 B 相 90°
  2. 4 倍频解码后每个周期包含 4 个边沿事件
  3. 转速计算公式:
    $$
    RPM = \frac{PulseCount \times 60}{PPR \times SampleTime(s)}
    $$

工程避坑指南

信号传输优化

  • 双绞线传输距离 >5m 时需加 RS422 差分驱动
  • 终端匹配电阻取 120Ω±1%

接地规范

 电机外壳 ━━━━┓
              ├─→ 单独接地桩
编码器屏蔽层━┛

过载保护策略

  1. 电流采样电阻选用 50mΩ/2W 规格
  2. 硬件过流保护阈值设定为额定值 150%
  3. 软件保护触发后立即切换为能耗制动

进阶思考

当转速 >2000RPM 时,传统 PID 会因采样延迟产生估计误差。卡尔曼滤波通过融合编码器脉冲计数与电机模型预测值,可将位置估计精度提升 40% 以上。其状态方程如何构建?过程噪声矩阵 Q 与观测噪声矩阵 R 又该如何取值?

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