深入浅出PID控制算法(二)——PID算法离散化和增量式PID算法原理及Matlab仿真

1、PID算法离散化

在采样周期T足够小时,可以作如下近似:
在这里插入图片描述
式中

  • T————为采样周期
  • k————为采样序号,k=0,1,2….

用这种近似方法,可以得到两种形式数字PID控制算法:

1.1、位置式PID算法

由前面推导很容易得到离散化后的表达式 :

在这里插入图片描述
由此式可以看出数字调节的输出u(k)跟过去的所有偏差信号有关,计算机需要对e(i)进行累加。

注意:电机控制中电流环和速度环一般位置式PI控制用的较多。
位置式PI公式的推导,其实可以由增量式PI算法在每个时刻的增量叠加得到,而增量式PI的公式可由PI的传函离散化得到,如下:
在这里插入图片描述

1.2、增量式PID算法

由于位置式PID的算法不够方便,不仅对偏差进行累加,占用过多的存储单元,而且不方便写程序,所以需要进行一些改进,对位置式取增量,方法如下:

在这里插入图片描述
式子中 u k u_{k} uk为当前PID的输出。

2、PID编程实现及控制仿真

分析过程

  1. 对G(s)进行离散化,即进行Z变换得到Z传递函数G(Z);
  2. 分子分母除以z的最高次数得到变换后的Z变换的传函;
  3. 由z的位移定理Z[e(t-kt)]=z^k*E(z)逆变换得到差分方程,其中大Z表示Z变换符号;
  4. PID编程实现;

具体实现细节在代码注释中已经给出, 难点就是把传递函数转化为差分方程。

    %设一被控对象G(s)=50/(0.125s^2+7s),  
    %用增量式PID控制算法编写仿真程序  
    %输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-3,3],  
    %仿真曲线包括系统输出及误差曲线。  

    ts=0.001;                %采样时间  
    sys=tf(50,[0.125,7, 0]); %tf是传递函数  即被控对象函数G();  
    dsys=c2d(sys,ts,'z');    %把被控对象的传函离散化取Z变换n阶定常离散系统差分方程
                             %在零初始条件下取Z变换:
                             %dsys即Y(z)/U(z)
    [num,den]=tfdata(dsys,'v');% 离散化后提取分子、分母    
    u_1=0.0;  
    u_2=0.0;  
    y_1=0.0;  
    y_2=0.0;  
    x=[0,0,0]';  
    error_1=0;  
    error_2=0;  
    
    %核心代码

    for k=1:1:1000  
    time(k)=k*ts;                   %采样次数  
    S=1;  
    if S==1                         %阶跃输入
        kp=6.5;ki=0.1;kd=1;         %初始化PID    
        rin(k)=1;                   %Step Signal   
    elseif S==2                     %正弦输入
        kp=10;ki=0.1;kd=15;             
        rin(k)=0.5*sin(2*pi*k*ts);  %Sine Signal     即实际输入      
    end 
    
    %增量式PID的实现 参考上文增量式PID算法
    du(k)=kp*x(1)+kd*x(2)+ki*x(3);        
    u(k)=u_1+du(k);               %真正的PID输出应该为du+前一时刻的输出
    
    if u(k)>=3    %输出限幅   
       u(k)=3;  
    end  
    if u(k)<=-3  
       u(k)=-3;  
    end  

    %Linear model 难点就是把传递函数转化为差分方程,以实现PID控制。 
    yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;          %实际输出 num为dsys分子多项式系数,den为dsys分母多项式系数,从n阶定常离散系统差分方程变化来的。
    error(k)=rin(k)-yout(k);                                       % 误差 输入-输出 
    u_2=u_1;                                                       %保存上上次输入   为下次计算  
    u_1=u(k);                                                      %保存上一次控制系数   为下次计算  
    y_2=y_1;                                                       %保存上上次次输出   为下次计算  
    y_1=yout(k);                                                   %保存上一次输出   为下次计算  

    x(1)=error(k)-error_1;                                         %KP的系数  
    x(2)=error(k)-2*error_1+error_2;                               %KD的系数  
    x(3)=error(k);                                                 %KI的系数
    error_2=error_1;                                               %上次的变上上次误差
    error_1=error(k);                                              %这次的变上次的误差
    end 


    figure(1);  
    plot(time,rin,'b',time,yout,'r');                              %输入 和实际控制输出  
    xlabel('time(s)'),ylabel('rin,yout');   
    figure(2);  
    plot(time,error,'r')                                           %时间误差输出曲线  
    xlabel('time(s)');ylabel('error'); 

仿真效果(PID调参后)
在这里插入图片描述
在这里插入图片描述

3、PID调参过程

3.1、 确定比例系数Kp

确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。

3.2、确定积分时间常数Ti

比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。

3.3、确定微分时间常数Td

微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。

3.4、系统空载、带载联调

对PID参数进行微调,直到满足性能要求。

4、PID的Simulink仿真

使用Simulink仿真也非常的方便,只需要设定好PID控制器的参数和传递函数即可
在这里插入图片描述
在设置PID环节的参数时,Filter coefficient这个参数起微分输入低通滤波的作用,这里取得1 。
这里的微分项为:
在这里插入图片描述
其实就是微分项前面加了一个一阶低通滤波器,N为低通滤波器的截止频率——单位rad/s。
而在电机控制中,一般电流环只用PI控制,而不用PID。因为微分项的加入,会使电流采样中的高频小信号误差起到放大的作用,把小的误差放大,带到系统中来,这个时候Kd的加入容易导致震荡不但不减小反而扩大。这也是Simulink中的PID模型其微分项自带了低通滤波的功能的原因。例如电流采样中小的高频误差为e=0.001sin1000t,其微分值就为1000*0.001cos1000t,可见其对误差放大了1000倍。(总的来说就是,微分项容易把控制中的高频噪声带入到系统中,引起系统不稳定)
但是如果当N取很大时,截止频率就很大,也就退化为常规的微分项(DS)了

在这里插入图片描述
在这里插入图片描述
仿真结果就自己看了。

结论

  1. 对于PID 参数采用 MATLAB 进行整定和仿真,使用起来不仅快捷、方便,而且更为直观,同时也避免了传统方法反复修改参数调试。
  2. 系统的响应速度会随Kp值的增大而加快,同时也有助于静差的减小,而Kp值过大则会使系统有较大超调,稳定性变坏;此外,系统的动作会因为过小的Kp值减慢。
  3. 超调的减小、振荡变小以及系统稳定性的增加都取决于积分时间Ti的增大,但是系统静差消除时间会因为Ti的增大而变长。
  4. 增大微分时间Td对于系统的稳定性、系统响应速度的加快以及系统超调量的减小都会有所帮助。但是如果Td过大,则会使得调节时间较长,超调量也会增大;如果Td过小,同样地也会发生以上状况。
  5. 总之PID 参数的整定必须考虑在不同时刻三个参数的作用以及彼此之间的作用关系。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值