基于matlab程序对PID控制算法的理解

原文地址:https://blog.csdn.net/sinat_23338865/article/details/53837634





 
 
  1. %设一被控对象G(s)= 50/( 0.125s^ 2+ 7s),
  2. %用增量式PID控制算法编写仿真程序
  3. %(输入分别为单位阶跃、正弦信号,采样时间为 1ms,控制器输出限幅:[ -5, 5],
  4. % 仿真曲线包括系统输出及误差曲线,并加上注释、图例)。
  5. clear all;
  6. close all;
  7. ts= 0.001; %采样时间
  8. sys= tf( 50,[ 0.125, 7, 0]); %tf是传递函数 即被控对象函数G();
  9. dsys= c2d(sys,ts, 'z'); %把控制函数离散化
  10. [num,den]=tfdata(dsys, 'v');% 离散化后提取分子、分母
  11. u_1= 0.0;
  12. u_2= 0.0;
  13. y_1= 0.0;
  14. y_2= 0.0;
  15. x=[ 0, 0, 0] ';
  16. error_1=0;
  17. error_2=0;
  18. for k=1:1:1000
  19. time(k)=k*ts; %采样次数
  20. S=2;
  21. if S==1
  22. kp=10;ki=0.1;kd=15; %初始化PID
  23. rin(k)=1; %Step Signal
  24. elseif S==2
  25. kp=10;ki=0.1;kd=15;
  26. rin(k)=0.5*sin(2*pi*k*ts); %Sine Signal 即实际输入
  27. end
  28. du(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller 控制系数
  29. u(k)=u_1+du(k); %Restricting the output of controller
  30. if u(k)>=5
  31. u(k)=5;
  32. end
  33. if u(k)<=-5
  34. u(k)=-5;
  35. end
  36. %Linear model
  37. yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2; %实际输出
  38. error(k)=rin(k)-yout(k); %Return of parameters 误差
  39. u_2=u_1; %保存上上次输入 为下次计算
  40. u_1=u(k); %保存上一次控制系数 为下次计算
  41. y_2=y_1; %保存上上次次输出 为下次计算
  42. y_1=yout(k); %保存上一次输出 为下次计算
  43. x(1)=error(k)-error_1; %Calculating P
  44. x(2)=error(k)-2*error_1+error_2; %Calculating D
  45. x(3)=error(k); %Calculating I
  46. error_2=error_1;
  47. error_1=error(k);
  48. end
  49. figure(1);
  50. plot(time,rin,'b',time,yout, 'r'); %输入 和实际控制输出
  51. xlabel( 'time(s)'),ylabel( 'rin,yout');
  52. figure( 2);
  53. plot(time,error, 'r') %输入与输出误差输出曲线
  54. xlabel( 'time(s)');ylabel( 'error');


3.1 建立数学建模

  设被控对象等效传递函数为

3.2 仿真建模(略)


3.3 仿真实验

  在传统的PID 调节器中,参数的整定问题是控制面临的最主要的问题,控制系统的关键之处便是将Kp、Ti、Td三个参数的值最终确定下来。而在工业过程控制中首先需要对PID 控制中三参量对系统动态性的影响进行实际深入地了解,才能确定怎样将三参数调节到最佳状态。在本实验中,对各参量单独变化对系统控制作用的影响进行讨论,其中在对一个参量变化引发的影响进行讨论时,需要将其余两个参数设定为常数。

  3.3.1 P 控制作用分析

  分析比例控制作用。设Td= 0、Ti=∞、Kp= 3 ~ 10.输人信号阶跃函数,分别进行仿真,如图3 所展示的系统的阶跃响应曲线。

  图3 显示的仿真结果表明:系统的超调量会随着Kp值的增大而加大,系统响应速度也会会随Kp值的增大而加快。但是系统的稳定性能会随着Kp的增大而变差。

  图3 单闭环调速系统P控制阶跃响应曲线

  3.3.2 比例积分控制作用的分析

  设比例积分调节器中Kp= 1,讨论Ti= 0.01 ~ 0.05 时。输人信号阶跃函数,分别进行仿真,如图4 所展示的系统的系统的阶跃响应曲线。

  图4 单闭环调速系统PI控制阶跃给定响应曲线

  系统的超调量会随着Ti值的加大而减小,系统响应速度随着Ti值的加大会略微变慢。

  3.3.3 微分调节作用的分析

  设Kp= 1、Ti= 0.01,讨论Td= 10 ~ 100 时对系统阶跃响应曲线的影响。输人信号阶跃函数,分别进行仿真,如图5 所展示的系统的阶跃响应曲线。

  图5 单闭环调速系统PID控制阶跃给定响应曲线

  图5 所显示的仿真结果表明:根据单闭环调速系统的参数配合情况,起始上升段呈现较尖锐的波峰,Kp= 1、Ti= 0.01不变时,随着Td值的加大,闭环系统的超调量增大,响应速度变慢。

  4 .结论

  (1)对于PID 参数采用MATLAB 进行整定和仿真,使用起来不仅快捷、方便,而且更为直观,同时也避免了传统方法反复修改参数调试。

  (2)系统的响应速度会随Kp值的增大而加快,同时也有助于静差的减小,而Kp值过大则会使系统有较大超调,稳定性变坏;此外,系统的动作会因为过小的Kp值减慢。

  (3)超调的减小、振荡变小以及系统稳定性的增加都取决于积分时间Ti的增大,但是系统静差消除时间会因为Ti的增大而变长。

  (4)增大微分时间Td对于系统的稳定性、系统响应速度的加快以及系统超调量的减小都会有所帮助。但是如果Td过大,则会使得调节时间较长,超调量也会增大;如果Td过小,同样地也会发生以上状况。

  (5)总之PID 参数的整定必须考虑在不同时刻三个参数的作用以及彼此之间的作用关系。


(1)
确定比例系数Kp
确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为
纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。
(2)
确定积分时间常数Ti
比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。
(3)
确定微分时间常数Td
微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。
(4)
系统空载、带载联调
对PID参数进行微调,直到满足性能要求。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值