matlabsimulink实现PID设计说明.docx
《matlabsimulink实现PID设计说明.docx》由会员分享,可在线阅读,更多相关《matlabsimulink实现PID设计说明.docx(15页珍藏版)》请在冰豆网上搜索。
matlabsimulink实现PID设计说明
自动化专业07级
《计算机仿真与MATLAB》课程报告
题目:
基于MATLAB/Simulink的PID控制系统的设计与仿真
班级:
姓名:
学号:
2010年6月
基于MATLAB/Simulink的PID控制系统的设计与仿真
摘要:
介绍了基于Ziegler-Nichols整定方法的PID控制器设计,给出了基于MATLAB和Simulink的实现方法和仿真。
仿真结果表明,此算法设计的PID控制器有良好的性能指标。
1控制对象建模
1.1PID控制系统的建模
PID(Proportional,IntegralandDifferemial)控制器是一种基于“过去”,“现在”和“未来”信息估计的简单算法。
常规PID控制系统原理框图如下图所示,系统主要由PID控制器和被控对象组成。
作为一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制偏差e(t),将偏差按比例、积分、和微分通过线性组合构成控制量u(t),对被控对象进行控制。
PID控制系统原理图
PID控制器的数学描述为:
其传递函数可表示为:
PID控制器各校正环节的作用如下:
1.比例环节:
成比例地反映控制系统的偏差信号e(t),偏差一旦产生,控制器立即产生控制作用,以减少偏差。
2.积分环节:
主要用于消除静差,提高系统的无差度。
积分作用的强弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之越强。
3.微分环节:
反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
从根本上讲,设计PID控制器也就是确定其比例系数Kp、积分系数Ti和微分系数Td,这三个系数取值的不同,决定了比例、积分和微分作用的强弱。
控制系统的整定就是在控制系统的结构已经确定、控制仪表和控制对象等处在正常状态的情况下,适当选择控制器的参数使控制仪表的特性和控制对象的特性相配合,从而使控制系统的运行达到最佳状态,取得最好的控制效果。
本文介绍基于Ziegler-Nichols整定方法的PID控制器设计。
1.2被控对象的建模
在实际的过程控制系统中,有大量的对象模型可以近似地由带有延迟的一阶传递函数模型来表示,该对象的模型可以表示如下:
如果不能建立起系统的物理模型,可通过试验测取对象模型的阶跃响应,从而得到模型参数。
当然,我们也可在已知对象模型的情况下,由MATLAB通过STEP()函数得到对象模型的开环阶跃响应曲线。
在被控对象的阶跃响应输出信号图(如图所示)中,可获取K、L和T参数。
2PID控制系统的设计
Ziegler-Nichols法是一种基于频域设计PID控制器的方法。
此法首先通过实验获取控制对象单位阶跃响应,获得K、L和T参数。
令a=KL/T,我们可以通过下表给出的Ziegler-Nichols经验公式确定P、PI和PID控制器的参数。
控制器类型
Kp
Ti
Td
P
0
PI
0
PID
Ziegler-Nichols法整定控制器参数
3PID控制系统MATLAB/Simulink仿真分析
3.1在MATLAB下实现PID控制器的设计与仿真
根据Ziegler-Nichols法,这里编写一个MATLAB函数ziegler,该函数的功能实现由Ziegler-Nichols公式设计PID控制器,在设计过程中可以直接调用。
其源程序如下:
function[Gc,Kp,Ti,Td,H]=ziegler(key,vars)
Ti=[];Td=[];H=1;
iflength(vars)==4,
K=vars
(1);L=vars
(2);T=vars(3);N=vars(4);a=K*L/T;
ifkey==1,Kp=1/a;
elseifkey==2,Kp=0.9/a;Ti=3.33*L;
elseifkey==3|key==4,Kp=1.2/a;Ti=2.2*L;Td=L/2;end
elseiflength(vars)==3,
K=vars
(1);Tc=vars
(2);N=vars(3);
ifkey==1,Kp=0.5*K;
elseifkey==2,Kp=0.4*K;Ti=0.8*Tc;
elseifkey==3|key==4,Kp=0.6*K;Ti=0.5*Tc;Td=0.12*Tc;end
elseiflength(vars)==5,
K=vars
(1);Tc=vars
(2);rb=vars(3);N=vars(5);
pb=pi*vars(4)/180;Kp=K*rb*cos(pb);
ifkey==2,Ti=-Tc/(2*pi*tan(pb));
elseifkey==3|key==4,Ti=Tc*(1+sin(pb))/(pi*cos(pb));Td=Ti/4;end
end
switchkey
case1,
Gc=Kp;
case2,
Gc=tf(Kp*[Ti,1],[Ti,0]);
case3,
nn=[Kp*Ti*Td*(N+1)/N,Kp*(Ti+Td/N),Kp];
dd=Ti*[Td/N,1,0];
Gc=tf(nn,dd);
end
该函数的调用格式为:
[Gc,Kp,Ti,Td]=Ziegler(key,vars)
其中,key为选择控制器类型的变量:
当key=1,2,3时分别表示设计P、PI、PID控制器;若给出的是阶跃响应数据,则变量vars=[K,L,T,N];若给出的是频域响应数据,则变量vars=[Kc,Tc,N]。
在实际的过程控制系统中,有大量的对象模型可以近似地由带有延迟的一阶传递函数模型来表示,该对象的模型可以表示如下:
这里我们不妨设K=8,T=360,L=180,则对象模型可以表示为:
利用ziegler()函数计算系统P、PI、PID控制器的参数,并给出校正后系统阶跃响应曲线。
程序如下:
K=8;
T=360;
L=180;
num=[K];
den=[T1];
G1=tf(num,den)
[np,dp]=pade(L,2);
Gp=tf(np,dp)
figure,step(G1*Gp);
title('未校正前系统阶跃响应曲线曲线');
grid;
[Gc1,Kp1]=ziegler(1,[K,L,T,1]);
Gc1
[Gc2,Kp2,Ti2]=ziegler(2,[K,L,T,1]);
Gc2
[Gc3,Kp3,Ti3,Td3]=ziegler(3,[K,L,T,1]);
Gc3
G_c1=feedback(G1*Gc1,Gp);
figure,step(G_c1);
title('P控制器校正后的系统阶跃响应曲线')
grid;
G_c2=feedback(G1*Gc2,Gp);
figure,step(G_c2);
title('PI控制器校正后的系统阶跃响应曲线');
grid;
G_c3=feedback(G1*Gc3,Gp);
figure,step(G_c3);
title('PID控制器校正后的系统阶跃响应曲线');
grid;
figure,step(G_c1);holdon;step(G_c2);holdon;step(G_c3);
title('P、PI、PID控制器校正后的系统阶跃响应曲线');
grid;
gtext('P')
gtext('PI')
gtext('PID')
运行程序,输出如下:
Gc1=
0.2500
Transferfunction:
134.9s+0.225
-----------------------
599.4s
(PI控制器的传递函数)
Transferfunction:
2.138e004s^2+145.8s+0.3
-------------------------------------------
3.564e004s^2+396s
(PID控制器的传递函数)
P、PI、PID校正后的系统阶跃响应曲线如下图:
由上图可知,用Ziegler-Nichols公式计算P、PI、PID控制器对系统校正后,其阶跃响应曲线中的P、PI控制二者的响应速度基本相同,因为两种控制的比例系数不同,因此系统稳定的输出值不同。
PI控制超调量比P控制的要小一些。
PID控制比前者的响应速度都快,但超调量最大。
3.2在Simulink下实现PID控制器的设计与仿真
这里仍然设被控对象的传递函数是
建立Simulink模型:
图中,“Integrator”为积分器,“Derivative”为微分器,“Kp”为比例系数,“Ti”为积分时间常数,“Td”为微分时间常数。
进行P控制器参数整定时,微分器和积分器的输出不连到系统中,在Simulink中,把微分器和积分器的输出连线断开即可。
同理,进行PI控制器参数整定时,微分器的输出连线断开。
Ziegler-Nichols整定的第一步是获取开环系统的单位阶跃响应,在Simulink中,把反馈连线、微分器的输出连线、积分器的输出连线都断开,“Kp”的值置为1,连线得:
选定仿真时间,仿真运行,运行完毕后,双击“Scope”得到结果:
根据Ziegler-Nichols经验公式,可知P控制整定时,比例放大系数Kp=0.25,将“Kp”的值置为0.25,并连上反馈连线,得:
选定仿真时间,仿真运行,运行完毕后,双击“Scope”得到结果:
上图即为P控制时系统的单位阶跃响应。
根据Ziegler-Nichols经验公式,可知PI控制整定时,比例放大系数Kp=0.225,积分时间常数Ti=594,将“Kp”的值置为0.225,“1/Ti”的值为1/594,将积分器的输出连线连上,得:
选定仿真时间,仿真运行,运行完毕后,双击“Scope”得到结果:
上图即为PI控制时系统的单位阶跃响应。
根据Ziegler-Nichols经验公式,可知PID控制整定时,比例放大系数Kp=0.3,积分时间常数Ti=396,微分时间常数Td=90,将“Kp”的值置为0.3,“1/Ti”的值为1/396,“Td”的值置为90,将微分器的输出连线连上,得:
选定仿真时间,仿真运行,运行完毕后,双击“Scope”得到结果:
由以上三图同样可以看出,P、PI控制二者的响应速度基本相同,但系统稳定的输出值不同。
PI控制超调量比P控制的要小一些。
PID控制比前者的响应速度都快,但超调量最大。
针对该PID控制器,我们可以通过外加扰动信号来测试其控制效果。
如下图,我们在t=4000s时,外加一个幅值为15的扰动信号:
将该扰动信号加到系统输入端,如下图:
选定仿真时间,仿真运行,运行完毕后,双击“Scope”得到结果:
当系统稳定后,若加一个扰动信号,PID控制器可以很快对被控对象的响应进行校正,使其尽快稳定。
由上图可以看出,该PID控制器效果良好。
从系统接入PID控制器前后的阶跃响应曲线中,我们可以明显地看到系统性能的改善。
利用MATLAB/Simulink可以实现PID控制器的离线设计和整定,并可实现实验室仿真。
但是这种常规的PID控制不具有自适应性,在长期工作时对象参数会产生偏移,系统具有时变不确定性,也存在非线性,工况点附近小范围的线性化假设在整个工作范围中不能成立时,就难以达到理想的控制效果。
为此,我们可以考虑自适应的PID控制算法。
4Summary
Intheever-changing21stcentury,thepastdecadehaswitnessedthatautomationhasbeenoneofthemostimportanttechnologyinengineeringscience,and,astheessentialtoolforautomation,MATLABhasbeenapparentlypayingmoreattentionmeanwhilebyanincreasingnumberofteachersandstudentswhethertheymajorinengineeringornot.Asanillustration,inourclass,studentsobviouslyenjoydoingtheMATLABassignment,combiningthepracticewiththeorieswhichwehavelearned.
Personally,Ibelievethisphenomenonshouldbeapprovedandacclaimed,anditexactlytellsthetruththattheconventionalviewthatthetheoryteachingshouldbeoneoftheveryhighestprioritiesforautomationisnotentirelyaccurate.Furthermore,asIsee,withproperreformsonautomationeducation,programmingbasedonMATLABwillbethelatestrageamongthepassionateyoung.