3. 速度环与电流环基础:PI控制器原理、带宽对低速响应的影响

做低转速控制,绕不开两个环——电流环和速度环。很多新手一上来就调参数,调了半天电机还是抖,或者干脆转不动。其实说白了,就是没搞懂这两个环到底在干什么,以及它们之间的带宽关系。

我个人习惯,先把基础概念吃透,再动手调。这一章我们就来聊聊PI控制器到底怎么工作的,以及带宽这个指标为什么对低速响应那么关键。

3.1 电流环:最内层的“肌肉反应”

电流环是控制系统的第一道防线。它直接控制电机绕组里的电流,也就是直接控制转矩。你想想看,电机要转动,靠的就是电流产生磁场,磁场推动转子。所以电流环响应得快不快,直接决定了整个系统的“力气”跟不跟得上。

电流环的典型结构是这样的:

  • 反馈:采样电阻或霍尔传感器测到的相电流
  • 给定:速度环输出的电流指令(Iq_ref)
  • 控制器:通常是PI控制器
  • 输出:PWM占空比,驱动逆变器

我在项目中遇到过一个问题:某次调试一个直流无刷电机,低速时电流环总是有200Hz左右的振荡。查了半天,发现是电流采样滤波电容选大了,导致反馈信号滞后太多。嗯,这里要注意——电流环的延迟,哪怕只有几十微秒,在高增益下都会引发振荡。

3.2 PI控制器:比例与积分的“搭档”

PI控制器,说白了就是两个部分加起来:

  • 比例项(P):误差越大,输出越大。反应快,但会有静差。
  • 积分项(I):误差累积,慢慢消除静差。反应慢,但能消除稳态误差。

公式很简单:

u(t) = Kp * e(t) + Ki * ∫e(t) dt

但实际工程里,我很少直接用这个连续形式。数字控制器里,我们用的是离散化版本:

// 位置式PI(增量式更常用,但这里展示原理)
error = target - feedback;
integral += error * dt;
output = Kp * error + Ki * integral;

你可能会问:为什么不用PD或者PID?我个人的经验是,在电机控制里,微分项对噪声太敏感了。尤其是电流采样,本身就有开关噪声,加上微分项,系统很容易变得“神经质”。所以工业驱动里,电流环和速度环绝大多数情况只用PI。

我的小技巧: 调PI时,先把积分项设成0,只调P让系统不振荡,然后慢慢加I消除静差。别一上来就两个一起调,那样你根本分不清是谁的问题。

3.3 速度环:外层的“指挥官”

速度环在电流环外面。它根据速度误差,计算出电流环需要的转矩电流(Iq)。速度环的响应速度要比电流环慢一个数量级,否则内外环会“打架”。

为什么?你想想看,如果速度环和电流环响应一样快,那速度环一调整,电流环还没来得及跟上,两个环就互相较劲,系统就抖起来了。

我一般这样设计:

  • 电流环带宽:1~2 kHz(取决于开关频率和采样率)
  • 速度环带宽:100~200 Hz(大约是电流环的1/10)

这个比例不是绝对的,但差距太小肯定出问题。我曾经在一个项目里把速度环带宽设到了500Hz,电流环只有1kHz,结果电机在低速时嗡嗡响,像蜜蜂一样。后来把速度环降到150Hz,问题就解决了。

3.4 带宽:到底在说什么?

带宽这个词,听起来很玄乎。其实说白了,就是系统能“跟得上”的最高频率。比如电流环带宽是1kHz,意思是你给它一个1kHz的正弦波指令,它还能勉强跟上;超过这个频率,输出就衰减得厉害了。

对于低速控制,带宽的影响特别明显:

带宽 低速表现 问题
过高 电机抖动、电流噪声大 容易振荡,尤其是负载变化时
过低 响应迟钝、启动卡顿 速度跟不上指令,低速不平滑
适中 平滑、稳定、响应快 需要根据负载和机械特性调整

我举个例子。你在做位置控制时,如果速度环带宽太低,电机启动时会有一个明显的“犹豫”——指令发了,它要等一会儿才动。这在低速时尤其明显,因为低速时反电动势小,电流环的负担更重。

注意: 带宽不是越高越好。高带宽意味着高增益,高增益会放大噪声。尤其是在低速时,编码器的分辨率有限,速度反馈本身就有量化噪声,带宽太高反而让系统不稳定。

3.5 低速时的特殊问题:为什么PI会“失灵”?

低速控制有个头疼的问题——积分饱和。你想想看,电机在低速启动时,速度误差很大,积分项会一直累积。等电机终于转起来了,积分项已经累积了很大一个值,导致超调,甚至反转。

我常用的解决办法有两个:

  1. 积分限幅:给积分项设一个最大值,别让它无限累积。
  2. 条件积分:当误差超过某个阈值时,停止积分。等误差小了再开始积。

代码实现大概是这样的:

// 条件积分(Anti-windup)
error = target - feedback;
if (abs(error) < INTEGRAL_THRESHOLD) {
    integral += error * dt;
}
// 积分限幅
if (integral > INTEGRAL_MAX) integral = INTEGRAL_MAX;
if (integral < -INTEGRAL_MAX) integral = -INTEGRAL_MAX;

output = Kp * error + Ki * integral;

这个技巧,我在做伺服驱动器时用过很多次。尤其是低速带载启动,没有anti-windup的话,电机大概率会冲过头。

3.6 知识结构图

下面这张图,把电流环和速度环的关系、PI控制器的位置、带宽的影响都串起来了。建议你多看几遍,理解清楚再动手调参数。

速度环与电流环控制结构 速度给定 - 速度PI 电流PI - 电流给定 电机 编码器 关键说明: • 速度环带宽通常为电流环的 1/5 ~ 1/10,避免内外环耦合振荡 • 低速时积分饱和(windup)是主要问题,需加 anti-windup 处理

3.7 实际调试中的几个坑

最后,分享几个我踩过的坑,希望能帮你少走弯路:

  • 电流环带宽别超过采样频率的1/10。比如你PWM频率10kHz,电流采样也是10kHz,那电流环带宽最多设到1kHz。再高就是做梦了。
  • 速度反馈的滤波要小心。低速时编码器脉冲少,速度计算本身就有延迟。我一般用一阶低通滤波,截止频率设在速度环带宽的2~3倍。
  • 积分限幅别设太大。我见过有人把积分限幅设成和输出限幅一样大,结果积分饱和时输出直接满偏,电机猛冲。积分限幅一般设成输出限幅的20%~30%。

嗯,这一章的内容就到这里。PI控制器和带宽的概念,是后面所有调优的基础。你把这些搞清楚了,后面讲前馈补偿、自适应控制的时候,才能跟得上。