这一章在干嘛?

全书核心算法登场。从开环 vs 闭环讲起,用「大棚温控」的例子掰开揉碎 PID 三环节各管什么,推导位置式/增量式离散公式,给出可直接抄的 C 代码,最后认识积分饱和问题。

8.1 开环与闭环

8.2 三个环节各管什么?

8.3 位置式 vs 增量式

8.4 积分饱和与代码实现

8.1 开环与闭环

开环:只发指令不看结果——风扇设了固定电压,但电机老化、灰尘让负载变了,实际风力就偏离目标,精度差、抗扰弱。

闭环:加反馈回路,用「目标值 − 实际值 = 偏差」驱动控制——大棚温控系统实时测温,偏差喂给控制电路自动调温。把对象换成电机、反馈换成编码器,就是电机闭环调速:

原书图 8.1.2 原书图 8.1.2:闭环控制系统实例:目标值与实际值求偏差,自动调节

8.2 三个环节各管什么?

PID = Proportion 比例 + Integral 积分 + Differential 微分。控制流程:目标值与实际值求偏差 e → 三环节运算 → 输出作用于执行器:

原书图 8.2.1 原书图 8.2.1:PID 控制流程:偏差经 P/I/D 三环节后输出

环节公式作用副作用(过大)
P 比例偏差越大出力越大,响应快超调、振荡;存在静态误差
I 积分只要偏差在就持续累计加力,消除静态误差超调加剧、响应变慢
D 微分看偏差变化趋势,提前减速,抑制超调放大噪声、系统振荡

原书图 8.2.1.1 原书图 8.2.1.1:比例环节曲线:Kp 越大到达目标越快,但超调振荡越猛

原书图 8.2.1.2 原书图 8.2.1.2:纯比例的静态误差:输出刚好被外部损耗抵消,偏差长期存在

原书图 8.2.2.1 原书图 8.2.2.1:比例+积分曲线:积分持续加力消除静差

静态误差怎么来的?

例:Kp 固定时输出刚好被外部环境抵消(半小时升温 5°C = 外部降温 5°C),偏差永远消不掉。积分环节「记账式」累计偏差,逼输出增大直到静差消除。

三者合体的离散公式(位置式):

8.3 位置式 vs 增量式

把 k 换成 k−1 再相减,得到增量式

直观理解:50→60RPM 加速,位置式直接输出 60RPM 的全量占空比;增量式只输出「提 10RPM 的增量」,需累加到上次输出上。

对比项位置式增量式
输出全量输出仅增量
偏差需一直累计只看最近 3 次
积分作用
限幅输出 + 积分都要限幅仅输出限幅

怎么选?

位置式带积分、适合需消除静差的场合(速度环),但要做积分限幅防饱和;增量式运算量小、误算影响小,适合执行机构带积分特性的对象(如步进电机)。

8.4 积分饱和与代码实现

积分饱和:目标设得超出系统能力(电机最快 300RPM 你设 350),偏差长期存在 → 积分越累越大深度饱和;这时改目标 200RPM,系统因「积食」迟迟无法响应:

原书图 8.3.1 原书图 8.3.1:不合理目标值导致积分深度饱和,调节失灵

对策:① 优化 PID 参数让系统尽快达标;② 限制目标值范围;③ 积分限幅(调好参数后按系统设定上限)。

C 代码用一个结构体管理全部控制量(目标值、三系数、最近三次偏差、累计偏差),位置式核心就五行:

PID->Error = PID->SetPoint - Feedback;        /* 偏差 */
PID->SumError += PID->Error;                  /* 累计偏差 */
PID->ActualValue = PID->Proportion * PID->Error          /* P */
                 + PID->Integral  * PID->SumError        /* I */
                 + PID->Derivative * (PID->Error - PID->LastError);  /* D */
PID->LastError = PID->Error;

增量式写法不同点:

ActualValue 是 += 自增 (输出增量),并需要保存最近两次偏差。