3. PI控制器基础:比例积分控制原理、PI控制器在电流环中的应用、模拟PI与数字PI的区别

各位同学,今天我们聊聊PI控制器。说实话,做电机控制这么多年,PI控制器是我打交道最多的东西。你翻开任何一本电机控制的书,前几章肯定在讲它。但书本上的东西和实际调出来的感觉,有时候真不太一样。

我刚开始做FOC的时候,总觉得PI嘛,不就是P乘误差加I乘误差积分嘛,有什么难的?结果一上电机,要么抖得像筛子,要么响应慢得像蜗牛。后来才明白,PI控制器在电流环里,远不止一个公式那么简单。

3.1 比例积分控制原理

先说说比例控制。比例控制说白了就是:误差越大,输出越大。你想想看,如果电流目标值是1A,实际只有0.8A,误差0.2A,比例项就输出Kp×0.2。这个逻辑很直观,对吧?

但比例控制有个硬伤——稳态误差。什么意思呢?就是系统稳定后,实际值和目标值之间总差那么一点点。比如你让电机转1000转,它可能停在980转就不动了。为什么?因为比例控制需要误差存在才能产生输出,误差为零了,输出也就为零了。

这时候积分控制就派上用场了。积分项会把过去的误差累积起来,只要误差还存在,积分值就会一直增长。哪怕误差很小,积久了也能产生足够大的输出,把系统推到目标值。

我打个比方:比例控制就像你开车时看后视镜,误差大了就猛打方向盘;积分控制就像你一直盯着前方,慢慢修正方向。两者配合,车才能开得又稳又准。

核心公式:

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

其中:

  • u(t) — 控制器输出(比如电压指令)
  • e(t) — 误差(目标值 - 实际值)
  • Kp — 比例增益
  • Ki — 积分增益

这里有个细节我要提醒你:积分项是把双刃剑。积分作用太强,系统容易超调甚至振荡;积分作用太弱,稳态误差消除得慢。我在一个伺服项目里就吃过这个亏,Ki设得太大,电机启动时电流直接冲过保护值,吓得我赶紧按了急停。

3.2 PI控制器在电流环中的应用

电流环为什么要用PI?因为电流控制对响应速度和稳态精度都有要求。

你想想看,FOC的核心是把定子电流分解成d轴和q轴分量。d轴控制磁通,q轴控制转矩。这两个轴都需要快速跟踪指令值,而且稳态时不能有静差。比例控制响应快,但消除不了静差;积分控制能消除静差,但响应慢。两者一结合,正好互补。

在实际的电流环里,PI控制器的结构是这样的:

// 电流环PI控制器伪代码
// 每个PWM周期执行一次

// 1. 采样实际电流
id_actual = get_id_current();
iq_actual = get_iq_current();

// 2. 计算误差
id_err = id_ref - id_actual;
iq_err = iq_ref - iq_actual;

// 3. 比例项
id_p_out = Kp_d * id_err;
iq_p_out = Kp_q * iq_err;

// 4. 积分项(带限幅)
id_i_out += Ki_d * id_err * Ts;
iq_i_out += Ki_q * iq_err * Ts;

// 5. 积分限幅(防积分饱和)
id_i_out = clamp(id_i_out, -Vd_max, Vd_max);
iq_i_out = clamp(iq_i_out, -Vq_max, Vq_max);

// 6. 总输出
vd_ref = id_p_out + id_i_out;
vq_ref = iq_p_out + iq_i_out;

这段代码我建议你多看几遍。里面有个关键点——积分限幅。为什么要限幅?因为积分项会一直累积,如果不限制,一旦电机堵转或者指令突变,积分值会变得非常大。等故障解除后,这个巨大的积分值会让输出瞬间饱和,系统需要很长时间才能恢复。这就是所谓的积分饱和现象。

避坑指南:

我曾经在一个风机项目里,因为没加积分限幅,电机启动时积分值直接冲到满量程。等电流恢复正常后,积分值花了将近1秒才退回来,导致电流过冲了3倍。从那以后,我所有项目的积分限幅都设得比输出限幅略小一点。

另外,d轴和q轴的PI参数通常是分开整定的。为什么?因为d轴和q轴的电气特性不一样。d轴电感通常比q轴小,所以d轴的Kp可以设得大一些。我一般先调q轴,再调d轴,这样调试效率高一些。

3.3 模拟PI与数字PI的区别

这个问题,说实话,很多工程师干了几年都没完全搞清楚。我当年也是踩了坑才真正理解的。

模拟PI是用运放和阻容元件搭出来的,连续时间系统。数字PI是在单片机里用软件实现的,离散时间系统。两者在原理上等价,但实现细节上差别很大。

对比项 模拟PI 数字PI
时间特性 连续时间 离散时间(采样周期Ts)
积分实现 电容充电 累加求和
参数调整 换电阻电容 改代码里的Kp/Ki
抗干扰 硬件滤波自然抗扰 需要软件滤波
积分饱和 运放饱和自然限幅 需要软件限幅
成本 高(元件多) 低(代码实现)

数字PI最核心的问题就是离散化误差。模拟PI的积分是连续的,数字PI只能每隔Ts时间采样一次、计算一次。如果Ts太大,积分精度就会下降,系统可能不稳定。

我举个例子:假设模拟PI的积分时间常数是Ti,那么数字PI的Ki = Kp × Ts / Ti。你看,Ki和采样周期Ts是绑定的。如果你改了PWM频率(也就是改了Ts),Ki必须跟着改。这个坑我见过太多人踩了。

我的建议:

写代码时把Ki写成Kp × Ts / Ti的形式,而不是直接写一个固定值。这样改PWM频率时,只需要改Ts,Ki会自动跟着变。我所有项目都这么干,省心不少。

另外,数字PI还有一个量化误差的问题。模拟信号是连续的,数字信号是离散的。ADC采样有分辨率限制,DAC输出也有分辨率限制。如果电流采样分辨率不够,误差信号本身就带噪声,PI输出也会跟着抖。

我记得有个项目,电流采样用的是12位ADC,结果电流环在轻载时一直有低频抖动。查了半天,发现是量化噪声被积分项放大了。后来加了死区处理,问题才解决。

// 死区处理示例
if (abs(id_err) < ID_DEAD_ZONE) {
    id_err = 0;  // 小误差直接忽略
}
if (abs(iq_err) < IQ_DEAD_ZONE) {
    iq_err = 0;
}

最后说一个容易被忽略的点:数字PI的运算延迟。从采样到计算再到输出,中间有固定的延迟。这个延迟在高频电流环里影响很大。比如PWM频率20kHz,采样周期50μs,如果计算占用了20μs,那剩下的30μs才能输出。这个延迟会降低相位裕度,严重时系统会振荡。

怎么解决?我一般用前馈补偿或者预测控制的思路。不过这些内容后面章节会详细讲,这里先提一嘴。

PI控制器在电流环中的知识体系 PI控制器 比例积分原理 电流环应用 模拟vs数字 比例控制 积分控制 d轴控制 q轴控制 离散化误差 量化误差 核心要点 • 比例控制响应快,但有稳态误差 • 积分控制消除稳态误差,但需防积分饱和 • 数字PI需关注离散化误差、量化误差和运算延迟