Matlab动态PID仿真及PID知识梳理


注意: 本文章主要讲解了一下PID的一些基本知识点梳理,对知识点还不是清楚的读者可以看一下这些知识点,在文章的最后还参考了一个博主的一个matlab仿真实验,个人在此博主的matlab基础上更改成 动态的PID曲线图

1. 比例控制(P)

定义:具有比例控制规律的控制器称为 P P P 控制器。控制器输出 y ( t ) y(t) y(t) 和偏差信号 e ( t ) e(t) e(t) 成比例关系

定义式 u ( t ) = K p e ( t ) u(t)=K_pe(t) u(t)=Kpe(t),其中比例系数 K p = 1 P K_p=\frac 1P Kp=P1 P P P 为比例带(比例度

传递函数 G ( s ) = U ( s ) E ( s ) = 1 P G(s)=\frac {U(s)}{E(s)}=\frac 1P G(s)=E(s)U(s)=P1

比例度定义 P = ( e x m a x − x m i n / y y m a x − y m i n ) × 100 % P= ({\frac e{x_{max}-x_{min}}}/{\frac y{y_{max}-y_{min}}}) \times 100 \% P=xmaxxmine/ymaxyminy)×100% ,其中 e e e输入偏差 y y y控制器输出变化量

​ 如果控制器输入、输出量程相等,则: P = e u × 100 % = 1 K c × 100 % P=\frac eu \times 100 \%=\frac 1K_c \times 100\% P=ue×100%=K1c×100%

比例度含义

  1. 控制器输入和输出之间的增益外

  2. 还表明比例作用的有效区间

比例带物理意义

  1. 比例带 P P P 是放大倍数 K c K_c Kc 的倒数,其大小决定比例控制作用的强弱。
  2. P P P 越小:控制作用越强、系统调节越快、系统稳定性越小;控制余差越小;控制过程曲线越振荡,周期缩短。
  3. P P P 越大:控制过程曲线越平稳,但控制过程时间越长,余差也越大。
  4. 临界比例度 P m i n P_{min} Pmin :出现等幅振荡
  5. K p K_p Kp 较小时,调节时间长;当 K p K_p Kp 较大时,超调量大;当 K p K_p Kp 趋向无穷时双位控制

比列控制特点

  • 比列调节是有差调节连续调节,控制及时、适当。控制系统必然存在静差
  • 调节作用是以偏差存在为前提条件,不可能做到无静差调节。只要有偏差,输出立刻成比例变化,偏差越大,输出控制作用越强。若 e e e 0 0 0 ,控制其输出为 0 0 0
  • 比例调节系统的静差,随比例度的增大而增大。
  • 减小比例度可以减小静差,但会使系统稳定性下降
  • 比例调节不适合设定值随时间变化的情况。适用于控制通道滞后小、负荷变化不 大、工艺上没有无差要求的系统。

2. 积分控制(I)

定义:输出变化量 y y y 与输入偏差 e e e 的积分成正比

定义式 u = 1 T I ∫ 0 t e d t u = \frac{1}{ { {T_I}}}\int_0^t e dt u=TI10tedt T I T_I TI 积分时间,当 e e e 是幅值为 E E E 的阶跃时 u = 1 T I ∫ 0 t e d t = E T I t u = \frac{1}{ { {T_I}}}\int_0^t e dt=\frac E{T_I}t u=TI10tedt=TIEt

特点

  • 当有偏差存在时,积分输出将随时间增长(或减小);当偏差消失时,输出能保持在某一值上。
  • 积分作用具有保持功能, 故积分控制可以消除余差
  • 积分输出信号随着时间逐渐增强,控制动作缓慢,故积分作用一般不单独使用
  • 积分调节消除偏差速度比较缓慢,系统过渡时间长稳定性变差
  • 增大积分速度会加强积分效果,但使系统稳定性降低

3. 比列积分控制(PI)

注意:当要求控制结果无余差时,就需要在比例控制的基础上,加积分控制作用。若将比例与积分组合起来,既能控制及时,又能消除余差 。

定义式 u = 1 P ( e + 1 T I ∫ 0 t e d t ) u = \frac{1}{P}\left( {e + \frac{1}{ { {T_I}}}\int_0^t e dt} \right) u=P1(e+TI10tedt)

传递函数 G ( s ) = Y ( s ) E ( s ) = 1 P ( 1 + 1 T I s ) G\left( s \right) = \frac{ {Y\left( s \right)}}{ {E\left( s \right)}} = \frac{1}{P}\left( {1 + \frac{1}{ { {T_I}s}}} \right) G(s)=E(s)Y(s)=P1(1+TIs1)

特点

  • 从时域上看,只要存在偏差,积分就会不停对偏差积累,因此稳态时误差一定为零

  • 不足:比例与积分动作都是对过去控制误差进行操作, 不对未来控制误差进行预测,限制了控制性能。

  • P I PI PI调节将比列调节的快速反应与积分调节消除静差的特点结合,实现好的调节效果。

  • P I PI PI调节适用于控制通道滞后较小、负荷变化不大、 工艺参数不允许有静差的系统。

积分时间 T I T_I TI 对过渡过程的影响

  1. T I T_I TI 越大,积分作用越弱; T I = ∞ T_I = ∞ TI=,积分作用为零。 T I T_I TI 减小,积分作用增强,系统振荡加剧, 稳定性下降。因此加积分后,比例带要适当加大。
  2. 如果 T I T_I TI适当,系统能很快消除余差。

4. 微分控制(D)

  定义式 u = T D d e d t u=T_D \frac {de}{dt} u=TDdtde T D T_D TD 微分时间, d e d t \frac {de}{dt} dtde 偏差变化速率

  特点

  1. 微分作用能超前控制,预测偏差变化趋势并加以预防的能力。 在偏差出现或变化的瞬间,微分立即产生强烈的调节作用,使偏差尽快地消除于萌芽状态之中。
  2. 微分对静态偏差毫无控制能力。当偏差存在, 但不变化时,微分输出为零,因此不能单独使用。 必须和 P P P P I PI PI 结合,组成 P D PD PD 控制或 P I D PID PID 控制。

5. 比列微分(PD)

  对于惯性较大的对象,常常希望能加快控制速度, 此时可增加微分作用。

  理想 P D PD PD 控制定义式 u = 1 P ( e + T D d e d t ) u = \frac{1}{P}\left( {e + {T_D}\frac{ {de}}{ {dt}}} \right) u=P1(e+TDdtde)

  传递函数 G ( s ) = 1 p ( 1 + T D s ) G\left( s \right) = \frac{1}{p}\left( {1 + {T_D}s} \right) G(s)=p1(1+TDs)

在这里插入图片描述

特点

  • 比例控制对于惯性较大对象,控制过程缓慢,控制品质不佳。比例微分控制可提高控制速度,对惯性较大对象,可改善控制质量,减小偏差,缩短控制时间。
  • 理想微分作用持续时间太短, 执行器来不及响应。实际使用中,一般加以惯性延迟,称为实际微分。
  • P D PD PD 调节以比例调节为主,微分调节为辅, P D PD PD调节是有差调节
  • P D PD PD 调节具有提高系统稳定性、抑制过渡过程最大动态偏差的作用。
  • P D PD PD 调节有利于提高系统响应速度。
  • P D PD PD 调节抗干扰能力差,一般只能应用于被调参数 变化平稳的生产过程。
  • 微分作用太强时,容易造成系统振荡

微分时间 T D T_D TD 对过渡过程的影响

  • T D = 0 T_D =0 TD=0,纯比 例控制过程
  • T D T_D TD 较小,控制 速度稍有加快
  • T D T_D TD 合适,控制 速度明显加快
  • T D T_D TD 太大,出现 等幅振荡

6. 比例-积分-微分(PID)

  将比例、积分、微分三种调节规律结合在一起, 只要三项作用的强度配合适当,既能快速调节,又能消除余差,可得到满意的控制效果。

公式 u ( t ) = 1 P ( e + 1 T I ∫ 0 t e d t + T D d e d t ) u\left( t \right) = \frac{1}{P}\left( {e + \frac{1}{ { {T_I}}}\int_0^t e dt + {T_D}\frac{ {de}}{ {dt}}} \right) u(t)=P1(e+TI10tedt+TDdtde) K p = 1 P , K I = 1 P T I , K d = T D P {K_p} = \frac{1}{P},{K_I} = \frac{1}{ {P{T_I}}},{K_d} = \frac{ { {T_D}}}{P} Kp=P1,KI=PTI1,Kd=PTD

传递函数 G ( s ) = 1 p ( 1 + 1 T I s + T D s ) G\left( s \right) = \frac{1}{p}\left( {1 + \frac{1}{ { {T_I}s}} + {T_D}s} \right) G(s)=p1(1+TIs1+TDs)

特点

  • P I D PID PID 控制作用中,比例作用是基础控制;微分作用是 用于加快系统控制速度;积分作用是用于消除静差。
  • 只要比例、积分、微分三种控制规律强度配合适当, 既能快速调节,又能消除余差,可得到满意控制效果。

位置型PID

  如果调节器的输出是控制阀门的话, y n y_n yn是对应 的阀门开度位置,故上式称为位置型 P I D PID PID算式

u n = 1 P ( e n + 1 T I ∑ i = 0 n e i Δ T + T D e n − e n − 1 Δ t ) {u_n} = \frac{1}{P}\left( { {e_n} + \frac{1}{ { {T_I}}}\sum\limits_{i = 0}^n { {e_i}\Delta T} + {T_D}\frac{ { {e_n} - {e_{n - 1}}}}{ {\Delta t}}} \right) un=P1(en+TI1i=0neiΔT+TDΔtenen1)

增量式PID

​ 只需计算出本次与上次输出之间的增量 Δ y n Δy_n Δyn即 可 y n = y n − 1 + Δ y n y_n = y_{n-1} + Δy_n yn=yn1+Δyn

Δ u n = 1 P ( ( e n − e n − 1 ) + Δ T T I e n + T D e n − 2 e n − 1 + e n − 2 Δ t ) \Delta {u_n} = \frac{1}{P}\left( {\left( { {e_n} - {e_{n - 1}}} \right) + \frac{ {\Delta T}}{ { {T_I}}}{e_n} + {T_D}\frac{ { {e_n} - 2{e_{n - 1}} + {e_{n - 2}}}}{ {\Delta t}}} \right) Δun=P1((enen1)+TIΔTen+TDΔten2en1+en2)

位置型PID和增量型PID的比较:

  • 位置式需引入初始阀位值,增量式不需要
  • 位置式需防积分饱和,增量式不会产生积分饱和1
  • 只有存在偏差时,增量式才会有输出
  • 增量式容易实现从手动到自动的切换

7. PID整定

  • K p K_p Kp 较小时,系统对微分和积分环节的引入较为敏感,积分会引起超调,微分可能会引起振荡,而振荡剧烈的时候超铁也会增加。
  • K p K_p Kp 增大时,积分环节由于滞后产生的超调逐渐减小,此时如果想要继续减少超调可以适当引入微分环节。继续增大 K p K_p Kp 系统可能会不太稳定,因此在增加 K p K_p Kp 的同时引入 K d K_d Kd 减小超调,可以保证在 K p K_p Kp 不是很大的情况下也能取得较好的稳态特性和动态性能。
  • K p K_p Kp 较小时,积分环节不宜过大, K p K_p Kp 较大时积分环节也不宜过小(否则调节时间会非常地长),当使用分段 P I D PID PID ,在恰当的条件下分离积分,可以取得更好的控制效果。原因在于在稳态误差即将满足要求时,消除了系统的滞后。因此系统超调会明显减少。

注意:一个不错的 P I D PID PID 实例参考视频B站视频,个人感觉这个B站UP主视频生动形象的讲解了PID,可以观看一下这个视频。(个人建议:一定要看一下这个视频和这个实例)
实例效果预览:
在这里插入图片描述

8. MATLAB仿真动态PID控制

参考资料Matlab仿真PID控制

  个人建议:先看完上面给的这篇参考资料博客,再来看我这个动态的PID就会觉得比较轻松许多

  此博主写的仿真实验非常的好,本人在此博主的基础上让整个PID调试的过程运动起来,利用matlab中的绘制动态图像函数实现。

8.1 动态PID仿真Matlab代码

仿真代码如下:

clear all
p=0:8.5/1000:8.5;
d=3.2:-3.2/1000:0;
i=0:1.5/1000:1.5;
n=length(p);
p1=3.5*ones(n,1);
p2=8.5:-5/1000:3.5;
i1=0.76*ones(n,1);
a=zeros(n,1);
PID=[p',a,a;p2',a,a;p1,i',a;p1,i1,d'];%初始化PID参数
grid on 
for pid=1:1:4*n
    ts=0.005;  %采样时间=0.005s
    sys=tf(0.998,[0.021,1]);   %建立被控对象传递函数
    dsys=c2d(sys,ts,'z');      %离散化
    [num,den]=tfdata(dsys,'v');   
    e_1=0;      %前一时刻的偏差      
    Ee=0;       %累积偏差
    u_1=0.0;    %前一时刻的控制量
    y_1=0;       %前一时刻的输出
    %PID参数
    kp=PID(pid,1);    
    ki=PID(pid,2);
    kd=PID(pid,3);
    u=zeros(1,5000);
    time=zeros(1,5000);
    for k=1:1:5000
        time(k)=k*ts;   %时间参数
        r(k)=1500;      %给定量
        y(k)=-1*den(2)*y_1+num(2)*u_1+num(1)*u(k);
        e(k)=r(k)-y(k);   %偏差
        u(k)=kp*e(k)+ki*Ee+kd*(e(k)-e_1);   
        Ee=Ee+e(k);    
        u_1=u(k);    
        y_1=y(k);    
        e_1=e(k);
    end
    p1=plot(time,r,time,y);xlim([0,0.25]);ylim([0,2000])
    title(['Kp=',num2str(kp),' Ki=',num2str(ki),' Kd= ',num2str(kd)]);
    drawnow   
    pause(0.00001);    
end
 xlabel('时间t/s');
 ylabel('输出量');
 legend('r(t)给定值','y(t)输出函数');

仿真结果动态图:
在这里插入图片描述

8.2 静态对比

  根据上面动态的仿真过程中,选取了一些特定的PID参数,作为对比更直观的感受。
代码如下:

clear all
PID=[0.22,0.13,0;
    0.4,0.13,0;
    0.4,0.25,0;
    0.8,0.23,0.4;
    0.8,0.2,1;
    0.7,0.2,0.9];%初始化PID参数
for pid=1:1:6
ts=0.005;  %采样时间=0.005s
sys=tf(0.998,[0.021,1]);   %建立被控对象传递函数
dsys=c2d(sys,ts,'z');      %离散化
[num,den]=tfdata(dsys,'v');   
e_1=0;      %前一时刻的偏差      
Ee=0;       %累积偏差
u_1=0.0;    %前一时刻的控制量
y_1=0;      %前一时刻的输出
%PID参数
kp=PID(pid,1);    
ki=PID(pid,2);
kd=PID(pid,3);
u=zeros(1,1000);
time=zeros(1,1000);
for k=1:1:1000
    time(k)=k*ts;   %时间参数
    r(k)=1500;      %给定量
    y(k)=-1*den(2)*y_1+num(2)*u_1+num(1)*u(k);
    e(k)=r(k)-y(k);   %偏差
    u(k)=kp*e(k)+ki*Ee+kd*(e(k)-e_1);   
    Ee=Ee+e(k);    
    u_1=u(k);    
    y_1=y(k);    
    e_1=e(k);
end
hold on;
p2=plot(time,y);xlim([0,0.35]);
xlabel('时间t/s')
ylabel('输出量')
end
grid on
p1=plot(time,r,'-.');xlim([0,0.35]);
legend('Kp=0.22,Ki=0.13,Kd=0','Kp=0.4,Ki=0.13,0','Kp=0.4,Ki=0.25,0','Kp=0.8,Ki=0.23,0.4','Kp=0.8,Ki=0.2,1','Kp=0.7,Ki=0.2,Kd=0.9','理想值')
title('PID控制系统阶跃响应图')

仿真后的图如下:
PID控制系统阶跃响应图

9 simulink仿真

提示:本节有一个关于一阶、二阶惯性和二阶惯性开环仿真,还有个PID闭环控制系统的simulink的仿真实验,实验已经做好了,请读者耐心等待下一篇blogs。(先预热一下)

10 补充

由于比较繁忙,这篇关于仿真的文章搁置了许久,现已完成点击此处链接: PID闭环控制系统的Simulink的仿真


  1. 积分饱和现象:若系统存在一个方向的偏差,由于 积分作用的不断累加,导致u(k)达到极限位置。此 后控制器的计算输出继续增大,实际执行装置的控 制输出u(k)也不会再增大,即进入了饱和区。 ↩︎

猜你喜欢

转载自blog.csdn.net/cugautozp/article/details/109275401
PID