PID 控制算法 | 参数整定 | 方法 / 仿真 / 应用案例
注:本文为“PID 控制参数整定”相关合辑。
略作重排,未整理去重。
如有内容异常,请看原文。
PID 参数整定方法介绍
Shijia Yin 于 2019-03-18 19:37:01 发布
完全经验法
这种方法没有任何定量规律可循,凭借的是工程技术人员对控制系统与控制对象的工作机理、工作环境的熟悉,是一种粗糙的调参方法。一些定性的调参准则如下:
参数整定找最佳,从小到大顺序查;
先是比例后积分,最后再把微分加。
曲线振荡很频繁,比例度盘要放大;
曲线漂浮绕大湾,比例度盘往小扳。
曲线偏离回复慢,积分时间往下降;
曲线波动周期长,积分时间再加长。
曲线振荡频率快,先把微分降下来;
动差大来波动慢,微分时间应加长。
理想曲线两个波,前高后低 4 比 1;
一看二调多分析,调节质量不会低。
等幅振荡法
步骤:
- 先将 PID 控制器中的积分与微分作用切除,取比例增益 K c K_c Kc较小值,并投入闭环运行;
- 将 K c K_c Kc由小到大变化,对应于某一 K c K_c Kc值作小幅度的设定值阶跃响应,直至产生等幅振荡;
- 设等幅振荡时振荡周期为 T c r T_{cr} Tcr、控制器增益为 K c r K_{cr} Kcr,再根据控制器类型选择以下 PID 参数。
控制规律 | K c K_c Kc | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | 0.5 K c r 0.5 K_{cr} 0.5Kcr | ||
PI | 0.45 K c r 0.45 K_{cr} 0.45Kcr | 0.83 T c r 0.83 T_{cr} 0.83Tcr | |
PID | 0.6 K c r 0.6 K_{cr} 0.6Kcr | 0.5 T c r 0.5 T_{cr} 0.5Tcr | 0.12 T c r 0.12 T_{cr} 0.12Tcr |
接下来进行具体的仿真。
下图是仿真框图:
不断增大 P,发现 P 在 5.6 左右发生等幅振荡。经过测量得到 K c r = 5.6 K_{cr} = 5.6 Kcr=5.6,振荡周期 T c r = 9.455 s T_{cr} = 9.455 \, \text{s} Tcr=9.455s。
控制规律 | K c K_c Kc | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | 2.8 2.8 2.8 | ||
PI | 2.52 2.52 2.52 | 7.8 7.8 7.8 | |
PID | 3.36 3.36 3.36 | 4.7 4.7 4.7 | 1.1 1.1 1.1 |
PID 参数按照计算好的数值并结合具体实际情况进行调整设置。
P 控制:
PI 控制:
PID 控制:
衰减曲线法
- 先把积分时间放至最大,微分时间放至零,使控制系统运行,比例度放至较大的适当值。通过“纯 P 降低比例度”,使控制系统按纯比例作用的方式投入运行。然后慢慢地减少比例度,观察调节器的输出及控制过程的波动情况,直到找出 4:1 的衰减过程为止。
- 对于某些控制对象,若 4:1 的衰减比振荡过强,可采用 10:1 的衰减比。此时测量衰减周期较为困难,可采取测量第一个波峰的上升时间 T r T_r Tr,其操作步骤同上。
- 根据衰减比例度 s s s和衰减周期 T s T_s Ts、 T r T_r Tr,按表 1 进行计算,求出各参数值。
4:1 衰减比
控制规律 | δ \delta δ | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | δ s \delta_s δs | ||
PI | 1.2 δ s 1.2 \delta_s 1.2δs | 0.5 T i 0.5 T_i 0.5Ti | |
PID | 0.8 δ s 0.8 \delta_s 0.8δs | 0.3 T i 0.3 T_i 0.3Ti | 0.1 T i 0.1 T_i 0.1Ti |
10:1 衰减比
控制规律 | δ \delta δ | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | δ s \delta_s δs | ||
PI | 1.2 δ s 1.2 \delta_s 1.2δs | 2 T r 2 T_r 2Tr | |
PID | 0.8 δ s 0.8 \delta_s 0.8δs | 0.3 T r 0.3 T_r 0.3Tr | 0.1 T r 0.1 T_r 0.1Tr |
具体仿真
找到 4:1 衰减点,如下图所示:
此时的衰减周期 T s = 13.3 s T_s = 13.3 \, \text{s} Ts=13.3s,比例度 δ = 0.5 \delta = 0.5 δ=0.5。
控制规律 | K c K_c Kc | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | 2 2 2 | ||
PI | 1.66 1.66 1.66 | 6.65 6.65 6.65 | |
PID | 2.5 2.5 2.5 | 3.99 3.99 3.99 | 1.3 1.3 1.3 |
整定后的效果如下:
P 控制:
PI 控制:
PID 控制:
响应曲线法
响应曲线法 PID 参数整定步骤:
- 在手动状态下,改变控制器输出(通常采用阶跃变化),记录被控变量的响应曲线;
- 由开环响应曲线获得单位阶跃响应曲线,并求取“广义对象”的近似模型与模型参数;
- 根据控制器类型与对象模型,选择 PID 参数并投入闭环运行。在运行过程中,可对增益作调整。
由于广义对象的响应曲线可以用“一阶 + 纯滞后”来近似,因此可以使用 Ziegler-Nichols 参数整定方法:
控制规律 | K c K_c Kc | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | 1 k p × T p τ \frac{1}{k_p} \times \frac{T_p}{\tau} kp1×τTp | ||
PI | 0.9 × 1 k p × T p τ 0.9 \times \frac{1}{k_p} \times \frac{T_p}{\tau} 0.9×kp1×τTp | 3.3 τ 3.3 \tau 3.3τ | |
PID | 1.2 × 1 k p × T p τ 1.2 \times \frac{1}{k_p} \times \frac{T_p}{\tau} 1.2×kp1×τTp | 2.2 τ 2.2 \tau 2.2τ | 0.5 τ 0.5 \tau 0.5τ |
仿真整定
下图是仿真图(添加了一个滞后环节):
由下图可以得到纯时滞 τ = 5 s \tau = 5 \, \text{s} τ=5s,惯性时间常数 T p = 8.747 s T_p = 8.747 \, \text{s} Tp=8.747s,输出变化范围 Δ O = 4.5 \Delta O = 4.5 ΔO=4.5,输入变化范围 Δ I = 1 \Delta I = 1 ΔI=1。
由上述数据可以得到 K p = Δ O Δ I = 4.5 K_p = \frac{\Delta O}{\Delta I} = 4.5 Kp=ΔIΔO=4.5。
控制规律 | K c K_c Kc | T i T_i Ti | T d T_d Td |
---|---|---|---|
P | 0.39 0.39 0.39 | ||
PI | 0.351 0.351 0.351 | 16.5 16.5 16.5 | |
PID | 0.468 0.468 0.468 | 11 11 11 | 2.5 2.5 2.5 |
结合控制方案进行相应的设置,整定后的效果如下:
P 控制:
PI 控制:
PID 控制:
PID 算法实现及参数整定图解(附代码)
物联网全栈开发于 2016-05-10 23:25:11 发布
一、PID 含义
PID 是英文单词比例(Proportion)、积分(Integral)、微分(Differential coefficient)的缩写。PID 调节实际上是由比例、积分、微分三种调节方式组成,它们各自的作用如下:
- 比例调节作用:按比例反应系统的偏差。系统一旦出现偏差,比例调节立即产生调节作用以减少偏差。比例作用过大,会使系统的稳定性下降,甚至造成系统不稳定。
- 积分调节作用:使系统消除稳态误差,提高无差度。积分调节的强弱取决于积分时间常数 T i T_i Ti, T i T_i Ti越小,积分作用越强。积分作用常与比例调节结合,组成 PI 调节器或 PID 调节器。
- 微分调节作用:反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,从而产生超前的控制作用。微分作用对噪声干扰有放大作用,过强的微分调节对系统抗干扰不利。微分作用不能单独使用,需要与比例调节结合,组成 PD 或 PID 控制器。
离散式 PID 分为位置型和增量型。
二、PID 位置式计算公式
u ( k ) = K p e ( k ) + K i ∑ j = 0 k e ( j ) + K d [ e ( k ) − e ( k − 1 ) ] (1-1) u(k) = K_p e(k) + K_i \sum_{j = 0}^{k} e(j) + K_d [e(k) - e(k - 1)] \tag{1-1} u(k)=Kpe(k)+Kij=0∑ke(j)+Kd[e(k)−e(k−1)](1-1)
式中:
- e ( k ) e(k) e(k):第 k k k个采样时刻的偏差;
- u ( k ) u(k) u(k):第 k k k个采样时刻的控制量;
- T T T:采样周期。
由于计算机的输出 u ( k ) u(k) u(k)直接控制执行机构(如阀门), u ( k ) u(k) u(k)的值与执行机构的位置(如阀门开度)一一对应,因此通常称式 (1-1) 为位置式 PID 控制算法。
三、PID 增量式计算公式
增量式计算公式可由(式 1-1)推导得到:
由 (1-1) 可以得到控制器的第 k − 1 k-1 k−1个采样时刻的输出值为:
u k − 1 = K p [ e k − 1 + T T i ∑ j = 0 k − 1 e j + T d e k − 1 − e k − 2 T ] (1-2) u_{k - 1} = K_p \left[ e_{k - 1} + \frac{T}{T_i} \sum_{j = 0}^{k - 1} e_j + T_d \frac{e_{k - 1} - e_{k - 2}}{T} \right] \tag{1-2} uk−1=Kp[ek−1+TiTj=0∑k−1ej+TdTek−1−ek−2](1-2)
将 (1-1) 与 (1-2) 相减并整理,可以得到增量式 PID 控制算法公式为:
Δ u k = u k − u k − 1 = K p [ e k − e k − 1 + T T i e k + T d e k − 2 e k − 1 + e k − 2 T ] = K p ( 1 + T T i + T d T ) e k − K p ( 1 + 2 T d T ) e k − 1 + K p T d T e k − 2 = A e k − B e k − 1 + C e k − 2 (1-3) \begin{align*} \Delta u_k &= u_k - u_{k - 1} = K_p \left[ e_k - e_{k - 1} + \frac{T}{T_i} e_k + T_d \frac{e_k - 2e_{k - 1} + e_{k - 2}}{T} \right] \\ &= K_p \left(1 + \frac{T}{T_i} + \frac{T_d}{T}\right) e_k - K_p \left(1 + \frac{2T_d}{T}\right) e_{k - 1} + K_p \frac{T_d}{T} e_{k - 2} \\ &= A e_k - B e_{k - 1} + C e_{k - 2} \end{align*} \tag{1-3} Δuk=uk−uk−1=Kp[ek−ek−1+TiTek+TdTek−2ek−1+ek−2]=Kp(1+TiT+TTd)ek−Kp(1+T2Td)ek−1+KpTTdek−2=Aek−Bek−1+Cek−2(1-3)
其中:
- Δ u ( k ) = u ( k ) − u ( k − 1 ) \Delta u(k) = u(k) - u(k-1) Δu(k)=u(k)−u(k−1);
- Δ e ( k ) = e ( k ) − e ( k − 1 ) \Delta e(k) = e(k) - e(k-1) Δe(k)=e(k)−e(k−1)。
由 (1-3) 可以看出,如果计算机控制系统采用恒定的采样周期 T T T,一旦确定 A A A、 B B B、 C C C,只要使用前后三次测量的偏差值,就可以由 (1-3) 求出控制量。
增量式 PID 控制算法与位置式 PID 算法 (1-1) 相比,计算量小得多,因此在实际中得到广泛的应用。
位置式 PID 控制算法也可以通过增量式控制算法推出递推计算公式:
u k = u k − 1 + Δ u (1-4) {{u}_{k}}={{u}_{k-1}}+\Delta u \tag{1-4} uk=uk−1+Δu(1-4)
(1-4) 就是目前在计算机控制中广泛应用的数字递推 PID 控制算法。
式 (1-3) 也即:
Δ u ( k ) = u ( k ) − u ( k − 1 ) = K p Δ e ( k ) + K i e ( k ) + K d [ Δ e ( k ) − Δ e ( k − 1 ) ] \Delta u(k) = u(k) - u(k-1) = K_p \Delta e(k) + K_i e(k) + K_d [\Delta e(k) - \Delta e(k-1)] Δu(k)=u(k)−u(k−1)=KpΔe(k)+Kie(k)+Kd[Δe(k)−Δe(k−1)]
式中:
- Δ e ( k ) = e ( k ) − e ( k − 1 ) \Delta e(k) = e(k) - e(k-1) Δe(k)=e(k)−e(k−1);
- K i = K p T T i K_i = \frac{K_p T}{T_i} Ki=TiKpT;
- K d = K p T d T K_d = \frac{K_p T_d}{T} Kd=TKpTd。
式中:
- T T T:计算机控制系统的采样周期,其选用原则是在被控系统反馈信号的反应时间要求内,尽量小。但过小会增加运算量;
- K p K_p Kp:控制器的比例放大系数;
- T i T_i Ti:控制器的积分时间;
- T d T_d Td:控制器的微分时间。
四、优缺点
增量式算法优点:
- 算式中不需要累加。控制增量 Δ u ( k ) \Delta u(k) Δu(k)的确定仅与最近 3 次的采样值有关,容易通过加权处理获得比较好的控制效果;
- 计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小,不会严重影响生产过程;
- 手动 - 自动切换时冲击小。当控制从手动向自动切换时,可以做到无扰动切换。
位置式 PID 控制算法缺点:
- 当前采样时刻的输出与过去的各个状态有关,计算时要对 e ( k ) e(k) e(k)进行累加,运算量大;
- 控制器的输出 u ( k ) u(k) u(k)对应的是执行机构的实际位置,如果计算机出现故障, u ( k ) u(k) u(k)的大幅度变化会引起执行机构位置的大幅度变化。
五、区别与联系
- 增量式和位置式本质上是一样的,增量式最后的输出化解完和位置式一样。增量式 PID 可以通过 u ( k ) = u ( k − 1 ) + Δ u ( k ) u(k) = u(k-1) + \Delta u(k) u(k)=u(k−1)+Δu(k)得到位置式输出。
- 增量型算法与位置型算法比较:
- 增量型算法不需做累加,计算误差后产生的计算精度问题对控制量的计算影响较小。位置型算法用到过去的误差的累加,容易产生较大的累加误差。
- 增量型算法得出的是控制的增量,误动作影响小,必要时通过逻辑判断限制或禁止本次输出,不会影响系统的工作。位置型算法的输出是控制量的全部输出,误动作影响大。
- 增量式算法的主要优势体现在对积分环节的处理上,积分作用的累加效果会影响到输出的准确性。
- 增量式算法易于实现手、自动的无扰动切换。
六、增量式 PID 调试总结
1. 负反馈
自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(PID 算法时,误差 = 输入 - 反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。
2. PID 调试一般原则
a. 在输出不振荡时,增大比例增益 P。
b. 在输出不振荡时,减小积分时间常数 T i T_i Ti。
c. 在输出不振荡时,增大微分时间常数 T d T_d Td。
3. 一般步骤
a. 选取合适的采样周期 T
首先选取合适的采样周期 T,例如 0.05 s。待其余参数调整好后,可再对比修改采样周期 T。
b. 确定比例增益 P
确定比例增益 P 时,首先去掉 PID 的积分项和微分项,令 T i = 0 T_i = 0 Ti=0、 T d = 0 T_d = 0 Td=0,使 PID 为纯比例调节。输入设定为系统允许的最大值的 60%~70%,由 0 逐渐加大比例增益 P,直至系统出现振荡;再反过来,从此时的比例增益 P 逐渐减小,直至系统振荡消失,记录此时的比例增益 P,设定 PID 的比例增益 P 为当前值的 60%~70%。
c. 确定积分时间常数 T i T_i Ti
比例增益 P 确定后,设定一个较大的积分时间常数 T i T_i Ti的初值,然后逐渐减小 T i T_i Ti,直至系统出现振荡,之后再逐渐加大 T i T_i Ti,直至系统振荡消失。记录此时的 T i T_i Ti,设定 PID 的积分时间常数 T i T_i Ti为当前值的 150%~180%。
d. 确定微分时间常数 T d T_d Td
积分时间常数 T d T_d Td一般不用设定,为 0 即可。若要设定,与确定 P 和 T i T_i Ti的方法相同,取不振荡时的 30%。
e. 系统空载、带载联调
对 PID 参数进行微调,直至满足要求。
七、代码
1. C 文件
/* (C) COPYRIGHT Adrian */
/* 文件名 :PID.c */
/* 描述 :增量式 PID 算法和位置式 PID 算法 */
/* 作者 :Adrian */
/* 版本更新 :2016-05-01 */
/* 硬件连接 : */
/* 调试方式 :J-Link-OB */#include "PID.h"// 增量式 PID 参数初始化
void IncrementalPIDInit(IncrementalPID *S, int32_t Piont, double T, double Kp, double Ti, double Td)
{S->SetPoint = Piont; // 目标值S->SumError = 0;S->A = Kp * (1 + T / Ti + Td / T);S->B = Kp * (1 + 2 * Td / T);S->C = Kp * Td / T;S->NowError = 0; // 当前误差S->LastError = 0; // 上次误差S->PrevError = 0; // 上上次误差
}// 增量式 PID 迭代
int32_t IncrementalPIDCalc(IncrementalPID *Sptr, int32_t x)
{int32_t Out = 0;Sptr->NowError = Sptr->SetPoint - x;Out = Sptr->A * Sptr->NowError - Sptr->B * Sptr->LastError + Sptr->C * Sptr->PrevError;Sptr->PrevError = Sptr->LastError;Sptr->LastError = Sptr->NowError;return Out;
}// 增量式 PID 设置目标值
void PointSetIncrementalPID(IncrementalPID *Sptr, int32_t Piont)
{Sptr->SetPoint = Piont; // 目标值
}// 增量式 PID 目标值递减
void PointSubIncrementalPID(IncrementalPID *Sptr, int32_t Piont)
{Sptr->SetPoint -= Piont; // 目标值
}// 增量式 PID 目标值递增
void PointAddIncrementalPID(IncrementalPID *Sptr, int32_t Piont)
{Sptr->SetPoint += Piont; // 目标值
}// 增量式 PID 参数初始化(另一种实现)
void IncrementalPIDInit1(IncrementalPID1 *S, int32_t Piont, double T, double Kp, double Ti, double Td)
{S->SetPoint = Piont; // 目标值S->Kp = Kp;S->Ki = Kp * T / Ti;S->Kd = Kp * Td / T;S->NowError = 0; // 当前误差S->LastError = 0; // 上次误差S->PrevError = 0; // 上上次误差S->SumError = 0;
}// 增量式 PID 迭代(另一种实现)
int32_t IncrementalPIDCalc1(IncrementalPID1 *Sptr, int32_t NowPoint)
{int32_t Out = 0;Sptr->NowError = Sptr->SetPoint - NowPoint;Out = Sptr->Kp * (Sptr->NowError - Sptr->LastError) + Sptr->Ki * Sptr->NowError + Sptr->Kd * (Sptr->NowError - 2 * Sptr->LastError + Sptr->PrevError);Sptr->PrevError = Sptr->LastError;Sptr->LastError = Sptr->NowError;return Out;
}
2. 头文件
#ifndef PID_H__
#define PID_H__
#include "stm32f10x.h"typedef struct IncrementalPID
{int32_t SetPoint; // 设定目标double A;double B;double C;int32_t NowError; // 当前误差int32_t LastError; // 上次误差int32_t PrevError; // 上上次误差int64_t SumError; // 误差累计
} IncrementalPID;void IncrementalPIDInit(IncrementalPID *S, int32_t Piont, double T, double Kp, double Ti, double Td);
int32_t IncrementalPIDCalc(IncrementalPID *Sptr, int32_t x);
void PointSetIncrementalPID(IncrementalPID *Sptr, int32_t Piont);
void PointSubIncrementalPID(IncrementalPID *Sptr, int32_t Piont);
void PointAddIncrementalPID(IncrementalPID *Sptr, int32_t Piont);typedef struct IncrementalPID1
{int32_t SetPoint; // 设定目标double Kp; // 比例常数double Ki; // 积分常数double Kd; // 微分常数int32_t NowError; // 当前误差int32_t LastError; // 上次误差int32_t PrevError; // 上上次误差int64_t SumError; // 误差累计
} IncrementalPID1;#endif // PID_H__
自动控制:PID 控制及其参数整定方法
Persist_Zhang 于 2024-05-22 12:52:43 发布
PID 控制器(比例 - 积分 - 微分控制器)是工业控制系统中最广泛应用的控制器之一。它通过调节比例、积分和微分三个参数,来调整系统的输出,使其达到预期的设定值。本文将详细介绍 PID 控制器的工作原理,并探讨几种常见的参数整定方法,最后通过 Python 代码示例展示如何应用这些方法。
PID 控制器的工作原理
PID 控制器由三部分组成:比例控制(P)、积分控制(I)和微分控制(D)。
比例控制(P)
比例控制的输出与当前误差成正比。误差是设定值与实际值之间的差异。比例控制的主要作用是减少当前的误差,但它不能完全消除稳态误差。
公式:
P out = K p ⋅ e ( t ) P_{\text{out}} = K_p \cdot e(t) Pout=Kp⋅e(t)
其中:
- P out P_{\text{out}} Pout是比例控制输出;
- K p K_p Kp是比例增益;
- e ( t ) e(t) e(t)是当前误差,即设定值与实际值之差。
积分控制(I)
积分控制的输出与过去误差的累积成正比。积分控制的主要作用是消除稳态误差。它通过累加误差使得系统能够逐渐逼近设定值。然而,过大的积分增益可能导致系统的不稳定。
公式:
I out = K i ⋅ ∫ 0 t e ( τ ) d τ I_{\text{out}} = K_i \cdot \int_{0}^{t} e(\tau) d\tau Iout=Ki⋅∫0te(τ)dτ
其中:
- I out I_{\text{out}} Iout是积分控制输出;
- K i K_i Ki是积分增益;
- ∫ 0 t e ( τ ) d τ \int_{0}^{t} e(\tau) d\tau ∫0te(τ)dτ是从初始时刻到当前时刻的误差累积。
微分控制(D)
微分控制的输出与误差变化率成正比。微分控制的主要作用是预测误差的变化趋势,从而增加系统的响应速度和稳定性。
公式:
D out = K d ⋅ d d t e ( t ) D_{\text{out}} = K_d \cdot \frac{d}{dt}e(t) Dout=Kd⋅dtde(t)
其中:
- D out D_{\text{out}} Dout是微分控制输出;
- K d K_d Kd是微分增益;
- d d t e ( t ) \frac{d}{dt}e(t) dtde(t)是误差的变化率。
PID 控制器的总输出
PID 控制器的总输出是上述三部分的总和:
公式:
PID out = P out + I out + D out \text{PID}_{\text{out}} = P_{\text{out}} + I_{\text{out}} + D_{\text{out}} PIDout=Pout+Iout+Dout
即:
PID out = K p ⋅ e ( t ) + K i ⋅ ∫ 0 t e ( τ ) d τ + K d ⋅ d d t e ( t ) \text{PID}_{\text{out}} = K_p \cdot e(t) + K_i \cdot \int_{0}^{t} e(\tau) d\tau + K_d \cdot \frac{d}{dt}e(t) PIDout=Kp⋅e(t)+Ki⋅∫0te(τ)dτ+Kd⋅dtde(t)
PID 参数整定方法
为了实现最佳的控制效果,需要适当地调整 PID 控制器的三个参数: K p K_p Kp、 K i K_i Ki和 K d K_d Kd。以下是几种常见的参数整定方法:
1. 手动调节法
手动调节法通过经验和实验来调整 PID 参数。具体步骤如下:
- 初始设置:将 K i K_i Ki和 K d K_d Kd设置为零,逐渐增加 K p K_p Kp直到系统出现稳定振荡。
- 调整比例增益 K p K_p Kp:增加 K p K_p Kp直到系统达到快速响应,但不产生较大振荡。
- 增加积分增益 K i K_i Ki:逐步增加 K i K_i Ki以消除稳态误差,同时避免引入过多的振荡。
- 增加微分增益 K d K_d Kd:逐步增加 K d K_d Kd以减少振荡并提高系统稳定性。
2. Ziegler-Nichols 法
Ziegler-Nichols 法是一种经验方法,通过确定临界增益和临界振荡周期来整定 PID 参数。具体步骤如下:
- 临界比例增益 K u K_u Ku:将 K i K_i Ki和 K d K_d Kd设置为零,逐渐增加 K p K_p Kp直到系统在临界增益 K u K_u Ku下出现持续振荡。
- 临界振荡周期 P u P_u Pu:记录系统在临界增益下的振荡周期 P u P_u Pu。
根据 Ziegler-Nichols 法则,参数设置如下:
类型 | K p K_p Kp | K i K_i Ki | K d K_d Kd |
---|---|---|---|
P | 0.5 ⋅ K u 0.5 \cdot K_u 0.5⋅Ku | - | - |
PI | 0.45 ⋅ K u 0.45 \cdot K_u 0.45⋅Ku | 1.2 ⋅ K p / P u 1.2 \cdot K_p / P_u 1.2⋅Kp/Pu | - |
PID | 0.6 ⋅ K u 0.6 \cdot K_u 0.6⋅Ku | 2 ⋅ K p / P u 2 \cdot K_p / P_u 2⋅Kp/Pu | K p ⋅ P u / 8 K_p \cdot P_u / 8 Kp⋅Pu/8 |
3. 频域分析法
频域分析法利用系统的频率响应特性来调整 PID 参数。具体步骤如下:
- 频率响应测试:向系统输入正弦信号,测量输出的幅值和相位。
- 绘制奈奎斯特图或伯德图:分析系统的稳定性裕度和频率响应特性。
- 调整 PID 参数:根据频率响应特性调整 PID 参数,确保系统具有合适的增益和相位裕度。
4. 软件工具与自动调节方法
现代控制系统常使用软件工具进行 PID 参数的自动整定。以下是几种自动调节方法:
- 最小二乘法:利用系统的历史数据,使用最小二乘法拟合模型,并计算最优 PID 参数。
- 遗传算法:使用遗传算法进行全局优化搜索,找到最优 PID 参数。
组合- 粒子群算法:使用粒子群优化算法,根据系统性能指标找到最优 PID 参数。
Ziegler-Nichols 法的 Python 实现
为了更好地理解 PID 控制及其参数整定方法,以下是一个基于 Ziegler-Nichols 法的 Python 实现示例。
import matplotlib.pyplot as plt
import numpy as npclass PIDController:def __init__(self, Kp, Ki, Kd, setpoint):self.Kp = Kpself.Ki = Kiself.Kd = Kdself.setpoint = setpointself.previous_error = 0self.integral = 0def update(self, feedback_value):error = self.setpoint - feedback_valueself.integral += errorderivative = error - self.previous_erroroutput = self.Kp * error + self.Ki * self.integral + self.Kd * derivativeself.previous_error = errorreturn outputdef simulate_system(Kp, Ki, Kd, setpoint):pid = PIDController(Kp, Ki, Kd, setpoint)feedback = 0feedback_list = []time_steps = 1000for i in range(time_steps):control = pid.update(feedback)feedback += control * 0.1 + np.random.randn() * 0.01 # 模拟系统响应feedback_list.append(feedback)return feedback_list# Ziegler-Nichols 参数整定
Ku = 6.0 # 临界增益
Pu = 50.0 # 临界周期
Kp = 0.6 * Ku
Ki = 2 * Kp / Pu
Kd = Kp * Pu / 8
setpoint = 1.0
response = simulate_system(Kp, Ki, Kd, setpoint)plt.plot(response, label='PID Response')
plt.axhline(y=setpoint, color='r', linestyle='--', label='Setpoint')
plt.xlabel('Time')
plt.ylabel('Feedback')
plt.title('PID Control Response')
plt.legend()
plt.show()
代码说明
-
导入必要的库:使用 NumPy 库进行矩阵运算,使用 Matplotlib 库进行数据可视化。
import numpy as np import matplotlib.pyplot as plt
-
定义 PID 控制器类:该类包含初始化参数和更新控制信号的方法。
class PIDController:def __init__(self, Kp, Ki, Kd, setpoint):self.Kp = Kpself.Ki = Kiself.Kd = Kdself.setpoint = setpointself.previous_error = 0self.integral = 0def update(self, feedback_value):error = self.setpoint - feedback_valueself.integral += errorderivative = error - self.previous_erroroutput = self.Kp * error + self.Ki * self.integral + self.Kd * derivativeself.previous_error = errorreturn output
-
定义系统仿真函数:该函数模拟系统响应并记录反馈值。
def simulate_system(Kp, Ki, Kd, setpoint):pid = PIDController(Kp, Ki, Kd, setpoint)feedback = 0feedback_list = []time_steps = 1000for i in range(time_steps):control = pid.update(feedback)feedback += control * 0.1 + np.random.randn() * 0.01 # 模拟系统响应feedback_list.append(feedback)return feedback_list
-
Ziegler-Nichols 参数整定:根据临界增益和振荡周期计算 PID 参数,并进行系统仿真。
Ku = 6.0 # 临界增益 Pu = 50.0 # 临界周期 Kp = 0.6 * Ku Ki = 2 * Kp / Pu Kd = Kp * Pu / 8 setpoint = 1.0 response = simulate_system(Kp, Ki, Kd, setpoint)
-
绘制响应曲线:使用 Matplotlib 库绘制 PID 控制器的响应曲线。
plt.plot(response, label='PID Response') plt.axhline(y=setpoint, color='r', linestyle='--', label='Setpoint') plt.xlabel('Time') plt.ylabel('Feedback') plt.title('PID Control Response') plt.legend() plt.show()
结论
PID 控制器在各种工业控制系统中得到了广泛应用。通过调整比例、积分和微分三个参数,可以显著提高系统的响应速度和稳定性。本文介绍了手动调节法、Ziegler-Nichols 法、频域分析法和软件工具与自动调节方法等几种常见的 PID 参数整定方法,并通过 Python 代码示例展示了 Ziegler-Nichols 法的实际应用。
不同的参数整定方法适用于不同的应用场景,合理选择整定方法可以显著提高系统的稳定性和响应速度。
PID 如何整定?
siemens
PID 整定即 PID 参数整定 。对 PID 控制器的比例、积分、微分三部分参数进行整定,必须兼顾动态和静态的性能指标要求,合理地选取 K p K_p Kp、 T i T_i Ti、 T d T_d Td 三个参数,才能获得良好的控制效果。
PID 参数的选取与被控对象和工艺特性关系重大,工程上有许多种 PID 参数整定方法,它们适用于不同的工艺和对象。本文将采用经验试凑法,在简要说明 PID 控制器中比例、积分、微分三部作用的基础上,以 FB41 “CONT_C” 作为 PID 控制器和 FB100 “PROC_C” 作为被控对象构成的系统为例,按照先比例、再积分、最后微分的顺序,整定 K p K_p Kp、 T i T_i Ti、 T d T_d Td 三个参数。
硬件及软件列表
硬件 / 软件 | 订货号 |
---|---|
CPU 317 - 2 PN / DP | 6ES7 317 - 2EH14 - 0AB0 |
MMC | 6ES7 954 - 8LC03 - 0AA0 |
STEP 7 Professional V15.1 | 6ES7 822 - 1AA05 - 0YA5 |
1. 比例部分
1.1 比例作用
比例作用可成比例地反映控制系统的偏差,偏差一旦产生,比例部分立即产生控制作用,以减小偏差。偏差为零时,比例控制作用也为零,因此比例作用是基于偏差进行调节的,即为 有差调节 。
比例作用的强弱与比例系数 K p K_p Kp 成正比, K p K_p Kp 越小,比例作用越弱; K p K_p Kp 越大,比例作用越强。增大 K p K_p Kp,比例作用增强,系统动态响应加快,消除误差的能力增强,但超调量变大;减小 K p K_p Kp,比例作用减弱,系统动态响应减慢,但稳定性会有所提高。
1.2 比例系数 K p K_p Kp 对控制效果的影响
在相同的设定值阶跃变化的情况下,仅启用比例作用,暂不启用积分作用和微分作用,进行调节。对比例系数 K p K_p Kp 取不同的数值,以下几张图表明了不同的 K p K_p Kp 对应不同的控制效果。
2. 积分部分
2.1 积分作用
只要偏差存在,积分作用就进行,即对误差进行积分,使输出继续增大或减小,直到偏差为零,积分作用保持不变,达到 无差调节 的效果。
积分作用的强度与积分时间 T i T_i Ti 成反比, T i T_i Ti 越小,积分作用越强; T i T_i Ti 越大,积分作用越弱。减小 T i T_i Ti,积分作用增强,输出变化加快,系统稳定性下降,易引起或加剧震荡;增大 T i T_i Ti,积分作用减弱,输出变化减缓,稳定性上升,但稳态时间会随之变长。
2.2 积分时间 T i T_i Ti 对控制效果的影响
在相同的设定值阶跃变化的情况下,启用比例作用和积分作用,暂不启用微分作用,进行调节。取比例系数 K p = 30.0 K_p = 30.0 Kp=30.0,对积分时间取不同的数值,以下几张图表明了不同的 T i T_i Ti 对应不同的控制效果。
3. 微分部分
3.1 微分作用
比例作用和积分作用均是在偏差信号产生后去进行调节以消除偏差,而微分作用可以反映系统偏差信号的变化率,即在偏差出现之前,产生超前的控制效果。对于具有滞后特性的被控对象,可加入微分环节。
微分作用的强度与微分时间 T d T_d Td 成正比, T d T_d Td 越大,微分作用越强; T d T_d Td 越小,微分作用越弱。增大 T d T_d Td,微分作用增强,系统动态响应加快,系统达到稳态所需的时间缩短,但易出现系统震荡,稳定性下降。
3.2 微分时间对控制效果的影响
在相同的设定值阶跃变化的情况下,启用比例、积分和微分作用,进行 PID 调节。取比例系数 K p = 30.0 K_p = 30.0 Kp=30.0,积分时间 T i = 20.0 s T_i = 20.0 \, \text{s} Ti=20.0s,对微分时间取不同的数值,以下几张图表明了不同的 T d T_d Td 对应不同的控制效果。
根据以上步骤,本次 PID 参数整定结果为: K p = 30.0 K_p = 30.0 Kp=30.0, T i = 20.0 s T_i = 20.0 \, \text{s} Ti=20.0s, T d = 5.0 s T_d = 5.0 \, \text{s} Td=5.0s。
例程下载
PID_test
免责声明
本例程仅供参考,程序中的 CPU 版本、类型可能与用户实际使用不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。本例程的作者和拥有者对于该例程的功能性和兼容性不负任何责任,使用该例程的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保、错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。
via:
-
PID 参数整定方法介绍 - CSDN 博客
https://blog.csdn.net/YinShiJiaW/article/details/88616630 -
PID 算法实现及参数整定图解(附代码)_pid 控制算法和图解 - CSDN 博客
https://blog.csdn.net/uncle_guo/article/details/51367764 -
自动控制:PID 控制及其参数整定方法_pid 参数整定 - CSDN 博客
https://blog.csdn.net/weixin_39753819/article/details/139116989 -
怎么快速调出最优 PID 参数? - 知乎
https://www.zhihu.com/question/48765149 -
PID 调参的实用方法和经验有哪些? - 知乎
https://www.zhihu.com/question/27478212 -
FB41参数整定-SIMATIC S7-300/400编程组态-PLC-西门子下载中心常见问题大全
https://www.ad.siemens.com.cn/download/materialaggregation_2464.html