4. 控制算法基础:PID控制原理、位置式与增量式PID、积分饱和与抗积分饱和、PID参数整定方法

各位同学好,我是你们的老朋友。今天咱们聊聊电池化成系统里最核心的控制算法——PID。说实话,我入行那会儿,第一个接触的闭环控制算法就是它。别看它简单,用好了,能解决80%的工程问题。

4.1 PID控制原理:从“拍脑袋”到“有章可循”

PID,说白了就是比例、积分、微分三个环节的线性组合。你想想看,一个电池化成通道,要控制电流恒定在10A。如果实际电流只有9.5A,怎么办?

  • 比例(P):看到偏差就使劲推。偏差越大,输出越大。但光有P,系统容易震荡,而且会有静差。
  • 积分(I):把过去的偏差累积起来。只要还有偏差,积分就一直增加,直到消除静差。我在项目中遇到过,积分太强,系统响应慢得像蜗牛。
  • 微分(D):预测未来的偏差变化趋势。偏差变化越快,微分输出越大,起到提前刹车的作用。

数学表达式很简单:

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

嗯,这里要注意,实际工程中我们用的是离散形式,也就是采样周期Ts下的差分方程。

4.2 位置式PID vs 增量式PID:两种实现思路

我个人习惯把位置式PID比作“全款买房”,增量式PID比作“分期付款”。为什么这么说?

4.2.1 位置式PID

直接计算当前时刻的控制量u(k)。它依赖于所有历史偏差的累加。公式如下:

u(k) = Kp * e(k) + Ki * Σe(i) + Kd * [e(k) - e(k-1)]

优点:直观,容易理解。

缺点:积分项Σe(i)会无限累积。一旦输出饱和,积分项还在涨,这就是后面要说的积分饱和问题。

4.2.2 增量式PID

只计算控制量的增量Δu(k)。它只关心最近几次的偏差:

Δu(k) = Kp * [e(k) - e(k-1)] + Ki * e(k) + Kd * [e(k) - 2e(k-1) + e(k-2)]

实际输出:u(k) = u(k-1) + Δu(k)

优点

  • 没有积分累积,抗积分饱和天生就好
  • 手动/自动切换时冲击小
  • 计算量小,适合嵌入式MCU

缺点:积分作用弱,对静态误差的消除不如位置式彻底。

我的建议:电池化成系统里,我一般用增量式PID做电流环,位置式PID做电压环。电流环要求响应快、无超调,增量式更合适;电压环要求稳态精度高,位置式更靠谱。

4.3 积分饱和与抗积分饱和:一个让人头疼的问题

为什么会积分饱和?说白了就是:你明明已经输出到极限了(比如PWM占空比100%),但偏差还在,积分项还在傻傻地累加。等你需要减小输出时,积分项已经累积了一大堆,导致系统反应迟钝,出现很大的超调。

我曾经在调试一个200A的化成柜时,就因为这个积分饱和,电流直接冲到了250A,差点把MOS管烧了。从那以后,我对抗积分饱和格外重视。

3.3.1 常见的抗积分饱和方法

方法 原理 适用场景
积分分离法 偏差大时,积分项置0;偏差小时,恢复积分 大阶跃响应
抗积分饱和法 输出饱和时,停止积分累加 通用场景
变速积分法 根据偏差大小动态调整积分系数 高精度控制

我个人最常用的是第二种——抗积分饱和法。实现起来很简单:

// 伪代码示例
if (u(k) >= Umax || u(k) <= Umin) {
    // 输出饱和,停止积分
    integral = integral;  // 保持当前积分值不变
} else {
    // 正常累加积分
    integral += e(k) * Ts;
}

小技巧:在电池化成系统中,我还会加一个“积分限幅”。即使不饱和,也把积分项限制在±某个范围内,防止积分项过大导致系统不稳定。

4.4 PID参数整定方法:从玄学到科学

很多新手觉得PID整定是门玄学。其实不然,有章可循。我总结了三种常用方法:

4.4.1 试凑法(经验法)

这是最原始的方法,但也是最实用的。步骤:

  1. 先调P:从小到大,直到系统出现等幅振荡
  2. 再加I:消除静差,但注意不要加太多导致震荡
  3. 最后加D:抑制超调,但D对噪声敏感

嗯,这里要注意,电池化成系统的负载是电池,电池内阻会随SOC变化。所以参数整定要在不同SOC点都验证一下。

4.4.2 Ziegler-Nichols法

这是经典方法,适合一阶惯性加纯滞后系统。步骤:

  1. 只保留P,增大Kp直到系统等幅振荡,记录临界增益Ku和临界周期Tu
  2. 按表格计算PID参数
控制器类型 Kp Ki Kd
P 0.5*Ku - -
PI 0.45*Ku 1.2*Kp/Tu -
PID 0.6*Ku 2*Kp/Tu Kp*Tu/8

警告:Z-N法得到的参数通常偏激进,容易产生超调。在电池化成这种对过冲敏感的场景,我建议把Kp再乘以0.7~0.8的系数。

4.4.3 基于模型的自整定

这是目前工业界比较先进的方法。通过系统辨识得到被控对象的传递函数,然后基于极点配置或最优控制理论计算PID参数。

我在一个项目中用过这种方法:给电池施加一个小幅度的阶跃电流,记录电压响应曲线,用最小二乘法拟合出电池的等效模型参数,然后自动计算出PID参数。效果不错,但计算量稍大,需要MCU有足够的算力。

4.5 实战经验总结

最后,分享几个我在电池化成项目中积累的经验:

  • 采样周期选择:电流环建议1~5ms,电压环可以放宽到10~20ms。太快了MCU扛不住,太慢了控制效果差。
  • 输出限幅:一定要做!PWM占空比限制在5%~95%,防止死区时间不足导致短路。
  • 积分初始值:系统启动时,积分项不要从0开始。可以根据目标值和当前值的差值,给一个合理的初始积分值,加快响应速度。
  • 参数分组:不同化成阶段(恒流、恒压、恒功率)使用不同的PID参数组。我一般会准备3~5组参数,根据工况自动切换。

好了,关于PID控制算法的基础知识就讲到这里。下一节我们会深入讨论如何在电池化成系统中实现这些算法,包括代码实现和调试技巧。有什么问题,欢迎课后交流。