4. 速度环PI控制器设计:带宽、级联与前馈

速度环设计,说白了就是让电机“听话”——你让它转多快,它就转多快,而且不能抖。我刚开始做伺服驱动时,总觉得电流环调好了,速度环随便给个PI就行。结果呢?一上负载就振荡,或者响应慢得像蜗牛。后来才明白,速度环和电流环是“父子关系”,设计顺序、带宽分配、前馈补偿,一步错步步错。

这一章,咱们就把速度环的带宽设计、级联关系、前馈补偿技术,以及Simulink实现,一次性讲透。

4.1 速度环与电流环的级联关系

先看一张经典的级联控制框图,我习惯把它叫做“内外嵌套”结构:

速度环与电流环级联控制结构 ω* ASR ACR 电机+负载 速度传感器 速度反馈 ASR: 速度调节器(外环) | ACR: 电流调节器(内环)

这张图你肯定不陌生。速度环是外环,电流环是内环。速度环的输出就是电流环的给定。我见过不少新手把这两个环独立设计,结果联调时发现根本跑不起来。

核心原则:电流环的带宽必须远大于速度环带宽。一般工程上要求电流环带宽是速度环的5~10倍。这样速度环看电流环,就像看一个“理想跟随器”——电流响应瞬间完成,不拖后腿。

为什么会这样?你想想看,如果电流环响应慢,速度环刚输出一个电流指令,电流还没跟上,速度环又根据误差继续调节,结果就是两个环互相打架,系统振荡。我在做一款50kW伺服驱动器时,就遇到过这个问题。当时电流环带宽只设了速度环的3倍,结果空载还行,一加载就啸叫。后来把电流环带宽提到8倍,问题立刻解决。

4.2 速度环带宽设计

带宽设计,说白了就是确定速度环能响应多快的指令。带宽越高,响应越快,但噪声也越容易被放大。我个人习惯把速度环带宽设计分成三步走:

  1. 确定电流环等效时间常数:电流环闭环后,可以近似为一阶惯性环节 Ti = 1 / (2π · fci),其中 fci 是电流环带宽。
  2. 选择速度环带宽:一般取 fcs = (1/5 ~ 1/10) · fci。比如电流环带宽 1000 Hz,速度环带宽取 100~200 Hz。
  3. 计算PI参数:按“对称最优法”或“模最优法”整定。

这里给出一组我常用的整定公式(基于典型I型系统):

参数 公式 说明
比例增益 Kp Kp = J · ωcs / Kt J: 转动惯量,Kt: 转矩常数
积分时间 Ti Ti = 4 · Ti_current Ti_current: 电流环等效时间常数
积分增益 Ki Ki = Kp / Ti 离散化时注意积分限幅

避坑指南:我曾经在调试一台高精度转台时,按公式算出来的Kp偏大,导致速度超调严重。后来发现是忽略了负载惯量。记住:公式里的J是总惯量(电机+负载),不是电机转子惯量。如果负载惯量变化大,建议加惯量辨识或自适应。

4.3 前馈补偿技术

纯PI控制有个天生的毛病:有静差。虽然积分项能消除稳态误差,但动态响应总慢半拍。前馈补偿就是“提前给一脚油”,让系统还没反应过来误差就已经被补偿了。

速度环前馈最常用的有两种:

  • 加速度前馈:根据速度指令的微分(加速度),提前给出转矩指令。适合需要快速加减速的场合。
  • 摩擦力前馈:根据速度方向,补偿库仑摩擦和粘滞摩擦。适合低速平稳性要求高的场合。

加速度前馈的数学形式很简单:

Iq_ff = J * (dω*/dt) / Kt

其中 dω*/dt 是速度指令的微分。在Simulink中,用Derivative模块就能实现。但要注意——微分会放大噪声。我建议在微分前加一个低通滤波器,截止频率取速度环带宽的2~3倍。

注意:前馈不是万能的。如果系统模型不准(比如惯量J误差大),前馈反而会引入扰动。我的经验是:先调好PI让系统稳定,再逐步增加前馈系数,从0.5倍理论值开始试。

4.4 Simulink实现与仿真

好了,理论讲完,咱们动手。下面是一个典型的速度环+电流环级联仿真模型的核心部分:

% 速度环PI参数(离散域)
Ts = 1e-4;                % 采样时间 100us
f_cs = 150;               % 速度环带宽 150Hz
J_total = 0.001;          % 总惯量 kg·m²
Kt = 0.5;                 % 转矩常数 Nm/A

Kp_speed = J_total * 2*pi*f_cs / Kt;
Ti_speed = 4 / (2*pi*f_cs);
Ki_speed = Kp_speed / Ti_speed * Ts;

% 电流环等效(已调好,视为一阶惯性)
f_ci = 1000;              % 电流环带宽 1000Hz
T_i = 1 / (2*pi*f_ci);    % 等效时间常数

在Simulink中搭建时,我习惯用以下结构:

  1. 速度给定:用Step或Ramp信号,模拟阶跃或斜坡启动。
  2. 速度PI控制器:用Discrete PI Controller模块,注意勾选“Integrator clamping”防止积分饱和。
  3. 电流环等效:用Transfer Fcn模块,传递函数 1/(T_i·s+1)。
  4. 电机模型:用Integrator模块,1/(J·s) 加上转矩常数Kt。
  5. 前馈通路:用Derivative + Lowpass Filter组合。

下面这张图展示了带前馈的速度环仿真结构:

Simulink 速度环仿真模型(含前馈) ω* d/dt + LPF J/Kt PI + 1/(T_i·s+1) Kt/(J·s) 速度反馈

仿真时,我建议先跑纯PI(不加前馈),观察阶跃响应。如果超调大,适当降低Kp或增加Ti。等PI调稳了,再打开前馈通路,观察响应是否更快、跟踪误差是否减小。

仿真验证要点:

  • 阶跃响应:看上升时间、超调量、调节时间。一般要求超调 < 5%。
  • 斜坡响应:看稳态跟踪误差。加前馈后,误差应明显减小。
  • 抗扰动测试:在电机输出端加一个阶跃负载转矩,看速度跌落和恢复时间。

嗯,这里要注意一点:仿真时电流环等效模型用的是连续传递函数,但实际代码里是离散的。如果你要验证离散化影响,建议把电流环也换成离散模型,采样时间保持一致。

最后,分享一个我踩过的坑。有一次仿真结果特别漂亮,阶跃无超调、斜坡零误差,结果一上实际硬件就抖得不行。后来发现是仿真里用了理想微分(Derivative模块),实际代码里微分是近似的。从那以后,我仿真里所有微分都加滤波器,和代码保持一致。