PID控制原理和算法

    闭环控制是根据控制对象输出反馈来进行校正的控制方式,它是在测量出实际与计划发生偏差时,按定额或标准来进行纠正的。比如控制一个电机的转速,就得有一个测量转速的传感器,并将结果反馈到控制路线上。提到闭环控制算法,不得不提PID,它是闭环控制算法中最简单的一种。PID是比例 (Proportion) 积分 ,(Integral) 微分 ,(Differential coefficient) 的缩写,分别代表了三种控制算法。通过这三个算法的组合可有效地纠正被控制对象的偏差,从而使其达到一个稳定的状态。如下图所示为PID的流程。

                                                          

 其中r(t)表示给定输入值,c(t)表示实际输出值,e(t)表示信号偏差量,u(t)表示修正量。

1、比例(P)、积分(I)、微分(D)控制算法各有作用

    1)、比例,反应系统的基本(当前)偏差e(t),系数大,可以加快调节,减小误差,但过大的比例使系统稳定性下降,甚至造成系统不稳定;比例控制的比例系数如果太小,即调节后的电位器转角与位置L的差值太小,调节的力度不够,使系统输出量变化缓慢,调节所需的总时间过长。比例系数如果过大,即调节后电位器转角与位置L的差值过大,调节力度太强,将造成调节过头,甚至使温度忽高忽低,来回震荡。增大比例系数使系统反应灵敏,调节速度加快,并且可以减小稳态误差。但是比例系数过大会使超调量增大,振荡次数增加,调节时间加长,动态性能变坏,比例系数太大甚至会使闭环系统不稳定。 单纯的比例控制很难保证调节得恰到好处,完全消除误差。如下图所示:

          

    2)、积分,反应系统的累计偏差,使系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,直至无误差;积分调节的“大方向”是正确的,积分项有减小误差的作用。一直要到系统处于稳定状态,这时误差恒为零,比例部分和微分部分均为零,积分部分才不再变化,并且刚好等于稳态时需要的控制器的输出值,对应于上述温度控制系统中电位器转角的位置L。因此积分部分的作用是消除稳态误差,提高控制精度,积分作用一般是必须的。 如下图所示:

    3)、微分,反映系统偏差信号的变化率e(t)-e(t-1),具有预见性,能预见偏差变化的趋势,产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除,因此可以改善系统的动态性能。但是分对噪声干扰有放大作用,加强微分对系统抗干扰不利。误差的微分就是误差的变化速率,误差变化越快,其微分绝对值越大。误差增大时,其微分为正;误差减小时,其微分为负。控制器输出量的微分部分与误差的微分成正比,反映了被控量变化的趋势。如下图所示:

  闭环控制系统的振荡甚至不稳定的根本原因在于有较大的滞后因素。因为微分项能预测误差变化的趋势,这种“超前”的作用可以抵消滞后因素的影响。适当的微分控制作用可以使超调量减小,增加系统的稳定性。 

  对于有较大的滞后特性的被控对象,如果PI控制的效果不理想,可以考虑增加微分控制,以改善系统在调节过程中的动态特性。如果将微分时间设置为0,微分部分将不起作用。

  微分时间与微分作用的强弱成正比,微分时间越大,微分作用越强。如果微分时间太大,在误差快速变化时,响应曲线上可能会出现“毛刺”。

  微分控制的缺点是对干扰噪声敏感,使系统抑制干扰的能力降低。为此可在微分部分增加惯性滤波环节。

  一种PID控制算法的流程图,如下所示:

       

2、PID参数调节

  在整定PID控制器参数时,可以根据控制器的参数与系统动态性能和稳态性能之间的定性关系,用实验的方法来调节控制器的参数。有经验的调试人员一般可以较快地得到较为满意的调试结果。在调试中最重要的问题是在系统性能不能令人满意时,知道应该调节哪一个参数,该参数应该增大还是减小。 

  为了减少需要整定的参数,首先可以采用PI控制器。为了保证系统的安全,在调试开始时应设置比较保守的参数,例如比例系数不要太大,积分时间不要太小,以避免出现系统不稳定或超调量过大的异常情况。给出一个阶跃给定信号,根据被控量的输出波形可以获得系统性能的信息,例如超调量和调节时间。应根据PID参数与系统性能的关系,反复调节PID的参数。 

  如果阶跃响应的超调量太大,经过多次振荡才能稳定或者根本不稳定,应减小比例系数、增大积分时间。如果阶跃响应没有超调量,但是被控量上升过于缓慢,过渡过程时间太长,应按相反的方向调整参数。 

  如果消除误差的速度较慢,可以适当减小积分时间,增强积分作用。 

  反复调节比例系数和积分时间,如果超调量仍然较大,可以加入微分控制,微分时间从0逐渐增大,反复调节控制器的比例、积分和微分部分的参数。 

  总之,PID参数的调试是一个综合的、各参数互相影响的过程,实际调试过程中的多次尝试是非常重要的,也是必须的。  

      常用的控制方式:P,PI,PD,PID控制算法

注:以上原理部分内容参考自以下资料:

[1]. PID控制最通俗的解释与PID参数的整定方法

[2]. PID控制算法

3、代码实现

  以对常数和函数控制为例,Maltab实现演示,代码如下:

 1 clear all;
 2 close all;
 3 ts=0.001;
 4 sys=tf(50,[0.125,7, 0]);
 5 dsys=c2d(sys,ts,'z');
 6 [num,den]=tfdata(dsys,'v');
 7 u_1=0.0;u_2=0.0;
 8 y_1=0.0;y_2=0.0;
 9 x=[0,0,0]';
10 error_1=0;
11 error_2=0;
12 for k=1:1:2000
13     time(k)=k*ts;
14     S=2;
15     if S==1
16         kp=10;ki=0.1;kd=15;
17         rin(k)=5;                       %Step Signal
18     elseif S==2
19         %kp=20;ki=0.0;kd=0;          %Sine Signal
20          kp=10;ki=0.1;kd=15;          %Sine Signal
21         rin(k)=0.5*cos(2*pi*k*ts);
22     end
23     du(k)=kp*x(1)+kd*x(2)+ki*x(3);    %PID Controller
24     u(k)=u_1+du(k);
25     %Restricting the output of controller
26     if u(k)>=5
27         u(k)=5;
28     end
29     if u(k)<=-5
30         u(k)=-5;
31     end
32     %Linear model
33     yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
34     error(k)=rin(k)-yout(k);
35     %Return of parameters
36     u_2=u_1;u_1=u(k);
37     y_2=y_1;y_1=yout(k);
38     x(1)=error(k)-error_1;          %Calculating P
39     x(2)=error(k)-2*error_1+error_2;   %Calculating D
40     x(3)=error(k);      %Calculating I
41     error_2=error_1;
42     error_1=error(k);
43 end
44 figure(1);
45 plot(time,rin,'b',time,yout,'r');
46 xlabel('time(s)'),ylabel('rin,yout');
47 title(['kp=10,ki=0.1,kd=15'],'FontSize',14,'Color','k');
48 saveas(1,'pid','png');
49 figure(2);
50 plot(time,error,'r')
51 title(['误差变化'],'FontSize',14,'Color','k');
52 xlabel('time(s)');ylabel('error');
53 saveas(2,'pid_err','png');

 效果图

  1)、常数y = 5纠正:

  2)、曲线y = 0.5*cos(t)纠正:

代码工程下载:PID算法实现

原文地址:https://www.cnblogs.com/cv-pr/p/4785195.html