基于大林算法的温度控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电气工程及自动化学院
课程设计报告
(控制基础实践)
题目:基于大林算法的炉温控制仿真专业班级:自动化101班
姓名:周强
学号:33号
指导老师:杨国亮
2012年12月22日
电阻炉在化工、冶金等行业应用广泛,因此温度控制在工业生产和科学研究中具有重要意义。
其控制系统属于一阶纯滞后环节,具有大惯性、纯滞后、非线性等特点,导致传统控制方式超调大、调节时间长、控制精度低。
采用单片机进行炉温控制,具有电路设计简单、精度高、控制效果好等优点,对提高生产效率、促进科技进步等方面具有重要的现实意义。
常规的温度控制方法以设定温度为临界点,超出设定允许范围即进行温度调控:低于设定值就加热,反之就停止或降温。
这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、容易引起震荡,达到稳定点的时间也长,因此,只能用在精度要求不高的场合。
电加热炉是典型的工业过程控制对象,在我国应用广泛。
电加热炉的温度控制具有升温单向性,大惯性,大滞后,时变性等特点。
其升温、保温是依靠电阻丝加热,降温则是依靠环境自然冷却。
当其温度一旦超调就无法用控制手段使其降温,因而很难用数学方法建立精确的模型和确定参数,应用传统的控制理论和方法难以达到理想的控制。
在温度控制技术领域中,普通采用PID控制算法。
但是在一些具有纯滞后环节的系统中,PID控制很难兼顾动、静两方面的性能,而且多参数整定也很难实现最佳控制。
若采用大林算法,可做到无或者小超调,无或小稳态误差。
大林算法是运用于自动控制领域中的一种算法,是一种先设计好闭环系统的响应再反过来综合调节器的方法。
设计的数字控制器(算法)使闭环系统的特性为具有时间滞后的一阶惯性环节,且滞后时间与被控对象的滞后时间相同。
此算法具有消除余差、对纯滞后有补偿作用等特点。
本设计主要采用大林算法来实现炉温控制,并与PID算法进行比较。
关键词:PID控制;大林算法;控制算法;MATLAB
第一章系统方案 (1)
1.1设计任务和要求 (1)
1.2大林算法 (1)
1.3 PID算法 (3)
第二章设计流程 (5)
2.1大林算法软件设计流程图 (5)
2.2 PID算法程序设计流程图 (5)
第三章设计过程及结果 (6)
3.1 GUI界面设计 (6)
3.1.1 GUI界面的建立 (7)
3.1.2 制作GUI界面 (9)
3.2 Simulink设计 (10)
3.2.1 大林算法Simulink (10)
3.2.2 PID控制算法Simulink (11)
3.3 程序设计 (12)
3.3.1 大林算法编程 (12)
3.3.2 PID控制算法编程 (14)
3.4 两种算法的比较 (16)
第四章总结 (17)
致谢 (18)
参考文献 (19)
附录 (20)
1、大林算法程序 (20)
2、PID控制器算法程序 (20)
第一章 系统方案
1.1设计任务和要求
已知电阻炉对象数学模型为 1)(+=-Ts ke s G s
τ 其中,k=12, T=400, 60=τ,电阻炉的温度设定为1000℃.
要求:
(1)设计大林控制算法;
(2)设计PID 控制器,并与PID 算法进行比较;
(3)改变模型参数,考察模型扰动下系统性能变化情况。
1.2大林算法
在一些实际工程中,经常遇到纯滞后调节系统,它们的滞后时间比较长。
对于这样的系统,往往允许系统存在适当的超调量,以尽可能地缩短调节时间。
人们更感兴趣的是要求系统没有超调量或只有很小超调量,而调节时间则允许在较多的采样周期内结束。
也就是说,超调是主要设计指标。
对于这样的系统,用一般的随动系统设计方法是不行的,用PID 算法效果也欠佳。
针对这一要求,IBM 公司的大林(Dahlin)在1968年提出了一种针对工业生产过程中含有纯滞后对象的控制算法。
其目标就是使整个闭环系统的传递函数 相当于一个带有纯滞后的一阶惯性环节。
该算法具有良好的控制效果。
大林算法中D(z)的基本形式
设被控对象为带有纯滞后的一阶惯性环节或二阶惯性环节,其传递函数分别为:
(1-1)
(1-2) 其中为被控对象的时间常数,为被控对象的纯延迟时间,为了简化,设其为采样周期的整数倍,即N 为正整数。
由于大林算法的设计目标是使整个闭环系统的传递函数相当于一个带有纯
滞后的一阶惯性环节,即
,其中
由于一般控制对象均与一个零阶保持器相串联,所以相应的整个闭环系统的脉冲传递函数是
(1-3)于是数字控制器的脉冲传递函数为
(1-4)D(z)可由计算机程序实现。
由上式可知,它与被控对象有关。
下面分别对一阶或二阶纯滞后环节进行讨论。
一阶惯性环节的大林算法的D(z)基本形式
当被控对象是带有纯滞后的一阶惯性环节时,由式(1-1)的传递函数可知,其脉冲传递函数为:
将此式代入(2-4),可得
(1-5)式中:T——采样周期:
———被控对象的时间常数;
———闭环系统的时间常数。
二阶惯性环节大林算法的D(z)基本形式
当被控对象为带有纯滞后的二阶惯性环节时,由式(1-1)的传递函数可知,其脉冲传递函数为
其中,
将式G(z)代入式(1-3)即可求出数字控制器的模型:
(1-6)由此,我们可以设计出控制器的传递函数,利用MATLAB工具在SIMULINK里画出整个控制系统,给定一个阶跃信号就可得到整个控制系统的响应曲线。
1.3 PID算法
根据偏差的比例(P)、积分(I)、微分(D)进行控制(简称PID控制),是控制系统中应用最为广泛的一种控制规律。
实际运行的经验和理论的分析都表明,运用这种控制规律对许多工业过程进行控制时,都能得到满意的效果。
不过,用计算机实现PID控制,不是简单地把模拟PID控制规律数字化,而是进一步与计算机的逻辑判断功能结合,使PID控制更加灵活,更能满足生产过程提出的要求。
它的结构如图1.1所示:
图1-1 PID 结构图
在计算机控制系统中,PID控制规律的实现必须用数值逼近的方法。
当采样周期相当短时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为
差分方程。
数字PID 增量型控制算式为
[][])2()1(2)()()1()()
1()()(u -+--++--=--=∆k e k e k e K k e K k e k e K k u k u k D I P (2-7)
式中 δ1
=P K 称为比例增益;
I P I T T
K K = 称为积分系数;
T T K K D
P D = 称为微分系数。
为了编程方便,可将式整理成如下形式
)2()1()()(210-+-+=∆k e q k e q k e q k u
(1-8) 其中 ⎪⎪
⎪
⎭⎪
⎪
⎪⎬
⎫
=+-=++=T T K q T T K q T T T T K q D
P D P D
I P 210)21()1(
(1-9)
第二章设计流程
2.1大林算法软件设计流程图
数字控制器是控制系统的核心,用它对被测参数进行自动调节,这里采用直接程序设计法继续设计。
程序设计流程图如图1。
图2-1 大林算法设计程序流程图
2.2 PID算法程序设计流程图
PID控制算法种类繁多,各种控制条件下产生的响应又是有区别的。
在本设计中采用的是普通PID控制算法。
PID算法程序设计流程图如图2。
图2-2 PID算法程序设计流程图
第三章设计过程及结果
3.1 GUI界面设计
MATLAB可以创建图形用户界面GUI(GraphicalUserInterface),它是用户和计算机之间交流的工具。
MATLAB将所有GUI支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法,随着版本的提高,这种能力还会不断加强。
由窗口、光标、按键、菜单、文字说明等对象(Ob2ject)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
假如科技工作者仅仅执行数据分析、解方程等工作,一般不会考虑GUI的制作。
但是如果想向客户提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面是最好的选择之一。
Matlab为表现其基本功能而设计的演示程序demo是使用图形界面的最好范例。
Matlab的用户在指令窗口中运
行demo打开图形界面后,只要用鼠标进行选择和点击,就可浏览丰富多彩的内容。
开发实际的应用程序时应该尽量保持程序的界面友好,因为程序界面是应用程序和用户进行交互的环境。
在当前情况下,使用图形用户界面是最常用的方法。
提供图形用户界面可使用户更方便地使用应用程序,不需要了解应用程序怎样执行各种命令,只需要了解图形界面组件的使用方法;同时,不需要了解各种命令是如何执行的,只要通过用户界面进行交互操作就可以正确执行程序
3.1.1 GUI界面的建立
1、打开GUI或在MATLAB指令窗中运行guide得到如图3-1所示:
图3-1 创建GUI
2、选则Blank GUI
空白GUI设计工作台,如下图所示,包含以下4个功能区:
菜单条、编辑工具条、控件模板区、设计工作区。
图形用户界面设计在该区域进行,引出图所示的界面设计工具。
用鼠标拖动“工作区”右下角的“小黑块”,使工作区的大小与图与图大小相当。
点击“轴Axes”控件图标,然后在工作区中的适当位置,拉出适当大小的绘图区。
类似上步操作,通过点击相应的“静态文本Static Text”、可编辑文本“Edit Text”、按键“Push Button”用鼠标拖拉出相应的控件,如图
图3-2 GUI空白页
3、图形窗口和控件的某些参数进行设置
双击工作区或控件可引出图形和相应控件的“属性编辑框Property Inspector”。
图显示的是轴属性的编辑框。
图3-3属性框
4、创建菜单
点击“菜单编辑器”图标,引出空白菜单编辑对话窗
点击“菜单编辑对话窗”最左上方的“新菜单New Menu”图标,在左侧空白窗口中,出现“Untitled1”图标;再点击此图标,就在右侧引出类似于图右侧的填写栏;在“Lable”中填写Options;在“Tag”中填写optios;于是左侧的“Untiled1”图标变成“Options”图标。
先点亮左侧的“Options”图标,再点击菜单编辑对话窗上的“心菜单项New Menu Iterm”图标,就引出待定义的菜单项;在左侧的“Lable”填写Box on,在“Tag”填写box_on。
重复该小步的操作,建立另一个菜单项Box off,如图:
图3-4 菜单项
界面的激活和回调函数生成
经以上操作后,工作台上所制作的界面外形及所含构件已经符合设计要求,但这个界面各构件之间的通讯还没有建立,为此必须激活处理。
点击工作台上“激活Activate Figure”工具图标,就引出2个界面:名为Myguil的图形用户界面;展示名为myguil的M函数文件的文件编辑器界面。
在此同时,在当前目录上,由MATLAB自动生成2个文件,即Myguil.fig和目myguil.m。
3.1.2 制作GUI界面
首先找到所需要的相应控件,然后根据自己的设计想法进行摆正控件。
本设计中所需要的控件主要是按钮,文本,波形图以及输入框。
按照自己的思路摆放成的总结面如下:
图3-5大林算法总界面图3-6 PID控制总界面
3.2 Simulink设计
3.2.1 大林算法Simulink
根据设计任务要求,进行数学建模。
首先是大林算法的,根据第一章介绍的
算法过程中所得到的,进行数据代入,算出D(z)的最终表达式。
并根据任务要求进行参数的填入,如图所示:设置控制温度为1000℃,系统时间周期为10,时间常数为60,最后得到大林算法的Simulink图:
图3-7 大林算法Simulink图
运行得到波形图:
图3-8大林算法Simulink 下的波形图
3.2.2 PID 控制算法Simulink
同理进行PID 控制器的Simulink 进行设计,根据第一章所得到的公式
[][])2()1(2)()()1()()
1()()(u -+--++--=--=∆k e k e k e K k e K k e k e K k u k u k D I P
和
⎪⎪⎪⎭⎪
⎪⎪⎬
⎫=+-=++
=T T K q T
T K q T
T T T K q D
P
D P D I P 210)21()1(
进行参数数据的定义。
给出q0=P,q1=I,q2=D 的数值,时
间周期为10
,时间常数为60
,最后的Simulink 仿真图为:
图3-9 PID 控制算法Simulink 图
运行得到波形图:
图3-10 PID控制算法Simulink下的波形图
3.3 程序设计
本次课程设计主要使用的是MATLAB编程语言。
早期用于科学计算的计算机语言,由于计算机内存容量和运算速度的限制等原因,常常要定义常量、变量、向量和矩阵等的不同的数据类型,结果导致编程过于复杂化。
和这些语言不一样,MATLAB语言对他们进行了高度抽象,实现了数据类型的高度统一,即常量、变量、向量和矩阵等都具有相同的数据类型。
MATLAB语言认为所有的数据都是一个对象类,都具有相同的属性。
因此,用户不需要事先分别定义常量、变量、向量和矩阵等的数据类型就可以直接使用他们,当然MATLAB的这种设计思想是以高性能计算机的出现和普及作为前提条件的,编程得到了很大简化。
MATLAB语言是一种“数学形式的语言”。
它的操作和功能函数指令就是用平时计算机和数学书上的英文单词和符号来表达的,比BASIC、FORTRAN和C 等语言更接近于人们书写的数学计算公式、更接近于人们进行科学计算的思维方式。
用MATLAB语言编写程序犹如在演算纸上排列公式与求解问题,故有人称MATLAB编程语言为“演算纸”式科学算法语言。
因此,MATLAB语言简单自然,学习和使用更容易。
MATLAB程序文件是一个纯文本文件,扩展名为.m,用任何字处理软件都可以对它进行编辑。
MATLAB本身就像一个解释系统,对其中的函数程序的执行以一种解释执行的方式进行,程序不必经过编译就可以直接运行,而且能够及时报告出现的错误,进行出错原因分析。
因此,程序调试容易、编程效率高。
MATLAB 的用户界面精致,接近Windows的标准界面,人机交互性强,操作简单。
新版本的MATLAB提供了完整的联机查询、帮助系统,极大地方便了用户的使用。
3.3.1 大林算法编程
首先根据所画的界面图可知,需先得到放大倍数K,时间常数T,仿真时间Tf 和采样周期Tm的输入值,所以这里就用到get()和str2double()两条语句,具体程序如下:
a=get(handles.edit1,'String'); /得到handles.edit1的数值;
Tf=str2double(a); /把值赋给Tf;
b=get(handles.edit2,'String');
Tm=str2double(b);
c=get(handles.edit5,'String');
K=str2double(c);
d=get(handles.edit4,'String');
Ti=str2double(d);
接下来就是设计任务给定的控制温度,及时间周期,r=1000,T=10。
数学模型G(s)的表达式[A,B,C,D]=tf2ss(K,[Ti 1]),[G,H,Cd,Dd]=c2dt(A,B,C,T,60)。
然后就是根据第一章所介绍的大林算法的计算过程进行程序编译,具体如下:
a0=1/8;
a1=exp(-Tm/400)/8;
b1=exp(-Tm/400);
b2=1-exp(-Tm/400);
u1=0;u2=0;u3=0;u4=0;u5=0;u6=0;u7=0;e1=0;y=0;y1=0;t=0;x=zeros(size(G,1 ),1);
for i=1:Tf/Tm
e=r-y(end);
u=a0*e-a1*e1+b1*u1+b2*u7;
for j=1:Tm/T
x=G*x+H*u;
y=[y,Cd*x+Dd*u];
t=[t,t(end)+T];
end
u7=u6;u6=u5;u5=u4;u4=u3;u3=u2;u2=u1;u1=u;y1=y(end);
e1=e;
end
最后把编出的程序放到运行按钮的callback下,即在
function pushbutton1_Callback(hObject, eventdata, handles)
这条语句下进行编程。
完成编译,写入K=12,T=10,Tf=4000,Tm=10,运行得到图形如下:
图3-11 大林算法波形图
3.3.2 PID控制算法编程
与大林算法的步骤基本相同,只是在算法编程过程中改变了。
这里同样用到get()和str2double()两条语句,并写出G(s)的表达式和给定的控制温度及时间周期。
具体如下:
a=get(handles.edit4,'String');
K=str2double(a);
b=get(handles.edit5,'String');
T=str2double(b);
c=get(handles.edit1,'String');
kp=str2double(c);
d=get(handles.edit2,'String');
ki=str2double(d);
e=get(handles.edit3,'String');
kd=str2double(e);
ts=10;
sys=tf([K],[T,1],'inputdelay',60);
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v');
在根据第一章所介绍的PID简单控制算法进行算法的编程,得到的具体程序如下:
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
ud_1=0;
y_1=0;y_2=0;y_3=0;
error_1=0;
ei=0;
for k=1:1:400
time(k)=k*ts;
rin(k)=1000;
yout(k)=-den(2)*y_1+num(2)*u_5;
error(k)=rin(k)-yout(k);
ei=ei+error(k)*ts;
gama=0.50;
Td=kd/kp;
Ti=0.5;
c1=gama*Td/(gama*Td+ts);
c2=(Td+ts)/(gama*Td+ts);
c3=Td/(gama*Td+ts);
u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*ei;
if u(k)>=1500
u(k)=1500;
end
if u(k)<=-1500
u(k)=-1500;
end
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
error_2=error_1;
error_1=error(k);
end
同样把编出的程序放到运行按钮的callback下,即在
function pushbutton1_Callback(hObject, eventdata, handles)
这条语句下进行编程。
完成编译,写入K=1,T=400,Kp=1,Ki=0.005,Kd=0,运行得到图形如下:
图3-12 PID控制算法波形图
3.4 两种算法的比较
大林算法
适合用于没有超调或较小的超调,而对快速性要求不高的场合。
需要消除振铃现象
PID算法
PID控制多年来受到广泛的的应用,PID在解决快速性、稳态误差、超调量等问题上具有很好的应用。
PID的调整时间,动态性能都很好。
但是PID也有需要改进的地方。
改进:积分项的改进在PID控制中,积分作用是消除稳态误差,提高控制精度。
但是很多时候积分作用又会对系统的动态响应造成不良影响,是系统产生大的超调或时间震荡。
具体的改进有(1)积分项的改进有积分分离法抗积分饱和法(2)微分项的改进有不完全微分PID控制算法微分先行PID控制算法在大林算法得到的波形图中,超调量趋近于零,上升时间1000s,稳态误差趋近于零。
而在PID控制算法中,存在静差,是有差调节,对于扰动较大,且惯性也较大的系统,若采用单纯的比例调节,则很难兼顾动态和静态特性仿真结果。
说明采用大林算法可显著减小超调,也可做到很小的稳态误差。
从系统设计中我们可以看出,大林算法的输出不仅是以偏差为依据的,还和前N次的输出有关,但所起的作用不尽相同。
大林算法由于参考了历史输出情况,且滞后越大,参考时间越长,因此能更有效的抑制超调。
可见大林算法的适应能力很强,跟踪速度比较快,是具有较大滞后对象的一种较理想的控制算法。
第四章总结
本文首先从电阻炉在当今社会的生产和发展,进而介绍其控制系统的优缺点,导出大林算法和PID控制器及其算法。
从而引出我们对这两种控制算法的理解和仿真具有重大意义,介绍了这两种控制技术的发展历史和研究进展。
进而提出什么是大林算法,什么是PID控制算法、控制算法的基本结构。
通过网上资料找到了大林算法的定义及由来,找到普通PID控制算法。
在学习的基础上,自定义了自由导入参数来查看其波形图。
并进行了在同参数的情况下,对大林算法和PID控制器算法进行对比。
本次课程设计的控制方法知识规则的推理都大部分借助计算机程序,因此对这种控制器的开发需要有比较专业的计算机语言,在这里用到的MATLAB语言以及所属的Simulink仿真控件。
在整个设计过程中,使我对所学知识进行了一个比较大的综合巩固,让我学会了各种查阅资料以及整理所需材料的能力,通过这次的课题设计,也让我学习到了不少新知识,在几个星期的学习实践中学到的东西比以往学到的都要丰富,因为我不仅学到了一些新的专业知识还锻炼了自己解决问题的能力,这是不可多得的。
但是,在设计过程中我也遇到了不少困难,感觉自己对所学专业知识的欠缺,让自己增加了紧迫感,要抓紧弥补自己的欠缺,学无止境,这也让我体会到了不管以后走上什么样的工作岗位,都不要抛弃自己的学习,不进则退,别人的进步自己的停滞不前终将导致自己的被淘汰,这是我在整个课题设计过程中最大的体会。
致谢
在这里我要感谢杨国亮老师的辛苦指导,我成功完成本次课程设计虽然主要是来自于网络的帮助,但是杨老师的指导却是不可缺少的。
开始拿到课程题目,我根本就无从下手,是杨老师在黑板上给我们讲解题目的含义,并给出了我们所要完成的一步步的要求。
我也要感谢我的团队组员,是他们和我一步步的完成。
从一开始的计算,虽然算了好几次都是不正确的,但是我们并没有灰心,一直在继续的努力着。
这个组员算错了,换下一位组员继续去算,每一个都有自己的算法思路。
最后,总结大家的想法,黄天不负有心人,我们成功的完成了。
本次课程设计,我组主要采取分工合作,每一位组员都有自己的任务。
有的负责大林算法的计算,有的负责去编辑大林算法的程序,有的负责simusink的设计,有的……
最后,祝杨老师身体健康,同学们的课程设计都能圆满的成功。
参考文献
【1】、刘金锟•先进PID控制及其MA TLAB仿真•电子工业出版社,2009。
【2】、郝丽娜•计算机仿真技术及CAD•高等教育出版社,2009。
【3】、吴寿松•自动控制原理•科学出版社,2007。
【4】、杨琳娟等•大林算法在炉温控制中的应用•仪器仪表学报,2005。
附录
1、大林算法程序
a=get(handles.edit1,'String');
Tf=str2double(a);
b=get(handles.edit2,'String');
Tm=str2double(b);
c=get(handles.edit5,'String');
K=str2double(c);
d=get(handles.edit4,'String');
Ti=str2double(d);
r=1000;
T=10;
[A,B,C,D]=tf2ss(K,[Ti 1])
[G,H,Cd,Dd]=c2dt(A,B,C,T,60)
a0=1/8;
a1=exp(-Tm/400)/8;
b1=exp(-Tm/400);
b2=1-exp(-Tm/400);
u1=0;u2=0;u3=0;u4=0;u5=0;u6=0;u7=0;e1=0;y=0;y1=0;t=0;x=zeros(size(G,1 ),1);
for i=1:Tf/Tm
e=r-y(end);
u=a0*e-a1*e1+b1*u1+b2*u7;
for j=1:Tm/T
x=G*x+H*u;
y=[y,Cd*x+Dd*u];
t=[t,t(end)+T];
end
u7=u6;u6=u5;u5=u4;u4=u3;u3=u2;u2=u1;u1=u;y1=y(end);
e1=e;
end
plot(t,y)
2、PID控制器算法程序
a=get(handles.edit4,'String');
K=str2double(a);
b=get(handles.edit5,'String');
T=str2double(b);
c=get(handles.edit1,'String');
kp=str2double(c);
d=get(handles.edit2,'String');
ki=str2double(d);
e=get(handles.edit3,'String');
kd=str2double(e);
ts=10;
sys=tf([K],[T,1],'inputdelay',60);
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v');
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
ud_1=0;
y_1=0;y_2=0;y_3=0;
error_1=0;
ei=0;
for k=1:1:400
time(k)=k*ts;
rin(k)=1000;
yout(k)=-den(2)*y_1+num(2)*u_5;
error(k)=rin(k)-yout(k);
ei=ei+error(k)*ts;
gama=0.50;
Td=kd/kp;
Ti=0.5;
c1=gama*Td/(gama*Td+ts);
c2=(Td+ts)/(gama*Td+ts);
c3=Td/(gama*Td+ts);
u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*ei; if u(k)>=1500
u(k)=1500;
end
if u(k)<=-1500
u(k)=-1500;
end
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
error_2=error_1;
error_1=error(k);
end
plot(time,rin,'r',time,yout,'b');
xlabel('time(s)');ylabel('rin,yout');。