4、PID控制算法在电机中的应用:位置式PID、增量式PID、积分分离与抗积分饱和、PID参数整定经验

说到电机控制,PID算法绝对是绕不开的核心。我入行那会儿,第一个实战项目就是做直流有刷电机的速度闭环。当时看着示波器上的波形,心里直打鼓——这玩意儿到底怎么调才能稳?后来摸爬滚打这么多年,算是把PID的脾气摸透了。

今天咱们就聊聊PID在电机控制里的几种常见形态。说白了,PID就是个“纠偏”的算法。你设定一个目标,它帮你算算当前差了多少,然后通过比例、积分、微分三个动作去修正。但具体怎么实现,这里头门道可不少。

4.1 位置式PID

位置式PID,也叫全量式PID。它直接计算当前时刻的控制量输出。公式长这样:

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

其中e(k)是当前偏差,Σe(i)是历史偏差的累加。这个公式看着简单,但实际用起来有个大坑——积分项会一直累加。我在做伺服电机位置控制时就吃过这个亏。

注意:位置式PID的输出是绝对值。如果电机突然断电再重启,积分项可能还保留着上次的值,一启动就猛冲。这就是所谓的“积分饱和”。

位置式PID适合什么场景?我个人习惯用在执行机构没有“记忆”的场合,比如比例阀、加热器。电机控制里,如果你做的是位置环,而且对稳态精度要求极高,位置式PID也是个选择。但说实话,现在工业上用得更多的是增量式。

4.2 增量式PID

增量式PID,顾名思义,它输出的是控制量的增量,而不是绝对值。公式推导一下:

Δu(k) = 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)

你想想看,增量式的好处是什么?它只跟最近三次的偏差有关。就算你把电机断电再上电,Δu从0开始算,不会突然蹦出一个大值。我在做无刷直流电机(BLDC)的电流环时,几乎清一色用增量式。

核心优势:
  • 没有积分饱和问题——因为压根不累加历史偏差
  • 手动/自动切换无冲击——输出是增量,切换时平滑过渡
  • 计算量小——适合嵌入式实时控制

嗯,这里要注意。增量式PID虽然避免了积分饱和,但它也有个缺点:对执行机构的精度要求高。如果电机驱动器有死区或者非线性,增量式可能调不到零误差。我曾经在一个项目中,电机低速时抖动得厉害,后来发现是增量式PID在死区附近反复震荡。

4.3 积分分离与抗积分饱和

这两个概念经常被混为一谈,但其实是两码事。咱们分开说。

4.3.1 积分分离

积分分离的思路很简单:当偏差很大的时候,先把积分项关掉。为什么?因为偏差大时,积分项会疯狂累加,等你回到目标附近时,积分已经“撑”得很大了,导致超调甚至震荡。

实现方式:

if |e(k)| > ε:
    Ki = 0   // 偏差大,积分不工作
else:
    Ki = Ki0 // 偏差小,积分正常

这个ε阈值怎么选?我一般取目标值的5%~10%。比如电机目标转速3000RPM,那ε设在150~300RPM之间。太小了没效果,太大了又失去意义。

小技巧:积分分离不要搞成“开关式”,可以做个渐变。比如偏差从大到小,积分系数从0慢慢恢复到正常值。这样过渡更平滑,电机不会突然“咯噔”一下。

4.3.2 抗积分饱和

抗积分饱和解决的是另一个问题:当输出已经达到极限(比如PWM占空比100%),但偏差还在,积分项还在继续累加。等你需要减输出时,积分项已经“撑爆”了,导致输出迟迟降不下来。

常用的方法有两种:

  1. 积分限幅法:给积分项设个上限。比如Ki*Σe(i)不超过输出限幅值的20%~30%。
  2. 积分回退法:当输出饱和时,停止积分累加,甚至反向减小积分值。

代码实现(积分回退法):

if u(k) >= Umax:
    if e(k) > 0:
        // 输出饱和且偏差为正,停止积分
        integral = integral
    else:
        // 偏差为负,正常积分
        integral += e(k)
elif u(k) <= Umin:
    // 类似处理下限
    ...

我曾经在一个风机项目中,电机启动时总是过冲。查了半天,发现就是积分饱和在作怪。加上抗饱和逻辑后,启动波形漂亮多了。

4.4 PID参数整定经验

参数整定,说白了就是调Kp、Ki、Kd这三个数。很多新手一上来就对着公式算,其实没必要。我分享几个实战经验。

4.4.1 先调Kp,再调Ki,最后调Kd

这个顺序基本是铁律。先把积分和微分置零,只留比例。慢慢增大Kp,直到系统开始震荡。然后取震荡时Kp的60%~70%作为最终值。这叫“临界比例度法”。

参数 作用 调大后的效果 调小后的效果
Kp 快速响应偏差 响应快,但可能震荡 响应慢,稳态误差大
Ki 消除稳态误差 消除静差,但可能超调 稳态误差消除慢
Kd 抑制超调,改善动态 抑制震荡,但噪声放大 动态响应变差

4.4.2 积分时间要够长

很多人喜欢把Ki设得很大,觉得这样能快速消除误差。其实不然。积分时间常数Ti = Kp / Ki,Ti一般取5~20个采样周期。我习惯先设Ti=10个周期,再微调。

4.4.3 微分项要慎用

微分项对噪声极其敏感。电机控制中,电流采样、速度计算都有噪声,微分项很容易把噪声放大。我的建议是:如果系统本身响应够快,干脆不用微分。实在要用,先加个低通滤波器。

避坑指南:我曾经在一个项目中,电机高速运行时电流波形毛刺特别多。查了半天,发现是微分项把PWM开关噪声放大了。后来把Kd设成0,问题解决。所以,微分项不是必须的。

4.4.4 现场调试口诀

我总结了个顺口溜,方便记忆:

  • 比例先调稳,震荡减一半
  • 积分消静差,时间别太短
  • 微分慎添加,噪声先滤干
  • 饱和要处理,分离保平安

4.5 知识体系总览

下面这张图,把PID在电机控制中的几种形态和关系梳理了一下。你看一眼就能明白它们各自的位置。

PID控制算法在电机中的应用 PID控制器 位置式PID 增量式PID 输出绝对值 积分累加,易饱和 输出增量 无积分饱和 积分分离 & 抗积分饱和 实际工程中,常将位置式/增量式与积分改进方法结合使用

这张图把PID的两种基本形态和两种改进方法串起来了。位置式和增量式是“骨架”,积分分离和抗积分饱和是“血肉”。实际工程中,我通常先用增量式,再根据情况加上积分分离或抗饱和逻辑。

好了,关于PID在电机控制中的应用,咱们就聊到这儿。记住,理论是死的,电机是活的。多动手调,多观察波形,慢慢你就能找到感觉。


公众号:蓝海资料掘金营,微信deep3321