当前位置: 首页 > ai >正文

PID 控制算法 | 参数整定 | 方法 / 仿真 / 应用案例

注:本文为“PID 控制参数整定”相关合辑。

略作重排,未整理去重。
如有内容异常,请看原文。


PID 参数整定方法介绍

Shijia Yin 于 2019-03-18 19:37:01 发布

完全经验法

这种方法没有任何定量规律可循,凭借的是工程技术人员对控制系统与控制对象的工作机理、工作环境的熟悉,是一种粗糙的调参方法。一些定性的调参准则如下:

参数整定找最佳,从小到大顺序查;
先是比例后积分,最后再把微分加。
曲线振荡很频繁,比例度盘要放大;
曲线漂浮绕大湾,比例度盘往小扳。
曲线偏离回复慢,积分时间往下降;
曲线波动周期长,积分时间再加长。
曲线振荡频率快,先把微分降下来;
动差大来波动慢,微分时间应加长。
理想曲线两个波,前高后低 4 比 1;
一看二调多分析,调节质量不会低。

等幅振荡法

步骤:

  1. 先将 PID 控制器中的积分与微分作用切除,取比例增益 K c K_c Kc较小值,并投入闭环运行;
  2. K c K_c Kc由小到大变化,对应于某一 K c K_c Kc值作小幅度的设定值阶跃响应,直至产生等幅振荡;
  3. 设等幅振荡时振荡周期为 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 控制:

在这里插入图片描述

衰减曲线法

  1. 先把积分时间放至最大,微分时间放至零,使控制系统运行,比例度放至较大的适当值。通过“纯 P 降低比例度”,使控制系统按纯比例作用的方式投入运行。然后慢慢地减少比例度,观察调节器的输出及控制过程的波动情况,直到找出 4:1 的衰减过程为止。
  2. 对于某些控制对象,若 4:1 的衰减比振荡过强,可采用 10:1 的衰减比。此时测量衰减周期较为困难,可采取测量第一个波峰的上升时间 T r T_r Tr,其操作步骤同上。
  3. 根据衰减比例度 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 参数整定步骤:

  1. 在手动状态下,改变控制器输出(通常采用阶跃变化),记录被控变量的响应曲线;
  2. 由开环响应曲线获得单位阶跃响应曲线,并求取“广义对象”的近似模型与模型参数;
  3. 根据控制器类型与对象模型,选择 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=0ke(j)+Kd[e(k)e(k1)](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 k1个采样时刻的输出值为:

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} uk1=Kp[ek1+TiTj=0k1ej+TdTek1ek2](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=ukuk1=Kp[ekek1+TiTek+TdTek2ek1+ek2]=Kp(1+TiT+TTd)ekKp(1+T2Td)ek1+KpTTdek2=AekBek1+Cek2(1-3)

其中:

  • Δ u ( k ) = u ( k ) − u ( k − 1 ) \Delta u(k) = u(k) - u(k-1) Δu(k)=u(k)u(k1)
  • Δ e ( k ) = e ( k ) − e ( k − 1 ) \Delta e(k) = e(k) - e(k-1) Δe(k)=e(k)e(k1)

由 (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=uk1+Δ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(k1)=KpΔe(k)+Kie(k)+Kd[Δe(k)Δe(k1)]

式中:

  • Δ e ( k ) = e ( k ) − e ( k − 1 ) \Delta e(k) = e(k) - e(k-1) Δe(k)=e(k)e(k1)
  • 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:控制器的微分时间。

四、优缺点

增量式算法优点:

  1. 算式中不需要累加。控制增量 Δ u ( k ) \Delta u(k) Δu(k)的确定仅与最近 3 次的采样值有关,容易通过加权处理获得比较好的控制效果;
  2. 计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小,不会严重影响生产过程;
  3. 手动 - 自动切换时冲击小。当控制从手动向自动切换时,可以做到无扰动切换。

位置式 PID 控制算法缺点:

  1. 当前采样时刻的输出与过去的各个状态有关,计算时要对 e ( k ) e(k) e(k)进行累加,运算量大;
  2. 控制器的输出 u ( k ) u(k) u(k)对应的是执行机构的实际位置,如果计算机出现故障, u ( k ) u(k) u(k)的大幅度变化会引起执行机构位置的大幅度变化。

五、区别与联系

  1. 增量式和位置式本质上是一样的,增量式最后的输出化解完和位置式一样。增量式 PID 可以通过 u ( k ) = u ( k − 1 ) + Δ u ( k ) u(k) = u(k-1) + \Delta u(k) u(k)=u(k1)+Δu(k)得到位置式输出。
  2. 增量型算法与位置型算法比较:
    • 增量型算法不需做累加,计算误差后产生的计算精度问题对控制量的计算影响较小。位置型算法用到过去的误差的累加,容易产生较大的累加误差。
    • 增量型算法得出的是控制的增量,误动作影响小,必要时通过逻辑判断限制或禁止本次输出,不会影响系统的工作。位置型算法的输出是控制量的全部输出,误动作影响大。
    • 增量式算法的主要优势体现在对积分环节的处理上,积分作用的累加效果会影响到输出的准确性。
    • 增量式算法易于实现手、自动的无扰动切换。

六、增量式 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。

clip_image013

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%。

clip_image023

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%。

clip_image031

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=Kpe(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=Ki0te(τ)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=Kddtde(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=Kpe(t)+Ki0te(τ)dτ+Kddtde(t)

PID 参数整定方法

为了实现最佳的控制效果,需要适当地调整 PID 控制器的三个参数: K p K_p Kp K i K_i Ki K d K_d Kd。以下是几种常见的参数整定方法:

1. 手动调节法

手动调节法通过经验和实验来调整 PID 参数。具体步骤如下:

  1. 初始设置:将 K i K_i Ki K d K_d Kd设置为零,逐渐增加 K p K_p Kp直到系统出现稳定振荡。
  2. 调整比例增益 K p K_p Kp:增加 K p K_p Kp直到系统达到快速响应,但不产生较大振荡。
  3. 增加积分增益 K i K_i Ki:逐步增加 K i K_i Ki以消除稳态误差,同时避免引入过多的振荡。
  4. 增加微分增益 K d K_d Kd:逐步增加 K d K_d Kd以减少振荡并提高系统稳定性。

2. Ziegler-Nichols 法

Ziegler-Nichols 法是一种经验方法,通过确定临界增益和临界振荡周期来整定 PID 参数。具体步骤如下:

  1. 临界比例增益 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下出现持续振荡。
  2. 临界振荡周期 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.5Ku--
PI 0.45 ⋅ K u 0.45 \cdot K_u 0.45Ku 1.2 ⋅ K p / P u 1.2 \cdot K_p / P_u 1.2Kp/Pu-
PID 0.6 ⋅ K u 0.6 \cdot K_u 0.6Ku 2 ⋅ K p / P u 2 \cdot K_p / P_u 2Kp/Pu K p ⋅ P u / 8 K_p \cdot P_u / 8 KpPu/8

3. 频域分析法

频域分析法利用系统的频率响应特性来调整 PID 参数。具体步骤如下:

  1. 频率响应测试:向系统输入正弦信号,测量输出的幅值和相位。
  2. 绘制奈奎斯特图或伯德图:分析系统的稳定性裕度和频率响应特性。
  3. 调整 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()

代码说明

  1. 导入必要的库:使用 NumPy 库进行矩阵运算,使用 Matplotlib 库进行数据可视化。

    import numpy as np
    import matplotlib.pyplot as plt
    
  2. 定义 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
    
  3. 定义系统仿真函数:该函数模拟系统响应并记录反馈值。

    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
    
  4. 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)
    
  5. 绘制响应曲线:使用 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 / DP6ES7 317 - 2EH14 - 0AB0
MMC6ES7 954 - 8LC03 - 0AA0
STEP 7 Professional V15.16ES7 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 对应不同的控制效果。

img

img

img

img

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 对应不同的控制效果。

img

img

img

img

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 对应不同的控制效果。

img

img

img

img

根据以上步骤,本次 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

例程下载

img 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

http://www.xdnf.cn/news/14423.html

相关文章:

  • 图片压缩工具 | 按指定高度垂直切割图片
  • 归一化:深度学习的隐藏加速器,解密数据标准化的魔力
  • Spring 事务传播行为全景分析表
  • Java设计模式之创建型模式( 工厂方法模式)介绍与说明
  • 智能跃迁:企业大模型落地方法论与路径最佳实践
  • 逆向知识点
  • 5.5.2_2并查集的进一步优化
  • 运算符与优先级
  • Docker环境下的EFK日志分析实践:从Filebeat采集到Kibana可视化的完整部署指南
  • 【LeetCode 207】课程表(有向无环图 DAG、拓扑排序)
  • 在C++中进程间通信(IPC)
  • 数据库学习(七)——MySQL执行引擎
  • Google机器学习实践指南(非线性特征工程解析)
  • 人工智能学习37-Keras手写识别预测
  • 对于数据库触发器自动执行的理解
  • Java类的继承
  • Luckfox Pico Pi RV1106学习<3>:支持IMX415摄像头
  • BeckHoff <---> Keyence (MD-X)激光 刻印机 Profient 通讯
  • Elasticsearch:什么是混合搜索?
  • AIGC 基础篇 高等数学篇 06 向量代数与空间解析几何
  • 人月神话-学习记录
  • SQL Developer 表复制
  • Python安装与使用教程
  • Maven在依赖管理工具方面的内容
  • Java多线程通信:wait/notify与sleep的深度剖析(时序图详解)
  • Spring是如何实现有代理对象的循环依赖
  • 【SQLAlchemy系列】 SQLAlchemy 中的多条件查询:or*与 in*操作符
  • 智能土木通 - 土木工程专业知识问答系统02-RAG检索模块搭建
  • AC耦合与DC耦合
  • 体验AI智能投资!AI Hedge Fund了解一下