pid控制器matlab仿真Word格式.docx
《pid控制器matlab仿真Word格式.docx》由会员分享,可在线阅读,更多相关《pid控制器matlab仿真Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
![pid控制器matlab仿真Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/30/6930bfb6-7b13-41e9-a8ef-f018ec7a3505/6930bfb6-7b13-41e9-a8ef-f018ec7a35051.gif)
自计算机进入控制领域以来,用数字计算机代替模拟计算机调节器组成的计算机控制系统,不仅可以用软件实现PID控制算法[65],而且可以利用计算机的逻辑功能,使PID控制更加灵活。
数字PID控制是生产过程普遍采用的一种控制方法,在机电、冶金、机械、化工等行业获得广泛的应用。
将偏差的比例(P)、积分(I)和微分(D)通过线性组合构成的控制量,对被控对象进行控制。
模拟PID控制系统原理框图如图1,系统由模拟PID控制器和被控对象组成。
PID控制器是一种线性控制器,它根据给定值rin(t)和实际输出值yout(t)构成控制偏差:
err(t)=rin(t)-yout(t)。
通过对误差信号进行比例,积分或微分运算和结果的加权处理,得到控制系统的输出u(t)其控制规律为
构成传递函数为
上式中,kp为比例系统,T1积分时间常数,Td微分时间常数。
简单来说,PID各校正环节的作用如下:
比例环节:
成比例的反映控制系统的偏差信号err(t),偏差一旦产生,控制器立即产生控制作用,以减少偏差。
积分环节:
主要用于消除静差,提高系统的无差度。
积分作用的强弱取决于时间常数T1,T1越大,积分作用越弱,反之越强。
微分环节:
反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
3、PID控制系统仿真分析
MATLAB语言具有简单易懂,运算功能强大,界面友好等优点,同时具有大量的工具箱,广泛应用于控制系统的仿真和分析。
以下利用MATLAB对系统做分析和研究。
PID控制的难点在于控制器的参数整定。
一般先通过理论计算来确定控制器参数,同时结合工程经验对实际运行中的系统进行最后的调整和完善。
本文首先通过系统等幅振荡整定得到PID参数,然后通过改变各个参数的取值,利用MATLAB仿真得到各参数对系统的影响。
从而为现实的工业操作应用提供参考。
建立数学模型:
设被控对象等效传递函数为
分析控制器的参数对系统静态误差的影响。
程序
num=1;
den=conv([110],[15]);
G0=tf(num,den);
rlocus(G0)
axis([-55-1010])
可以得到原系统根轨迹图如图2所示:
当开环增益约小于29.7的时候,系统处于稳定状态。
由图可以得原系统在临界稳定时,取
利用等幅震荡整定法,可以确定控制器对应的参数。
控制器类型
等幅震荡整定
P
PI
,
PID
1、首先可以得到没有加PID控制时候原系统以及添加PID控制器的阶跃响应其中参数
程序:
t=0:
0.01:
25;
step(feedback(G0,1),t)
holdon
k0=30;
p0=2.8;
k1=0.6*k0;
ti=0.5*p0;
td=0.125*p0;
s=tf('
s'
);
Gc=k1*(1+1/ti/s+td*s);
step(feedback(G0*Gc,1),t)
%title('
原系统与添加PID控制系统的对比图'
)
gtext('
原闭环系统响应曲线'
PID控制系统响应曲线'
从图可以看出,通过PID实施控制可以减少系统的静态误差,改善系统的稳态性能。
2、分析比例控制作用,设
、
、Kp=0.1*30~1*30.输人信号阶跃函数,分别进行仿真,如图3所展示的系统的阶跃响应曲线
a1=0.1:
0.4:
1;
k1=a1*k0;
G=G0.*Gc;
step(feedback(G
(1),1),t)
step(feedback(G
(2),1),t)
step(feedback(G(3),1),t)
axis([01601.9])
holdoff
legend('
Kp=3'
'
Kp=15'
Kp=27'
text(6.5,1.4,'
)
text(4,0.65,'
text(4.1,1.1,'
图3显示的仿真结果表明:
系统的超调量会随着Kp值的增大而加大,系统响应速度也会会随Kp值的增大而加快。
但是系统的稳定性能会随着Kp的增大而变差。
3、分析积分控制作用,设
、Kp=18.输人信号阶跃函数,分别进行仿真,如图所示系统的阶跃响应曲线
系统的超调量会随着Ti值的加大而减小,系统响应速度随着Ti值的加大会略微变慢。
a1=linspace(0.2,1,3);
ti=a1*p0
Gc=k1*(1+1./ti/s+td*s);
axis([010-14])
Ti=0.56'
Ti=1.68'
Ti=2.8'
gtext('
4、设
、Kp=10.输人信号阶跃函数,分别进行仿真,如图3所展示的系统的阶跃响应曲线
随着Td值的加大,闭环系统的超调量增大,响应速度变慢。
a1=linspace(0.1,1,3);
ti=p0;
td=a1*p0
Gc=k1*(1+1/ti/s+td.*s);
axis([0702])
Td=0.28'
Td=1.54'
Td=2.8'
2.PID控制器的MATLAB仿真
美国MathWorks公司推出的MATLAB是一套具备高性能的数值计算和可视化软件。
由于MATLAB可以将矩阵运算、图形显示、信号处理以及数值分析集于一体,构造出的用户环境使用方便、界面友好,因此MATLAB受到众多科研工作者的欢迎。
本文利用MATLAB仿真工具箱Simulink的功能,在基于仿真环境Matlab/Simulink工具上用图形化方法直接建立仿真系统模型,启动仿真过程,将结果在示波器上显示出来。
3.仿真实例分析
3.1建立数学建模
设被控对象等效传递函数为
3.2仿真建模
仿真建模的目的就是将数学模型转换成计算机能够执行的模型,运用Simulink可以达到此目的。
图2是综合图1和给定计算公式运用Simulink建立的PID控制的连续系统的仿真模型(建模步骤略)。
图2Simulink仿真建模
3.3仿真实验
在传统的PID调节器中,参数的整定问题是控制面临的最主要的问题,控制系统的关键之处便是将Kp、Ti、Td三个参数的值最终确定下来。
而在工业过程控制中首先需要对PID控制中三参量对系统动态性的影响进行实际深入地了解,才能确定怎样将三参数调节到最佳状态。
在本实验中,对各参量单独变化对系统控制作用的影响进行讨论,其中在对一个参量变化引发的影响进行讨论时,需要将其余两个参数设定为常数。
3.3.1P控制作用分析
分析比例控制作用。
设Td=0、Ti=∞、Kp=3~10.输人信号阶跃函数,分别进行仿真,如图3所展示的系统的阶跃响应曲线。
图3显示的仿真结果表明:
图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参数的整定必须考虑在不同时刻三个参数的作用以及彼此之间的作用关系。
5.结语
PID控制应用领域极为广泛,可将其应用于电力、化工、轻工、冶金以及机械等工业过程控制中。
通常情况下,最适合采用PID控制技术的条件是:
当我们对目标系统或被控对象的内部特征不完全清楚时,或者是系统的全部参数不能经过有效的测量手段来获取,同时必须依赖于经验和现场调试来确定系统控制器的结构参数情况下采用该技术。
4、
在《先进PID控制MATLAB仿真》中有这样一个例子:
被控对象为一电动机模型的传递函数:
,式中,J=0.0067,B=0.10。
输入指令信号为
利用ODE45求解连续对象方程,采用PID控制方法设计控制器,其中
控制主程序如下:
%DiscretePIDcontrolforcontinuousplant
clearall;
closeall;
ts=0.001;
%Samplingtime
xk=zeros(2,1);
e_1=0;
u_1=0;
fork=1:
1:
2000
time(k)=k*ts;
rin(k)=0.50*sin(1*2*pi*k*ts);
para=u_1;
%D/A
tSpan=[0ts];
[tt,xx]=ode45('
chap1_6f'
tSpan,xk,[],para);
xk=xx(length(xx),:
%A/D
yout(k)=xk
(1);
e(k)=rin(k)-yout(k);
de(k)=(e(k)-e_1)/ts;
u(k)=20.0*e(k)+0.50*de(k);
%Controllimit
ifu(k)>
10.0
u(k)=10.0;
end
ifu(k)<
-10.0
u(k)=-10.0;
u_1=u(k);
e_1=e(k);
figure
(1);
plot(time,rin,'
r'
time,yout,'
b'
xlabel('
time(s)'
),ylabel('
rin,yout'
figure
(2);
plot(time,rin-yout,'
error'
连续对象子函数:
chap1_6f.m
functiondy=PlantModel(t,y,flag,para)
u=para;
J=0.0067;
B=0.1;
dy=zeros(2,1);
dy
(1)=y
(2);
dy
(2)=-(B/J)*y
(2)+(1/J)*u;
根据函数句柄和匿名函数的定义,程序可修改为如下形式:
PlantModel=@(t,xk,para)([xk
(2);
-(B/J)*xk
(2)+(1/J)*u_1]);
[tt,xx]=ode45(PlantModel,tSpan,xk,[],para);
figure1
figure2
分享: