520编码器电机PID控制实战:从参数整定到抗饱和处理

1次阅读
没有评论

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

image.webp

背景痛点

工业控制中,520 编码器电机常面临两个核心问题:

520 编码器电机 PID 控制实战:从参数整定到抗饱和处理

  1. 惯性滞后 :电机转子质量导致加速 / 减速响应延迟,表现为阶跃响应曲线上升缓慢
  2. 超调震荡 :PID 参数整定不当会引起速度环持续振荡(如 $K_p$ 过大时振幅达±15% 额定转速)

典型现象是给定目标转速 1500rpm 时,实际输出呈现阻尼不足的衰减振荡,稳态误差约±3%,严重影响定位精度。

算法选型

位置式 PID

  • 计算公式:$u(k) = K_p e(k) + K_i \sum_{j=0}^k e(j) + K_d [e(k)-e(k-1)]$
  • 优势:理论精度高
  • 缺陷:每次需计算全量累加和,STM32F407 在 168MHz 下耗时约 12μs

增量式 PID

  • 计算公式:$\Delta u(k) = K_p [e(k)-e(k-1)] + K_i e(k) + K_d [e(k)-2e(k-1)+e(k-2)]$
  • 优势:仅需保存前两次误差,计算耗时降至 4μs
  • 特别适合 PWM 周期 1kHz 的应用场景

核心实现

带死区的增量式 PID 伪代码

float IncPID_Calc(float target, float feedback) {static float err[3] = {0};
    err[2] = err[1];
    err[1] = err[0];
    err[0] = target - feedback;

    // 死区处理(±5rpm 不响应)if(fabs(err[0]) < 5.0f/60*encoder_ppr) 
        return 0;

    // 微分先行(仅对反馈量微分)float d_term = K_d * (feedback - 2*err[1] + err[2]);
    return K_p*(err[0]-err[1]) + K_i*err[0] - d_term;
}

编码器脉冲转换公式

物理量转换需注意采样同步问题:

  1. 转速计算:
    $$ rpm = \frac{\Delta counts \times 60}{encoder_ppr \times control_period} $$
  2. 位置计算(32 位计数器防溢出):
    $$ angle = \frac{(int32_t)(count_now – count_last) \times 360}{encoder_ppr} $$

进阶优化

积分抗饱和 Clamping 实现

// 在 PID 输出限幅时同步限制积分项
void PID_Clamp(PID_TypeDef* pid, float max_out) {
    float out = pid->p_term + pid->i_term + pid->d_term;

    if(out > max_out) {
        pid->i_term = max_out - pid->p_term - pid->d_term;
        out = max_out;
    }
    else if(out < -max_out) {
        pid->i_term = -max_out - pid->p_term - pid->d_term;
        out = -max_out;
    }

    return out;
}

速度前馈补偿

前馈系数 $K_{ff}$ 通过开环测试获取:
1. 记录电机在 50%PWM 占空比下的稳态转速 $rpm_{50}$
2. 计算:$K_{ff} = \frac{0.5 \times PWM_max}{rpm_{50}}$

避坑指南

  1. 采样周期匹配
  2. 编码器采样频率 ≥ 2 × PWM 频率(Nyquist 定理)
  3. 典型配置:PWM=10kHz 时,控制中断应≤100μs

  4. 信号消抖方案

  5. 硬件:在 AB 相线上并联 100pF 电容
  6. 软件:连续 3 次采样一致才判定为有效边沿

验证环节

阶跃响应测试(目标 1500rpm)

参数组 上升时间 (ms) 超调量 (%) 稳态误差 (rpm)
纯 P 控制 120 25 ±8
标准 PID 80 12 ±3
PID+ 前馈 65 5 ±1

执行时间测量

使用 DWT_CYCCNT 寄存器测得:
– 增量式 PID 计算:3.8μs @168MHz
– 编码器脉冲换算:1.2μs

思考题

当电机负载从空载突变为额定负载时,原 $K_i$ 系数可能导致积分项累积过慢。有哪些方法可实现 $K_i$ 的动态调整?

(提示:可考虑根据误差变化率自动调节积分增益)

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