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也是个选择。但说实话,现在工业上用得更多的是增量式。
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之间。太小了没效果,太大了又失去意义。
4.3.2 抗积分饱和
抗积分饱和解决的是另一个问题:当输出已经达到极限(比如PWM占空比100%),但偏差还在,积分项还在继续累加。等你需要减输出时,积分项已经“撑爆”了,导致输出迟迟降不下来。
常用的方法有两种:
- 积分限幅法:给积分项设个上限。比如Ki*Σe(i)不超过输出限幅值的20%~30%。
- 积分回退法:当输出饱和时,停止积分累加,甚至反向减小积分值。
代码实现(积分回退法):
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 微分项要慎用
微分项对噪声极其敏感。电机控制中,电流采样、速度计算都有噪声,微分项很容易把噪声放大。我的建议是:如果系统本身响应够快,干脆不用微分。实在要用,先加个低通滤波器。
4.4.4 现场调试口诀
我总结了个顺口溜,方便记忆:
- 比例先调稳,震荡减一半
- 积分消静差,时间别太短
- 微分慎添加,噪声先滤干
- 饱和要处理,分离保平安
4.5 知识体系总览
下面这张图,把PID在电机控制中的几种形态和关系梳理了一下。你看一眼就能明白它们各自的位置。
这张图把PID的两种基本形态和两种改进方法串起来了。位置式和增量式是“骨架”,积分分离和抗积分饱和是“血肉”。实际工程中,我通常先用增量式,再根据情况加上积分分离或抗饱和逻辑。
好了,关于PID在电机控制中的应用,咱们就聊到这儿。记住,理论是死的,电机是活的。多动手调,多观察波形,慢慢你就能找到感觉。
公众号:蓝海资料掘金营,微信deep3321