4、PID控制基础:PID控制器原理、数字PID实现、抗积分饱和策略、PID参数整定方法
各位同学,欢迎来到第四章。从这章开始,我们正式进入电机控制的核心——PID控制。
说实话,PID这东西,搞控制的没人不知道。但你真的理解它吗?我见过不少工程师,调了几年PID,遇到积分饱和还是一脸懵。今天咱们就把这层窗户纸捅破。
4.1 PID控制器原理:三个“老伙计”的故事
PID控制器,说白了就是三个环节的线性组合:比例(P)、积分(I)、微分(D)。它们各司其职,配合好了,电机就能指哪打哪。
- 比例环节(P):看现在。误差有多大,我就输出多大的力。你想想看,如果电机位置偏了10度,P环节就输出一个正比于10度的力矩把它拉回来。P越大,响应越快,但容易过头——这就是超调。
- 积分环节(I):看过去。误差一直存在怎么办?I环节会慢慢累积,把“历史欠账”还清。我在项目中遇到过,单纯用P控制,电机总是差那么一点点到不了目标位置,加上I之后,稳态误差就消失了。
- 微分环节(D):看未来。误差变化快了,D环节提前“踩刹车”。比如电机快要冲到目标位置了,D会提前减小输出,防止过冲。
数学表达式很简单:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
其中e(t)是误差,u(t)是控制输出。嗯,这里要注意,三个系数的正负号千万别搞反了,我见过有人把Kd符号弄反,结果系统直接震荡发散。
4.2 数字PID实现:从连续到离散
计算机没法处理连续信号,所以我们要把PID离散化。常用的有两种形式:位置式PID和增量式PID。
4.2.1 位置式PID
直接模拟连续PID的公式,用累加代替积分,用差分代替微分:
u(k) = Kp * e(k) + Ki * Ts * Σe(i) + Kd * (e(k) - e(k-1)) / Ts
其中Ts是采样周期。我个人习惯把Ki和Kd写成包含Ts的形式,这样调参时更直观。
4.2.2 增量式PID
增量式PID只计算输出的变化量Δu(k),而不是绝对值:
Δu(k) = Kp * (e(k) - e(k-1)) + Ki * Ts * e(k) + Kd * (e(k) - 2*e(k-1) + e(k-2)) / Ts
实际输出:u(k) = u(k-1) + Δu(k)
增量式的优点很明显:
- 输出只跟最近几次误差有关,积分累积效应小
- 执行器本身有记忆(比如步进电机),即使输出丢失,也不会跑飞
- 手动/自动切换时冲击小
我在做伺服驱动器时,位置环用的就是增量式PID,因为位置环的输出是速度指令,增量式切换更平滑。
4.3 抗积分饱和策略:别让积分“撑死”
积分饱和,是PID控制中最常见的坑之一。为什么会这样?
当执行器达到饱和(比如PWM占空比100%),误差还在,积分项继续累加。等误差反向时,积分项已经累积了很大值,需要很长时间才能“消化”掉,导致系统响应迟钝,甚至震荡。
我曾经调试一个风机转速控制,积分饱和导致转速过冲超过30%,风机嗡嗡响,差点把叶片甩飞了。从那以后,我每次设计PID都会加上抗积分饱和。
常用的策略有三种:
| 策略 | 原理 | 适用场景 |
|---|---|---|
| 积分限幅 | 限制积分项的累积值,不超过某个阈值 | 简单有效,适合大多数场合 |
| 积分分离 | 误差大时停止积分,误差小时恢复积分 | 启动阶段有大误差的场景 |
| 反计算法 | 根据饱和程度反向修正积分项 | 要求高动态响应的场合 |
4.4 PID参数整定方法:从“瞎调”到“科学调”
调参是门手艺活。我刚开始做电机控制时,也是Kp、Ki、Kd乱改一通,系统要么震荡要么迟钝。后来总结了几套方法,分享给大家。
4.4.1 试凑法(经验法)
这是最常用的方法,适合现场快速调试:
- 先调P:Ki和Kd设为0,逐渐增大Kp,直到系统出现等幅震荡。记录此时的Kp为Kp_crit,震荡周期为T_crit。
- 再调I:加入Ki,消除稳态误差。Ki从Kp_crit / (2 * T_crit)开始试。
- 最后调D:如果超调大,加入Kd。Kd从Kp_crit * T_crit / 8开始试。
嗯,这里要注意,试凑法依赖经验,不同系统差异很大。我调过的一个微型电机,Kp只有0.01就震荡了;而另一个大惯量转台,Kp到100才刚有反应。
4.4.2 Ziegler-Nichols法(ZN法)
ZN法是一种经典整定方法,基于临界增益Kp_crit和临界周期T_crit:
| 控制器类型 | Kp | Ki | Kd |
|---|---|---|---|
| P | 0.5 * Kp_crit | - | - |
| PI | 0.45 * Kp_crit | 1.2 * Kp / T_crit | - |
| PID | 0.6 * Kp_crit | 2 * Kp / T_crit | Kp * T_crit / 8 |
ZN法给出的参数通常偏激进,系统会有20%-30%的超调。我个人习惯用ZN法算个初值,然后手动微调。
4.4.3 自整定法
现代驱动器大多支持自整定。原理是给系统施加一个激励信号(如阶跃或正弦),通过响应数据自动计算PID参数。
自整定省时省力,但要注意:
- 自整定过程中系统会“乱动”,确保安全
- 自整定结果依赖模型精度,非线性系统可能不准
- 自整定后最好手动验证一下
核心总结:
- PID三环节:P管响应速度,I管稳态精度,D管动态阻尼
- 数字PID:位置式适合绝对值输出,增量式适合增量输出
- 抗积分饱和:积分限幅最常用,积分分离适合大误差启动
- 参数整定:试凑法灵活,ZN法有理论依据,自整定省力但需验证
好了,这一章的内容就到这里。下一章我们会讲PID在电机控制中的具体应用——电流环、速度环、位置环的PID设计。到时候我会拿一个实际项目案例,带大家一步步调参。咱们下章见。