4、数字PID控制器设计:位置式PID与增量式PID、积分饱和与抗饱和策略、PID参数整定方法

PID控制器,说白了就是数字电源控制环路里的“大脑”。它负责盯着输出电压和参考值之间的误差,然后算出一个占空比,让开关管该开多久就开多久。我做了这么多年电源,见过太多环路不稳的案例,十有八九都是PID没调好。

这一章咱们就把它彻底讲透。从两种最常用的数字PID形式开始,再到积分饱和这个“隐形杀手”,最后聊聊怎么把参数整定到靠谱的范围。嗯,内容不少,但都是干货。

4.1 位置式PID与增量式PID

数字PID在工程上主要有两种实现方式:位置式和增量式。它们本质上是同一个控制律的不同表达,但在实际代码里差别很大。

4.1.1 位置式PID

位置式PID直接计算控制量的绝对值。公式长这样:

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

其中:

  • u(k):第k时刻的输出控制量(比如占空比)
  • e(k):第k时刻的误差(参考值 - 反馈值)
  • Kp, Ki, Kd:比例、积分、微分系数
  • Σe(i):从启动到当前时刻的误差累加和

位置式的特点很明显:

  • 输出是绝对量,直接对应PWM占空比
  • 积分项需要累加所有历史误差,容易溢出
  • 一旦积分项出问题,输出会直接跳变,很危险
注意:位置式PID的积分累加项在数字实现中必须做限幅处理。我曾经在一个48V转12V的DC-DC项目里,就因为积分项没限幅,启动时积分累积过大,输出直接饱和到100%占空比,把后级负载烧了。从那以后,我所有位置式PID代码里都会加一句:if(integral > INTEGRAL_MAX) integral = INTEGRAL_MAX;

4.1.2 增量式PID

增量式PID不输出控制量的绝对值,而是输出控制量的增量Δu(k)。公式推导一下:

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

实际控制量由累加得到:

u(k) = u(k-1) + Δu(k)

增量式的优势很明显:

  • 输出是增量,即使计算出错,单次跳变也不会太大
  • 不需要累加所有历史误差,积分饱和风险小
  • 手动/自动切换时无冲击——因为输出是累加出来的
我的习惯:在数字电源项目中,我90%的情况都用增量式PID。原因很简单——安全。你想想看,如果MCU跑飞了,位置式PID可能直接输出一个离谱的占空比,而增量式最多输出一个Δu,影响小得多。当然,增量式也有缺点,就是稳态精度略低于位置式,但实际工程中可以通过提高采样精度来弥补。

4.1.3 两种形式的对比

对比项 位置式PID 增量式PID
输出形式 绝对控制量 控制量增量
积分累加 需要累加所有历史误差 不需要,只依赖最近几次误差
积分饱和风险 高 低
手动/自动切换 有冲击,需做bumpless处理 无冲击,天然bumpless
计算资源 需要存储累加和 需要存储最近3次误差
适用场景 执行机构为比例环节(如PWM) 执行机构为积分环节(如步进电机)

4.2 积分饱和与抗饱和策略

积分饱和,我愿称之为PID控制器的“第一杀手”。很多工程师调了半天参数,发现系统响应慢、超调大,其实不是Kp、Ki的问题,而是积分饱和在作怪。

4.2.1 什么是积分饱和?

说白了,就是积分项累加得太大了,导致控制器输出被限幅器卡住,但积分还在继续累加。等误差反向时,积分项需要花很长时间才能“退回来”,这段时间里系统就像失控了一样。

举个例子:你启动一个电源,输出电压还没建立起来,误差很大。积分项疯狂累加,很快就让占空比达到了100%。但此时输出电压还在上升,误差依然为正,积分继续累加——直到输出电压超过设定值,误差变负,积分才开始往回退。这个“往回退”的过程,就是输出过冲的根源。

4.2.2 常见的抗饱和策略

我整理了几种工程上常用的方法,按推荐程度排序:

  1. 积分限幅法:给积分项设置上下限,这是最基础的做法。
  2. 积分分离法:当误差大于某个阈值时,停止积分;误差小到阈值以内再恢复积分。
  3. 反计算法(Back-calculation):当输出饱和时,把饱和量反馈回积分项,让积分“退一步”。
  4. 条件积分法:只有当输出未饱和时,才允许积分累加。

我个人最推荐的做法:积分限幅 + 条件积分的组合。先给积分项设一个合理的上限(通常为输出限幅值的10%~20%),然后在代码里判断:如果输出已经饱和,就冻结积分累加。这个方案实现简单,效果也够用。

下面是一个C语言的抗饱和PID实现片段:

// 增量式PID + 抗饱和
float pid_update(float setpoint, float feedback) {
    float error = setpoint - feedback;
    float delta_u;
    
    // 计算增量
    delta_u = Kp * (error - error_prev) 
            + Ki * error 
            + Kd * (error - 2*error_prev + error_prev2);
    
    // 累加输出
    output += delta_u;
    
    // 输出限幅
    if(output > OUT_MAX) {
        output = OUT_MAX;
        // 条件积分:输出饱和时,不累加本次积分增量
        // 实际效果就是冻结积分
    } else if(output < OUT_MIN) {
        output = OUT_MIN;
    }
    
    // 更新历史误差
    error_prev2 = error_prev;
    error_prev = error;
    
    return output;
}
避坑指南:我曾经在一个大功率Buck变换器项目里,用了积分分离法,阈值设得太小。结果系统在轻载和重载切换时,积分频繁开启和关闭,导致输出电压出现周期性抖动。后来我把阈值改大,同时配合条件积分,问题才解决。所以阈值的选择很关键,一般取额定输出的5%~10%比较稳妥。

4.3 PID参数整定方法

参数整定,说白了就是找到Kp、Ki、Kd这三个数,让系统跑得又快又稳。我见过有人靠“玄学调参”——调一天没调好,换个电阻电容再调一天。其实有系统的方法。

4.3.1 工程经验法

这是最常用的方法,适合大多数数字电源场景:

  1. 先调Kp:把Ki和Kd设为0,只加Kp。从小到大慢慢加,直到系统出现等幅振荡。记下此时的Kp值,称为临界增益Kc。
  2. 再调Ki:加入积分项,从Ki = 0.1*Kp开始试。观察稳态误差是否消除,如果消除得太慢就加大Ki,如果出现低频振荡就减小Ki。
  3. 最后调Kd:微分项主要用来抑制超调。从Kd = 0.05*Kp开始,观察动态响应。如果噪声太大,说明Kd太大了。
一个小技巧:在数字电源中,微分项对高频噪声非常敏感。我建议在采样后先做一个一阶低通滤波,再送入微分项。滤波截止频率设为开关频率的1/10左右,效果不错。

4.3.2 Ziegler-Nichols整定法

这是经典方法,适合有自激振荡能力的系统。步骤如下:

步骤 操作 说明
1 Ki=0, Kd=0,只加Kp 让系统进入纯比例控制
2 增大Kp直到等幅振荡 记录临界增益Kc和振荡周期Tc
3 按公式计算参数 Kp=0.6Kc, Ki=1.2Kc/Tc, Kd=0.075Kc*Tc
4 微调 根据实际响应微调,通常需要减小10%~20%

Z-N法给出的参数通常偏“激进”,系统会有20%~30%的超调。我一般会在算出来的基础上再打个八折,然后根据实际波形微调。

4.3.3 基于模型的设计方法

如果你有被控对象的传递函数(比如Buck变换器的小信号模型),可以用极点配置或频域法来设计PID参数。这个方法最精确,但需要你懂控制理论。

简单说下步骤:

  • 建立被控对象的传递函数G(s)
  • 设计PID控制器C(s),使开环传递函数C(s)G(s)的穿越频率在开关频率的1/10~1/20
  • 相位裕度保持在45°~60°之间
  • 用双线性变换(Tustin法)把C(s)离散化成C(z)

我的建议:对于刚入行的工程师,先用工程经验法把系统调稳定,再用Z-N法优化。等你对系统特性足够了解了,再尝试基于模型的设计。别一上来就搞复杂的数学模型,容易把自己绕进去。

4.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作一个快速索引:

数字PID控制器设计知识体系 数字PID控制器 PID实现形式 参数整定方法 位置式PID 绝对输出 增量式PID 增量输出 工程经验法 先P后I再D Z-N法 临界振荡法 模型 法 积分饱和与抗饱和 积分限幅法 积分分离法 条件积分法 核心原则:先稳后快,安全第一 推荐组合:增量式PID + 条件积分 + 工程经验法

这张图把本章的三个核心模块串在了一起。你可以看到,PID实现形式、积分饱和处理、参数整定方法,三者是相互关联的。比如你选了增量式PID,积分饱和的风险就小一些;你用了条件积分法,参数整定时就可以把Ki稍微加大一点。

好了,这一章的内容就到这儿。记住一句话:PID调参不是玄学,是有方法可循的工程实践。多动手、多记录、多总结,你也能成为调参高手。