文档库 最新最全的文档下载
当前位置:文档库 › 022525_毕业论文基于matlab的智能PID控制器的设计与仿真

022525_毕业论文基于matlab的智能PID控制器的设计与仿真

引言

PID控制器以其结构简单、稳定性好、工作可靠、调整方便等优点被广泛应用于工业控制系统,但现代工业控制系统越来越复杂,被控对象往往表现出时滞、非线性、时变性,控制要求越来越高,传统的PID控制器难以满足现代工业控制的需求,智能型PID控制器呈现出广阔的发展空间。模糊PID控制器是模糊控制器和PID控制器的有效结合,它兼具模糊控制和PID控制的优点;动词PID控制器是在模糊PID控制器的基础上实现了控制规则“动词化”,对模糊PID控制进行了一些改进。目前动词PID控制器用于实际的工业控制系统还不多,本文的研究也仅处于软件仿真阶段。

1. PID 控制器

1.1 PID 控制器的概念[1] 1.1.1 PID 控制原理

PID 控制器是一种线性闭环控制器,它根据给定输入值r in (t )与实际输出值y out (t )构成控制偏差

()()()error t rin t yout t =- (1.1)

PID 的控制信号u(t)由errot(t)及其对时间的积分、微分三部分联合作用产生:

010

()1()(()())()

(()()t

D p t

p i d

T derrot t u t k error t errot t dt T dt

derrot t k error t k errot t dt k dt

=+

+=++?? (1.2)

PID 控制器最终理想的控制效果是errot(t)=0,即y out (t ) = r in (t )。将控制器写成传递函数的形式:

()11

()(1)()p D p i d I U s G s k T s k k k s E s T s s =

=++=++

(1.3)

式中,k p ――比例系数,T I ――积分时间常数,T D ――微分时间常数;统一用

比例系数表 示,k i 为积分比例系数,k d 为微分比例系数:

,p i d p D

I

k k k k T T =

=

1.1.2

PID 三个环节的作用

比例、微分、积分各个环节的作用: (1)k p :减小系统的误差,加快系统的响应速度。 (2)k i :消除系统的静态误差,决定积分作用的强弱。

(3)k d :抵制偏差信号的变化趋势,对偏差进行提前预报,减少调节时间。

1.2 PID 控制器的种类

PID 控制器有传统PID 控制器、模糊PID 控制器、专家PID 控制器、以及动词PID 控制器等几类。

1.2.1 传统PID 控制器

PID 控 制 器 的 参 数 整 定 是 控 制 系 统 设 计 的 核 心。图1.1中 的PID 控 制 器 表 示 的 就 是 传 统PID 控制器,其k p 、k i 、k d 三个参数在控制过程中不会自动发生变化,操作人员只能根据控制对象的特性在系统开始工作时选择最优的三个参数。但仅靠一组参数还不能满足系统的要 求,在控制过程中一般还要手动对参数进行修改,由此造成了极大的不方便。工业中实际应用 的PID 控制器不会只用传统的PID 控制策略。 1.2.2 智能PID 控制器

模糊PID 控制器、专家PID 控制器、以及动词PID 控制器都是智能PID 控制器,它们在传 统PID 控制器的基础上实现了很多改进。模糊PID 控制器和动词PID 控制器都是PID 参数自整 定型控制器;而专家PID 根据专家经验库,可能调整PID 参数,或者直接影响输出电压u 。本文 主要对模糊PID 控制器和动词PID 控制器进行研究比较,详细介绍见后面的章节。

2.模糊PID控制器

模糊PID控制器全称应该叫做“模糊参数自适应(自整定)PID控制器”。图2.1表示其系统组成。顾名思义,模糊PID控制器的三个参数是能够在线调整、实时改变的。这是模糊PID控制器在传统PID控制器的基础上实现的重大改进。

2.1 模糊控制规则[1]

2.1.1 控制原理

自适应控制应用现代控制理论,以对象特性为基础,在线辨识对象特征参数,实时改变控制策略。在控制过程中各种信号量不易定量表示,因此需要模糊理论来解决问题。自适应模糊PID控制器以误差e和误差变化ec作为输入,找到输出的三个PID参数与e和ec之间的模糊关系。在运行中不断检测e和ec,利用模糊控制规则在线对PID参数进行修改,以满足不同e和ec对控制参数的不同要求,而使被控对象有良好的动、静态性能。

2.1.2 模糊规则

误差e、误差变化率ec,以及?K 的模糊子集均为{NB,NM,NS,ZO,PS,PM,PB},分别代表{负大、负中、负小、零、正小、正中、正大}。模糊控制规则具有如下形式:

If (e is NB) and (ec is NB) then (k p is PB)and (k i is NB) and (k d is PS)。

由于e和ec都有7个子集元素,总共有49种自由组合,因此模糊控制总共有49条这样形式的规则。k p 、k i 、k d三个参数整定的模糊控制规则表如表2.1。

k p的模糊控制规则表

?K p

ec

NB NM NS ZO PS PM PB

e NB ZO ZO NM NM NM NB NB NM PS ZO NS NM NM NM NB NS PS PS ZO NS NS NM NM ZO PM PM PS ZO NS NM NM PS PM PM PM PS ZO NS NS PM PB PB PM PS PS ZO NS PB PB PB PM PM PS ZO ZO

k i的模糊控制规则表

?K i

ec

NB NM NS ZO PS PM PB

e NB NB NB NM NM NS ZO ZO NM NB NB NM NS NS ZO ZO NS NB NM NS NS ZO PS PS ZO NM NM NS ZO PS PM PM PS NM NS ZO PS PS PM PB PM ZO ZO PS PS PM PB PB PB ZO ZO PS PM PM PB PB

k d的模糊控制规则表

?K d

ec

NB NM NS ZO PS PM PB

e NB PB PM PM PM PS PS PB NM PB NS PS PS PS PS PB NS ZO ZO ZO ZO ZO ZO ZO ZO ZO NS NS NS NS NS ZO PS ZO NS NM NM NS NS ZO PM PS NS NB NM NM NS ZO PB PS NS NB NB NB NM PS 表2.1:模糊控制规则表

2.2 模糊控制规则的实现

2.2.1 隶属度[1]

在模糊控制规则表中,各个元素子集都是用字母表示的,而在控制过程中,模糊判决器的输入和输出都是一些数值,因此需要在数值和各个语言变量之间建立联系。各个语言变量都表示一定的范围,这种范围的覆盖面可以用隶属度来表示。隶属度函数有多种形状,有正态分布的,有等腰梯形的,最常用的是三角形,如图2.2所示。每个语言变量表示的范围可能有所 交叉,但除了几个特殊点,一个具体数值隶属于各个字母符号的程度是不一样的。

图2.2:隶属度

模糊合成推理根据隶属度和模糊控制规则来修正PID 参数:

p p p K K K ?+=+1

i i i K K K ?+=+1

d d d K K K ?+=+1

2.2.2 模糊推理[2]

模糊判决器读取e 和ec 的具体数值,进行模糊推理,然后输出三个K 的具体数值,有很多 算法。这里介绍一种强度转移法。所谓强度转移法,就是当控制系统有精确值输入时,精确值 在条件语句的前件中所得到的语言变量转移到后件的语言变量值去,从而得到推理结果的过 程。以k p 的推理为例。步骤为:

(1)前件强度的求取

为了简化而清晰地说明推理过程,我们假设误差e(k)及其变化率ec(k)分 别最多对应2个语言变量值,设e(k)的 两个语言变量值为A 1 、A 2,且对模糊 变量A 1 、A 2的隶属度为u A 1 (e )、u A 2 (e ),ec(k)的两个语言变量值为B 1 、B 2,且对这两个模糊变量的隶属度为u B 1 (ec )、u B 2 (ec ),控制规则如下:

if e(k) is A 1 and ec(k) is B 1 then k p is C 1 if e(k) is A 1 and ec(k) is B 2 then k p is C 2 if e(k) is A 2 and ec(k) is B 1 then k p is C 3 if e(k) is A 2 and ec(k) is B 2 then k p is C 4

从以上4条规则中,可产生出模糊推理的前件强度为:

u 1 = u A 1 (e )∧ u B 1 (ec )

u 2 = u A 1 (e ) ∧ u B 2 (ec ) u 3 = u A 2 (e ) ∧ u B 1 (ec ) u 4 = u A 2 (e ) ∧ u B 2 (ec )

(2)后件强度的求取由于在强度转移法中,是把精确值对前件的作用强度转移到

后件中去,并作为后件模糊量k p i 的隶属度,因此,依前件强度可得后件强度为:

u C1 (k p1 ) = u 1

u C2 (k p2 ) = u 2 u C3 (k p3 ) = u 3 u C4 (k p4 ) = u 4

(3) 精确值k p 的求取:

根据k p 的语言变量值和隶属度的解析表达式求出k p 1 、k p 2 、k p 3 、k p 4 。它们分别为C 1 、C 2 、C 3和C 4在隶属度为u 1 、u 2 、u 3和u 4时的推理结果元素,则利用重心法可求得:

1234

12341234

p p p p p u k u k u k u k k u u u u ?+?+?+?=

+++ (2.1)

当误差e(k)和误差变化率ec(k)具有多个语言变量值时,其推导过程与上述过程相似。 模糊推理中,在求解前件强度和后件强度时,对e ,ec 以及PID 三个参数的描述,都是用名词来表示。这些名词不能互相包含,因此模糊控制的49条规则各不相同,缺一不可。

4 用Simulink 进行PID 控制仿真

4.1

炉温控制简介

4.1.1 背景

随着工业的快速发展,钢铁的需求量越来越大。而对于生产钢铁的最重要的一环——高炉——的要求也越来越高。

在钢铁的冶炼的过程中,越来越多地使用交流电弧炉设备,温度控制系统的性能直接影响到钢铁的质量,所以炉温控制占据重要的位置。PID 控制是温度控制系统中一种典型的控制方式,是在温度控制中应用最广泛、最基本的一种控制方式。随着科学技术的发展,各行各业对温度控制精度的要求越来越高,经典PID 在某些场合已经不能满足要求。因此,智能PID 控制的引入时精密温度控制系统的发展趋势。为了改善电弧炉系统恒温控制质量的现状,研制具有快速响应的、经济性好的、适合国情的恒温控制装置具有十分重要的意义。

4.1.2 系统函数

高炉温度控制系统具有非线性、时变性、滞后性等特性。根据实际测量,被控对象近似一阶惯性加滞后模型:

s

e s s G 2088331623.0)(-=

(4.1)

4.2

Simulink 简介[3]

Simulink 是个交互式动态系统建模、仿真和分析图形环境,是一

个进行基于模型的嵌入 式系统开发的基础开发环境。Simulink 可以

针对控制系统等进行系统建模、仿真、分析等工 作。Simulink 提供了一个建立控制系统方框图,并对系统进行模拟仿真的环境。在Mablab6.5的命令主窗口中单击File →New →Model ,即可打开如图 4.1所示的Simulink 模型编辑窗口。在Simulink 模型编辑窗口中单击View →Library browser ,即可打开如图4.2所示 的Simulink 库浏览窗口。

根据控制系统的结构,用户可以从模型库中选择所需要的各种模块,按要求连接、修改各 模块的参数,建立系统模型。

图4.1:simulink模型编辑窗口

图4.2:simulink库浏览器

4.3 传统PID控制Simulink仿真

4.3.1 建立系统模型

在模型库中,从Simulink库Continuous子库中选择Derivative、I ntegrator、

T ransfer Fcn、Transport Delay模块,从Math Operations子库中选择Gain、Sum模块,Sinks子库中选择Scope,Sources子库中选择Step,放到模型编辑窗口。各个模块的属性都可通过双击该模块进行更改。按图4.1更改各模块属性,连线,就建立了一个传统PID控制系统模型。其中Step阶跃信号幅值为1,T ransport Delay为208秒。

在模型编辑器中选择“start simulink”,就可以开始进行仿真。仿真波形可以

双击scope进行观察。

4.3.2 调试过程及结果

参数整定过程:

(1)令ki和kd为0,调整kp。若kp太小,则控制结果无法向原定的控制目标靠近,kp增大,响应曲线开始出现振荡。如果振荡的振幅呈增大趋势,系统将无法达到稳定。所以应该调整kp,使响应看起来是一条振幅越来越小的曲线。

(2)观察振荡趋向的平衡位置,ki为0时,一般会存在静态误差。ki从0开始增大,调整ki,使响应曲线保持在控制目标上下振荡。由于ki也加强了控制作用,所以kp应该基于第(1)步调出的值再往小调。一般通过合适的ki把振荡的平衡位置修正之后,不必再调ki了。

(3)调整kd。kd能抑制响应曲线上下振荡的振幅,但kd过大,反而降

低响应速度。最后对kp和ki进行联合微调。

对式4.1所示的加热电源的温度的传统PID控制进行参数调整,我调整

得效果最好的一组参数已标在图4.1中,即k p=18,k i=0.015,k d=1000。温度变

化波形如图4.3。大约3000秒控制达到稳定,超调量30%。

Simulink的Scope中的响应曲线原本是黑色背景,黄色曲线。为了便于浏览,本人做了一些反色的处理,后面的图4.5也进行了同样的处理,不再重复说明。

图4.3:传统PID仿真

4.4 模糊PID控制Simulink仿真

4.4.1 在Matlab中建立模糊判决器

4.4.1.1 用FIS Editor建立模糊判决器[3]

在Matlab主窗口中输入fuzzy,弹出FIS Editor,这是一个新建的空白的FIS,如图2.3所示。解模糊算法默认是Mamdani法,如果要改变算法,Matlab提供

的另一种算法为Sugeno。在新建FIS时,点击FileNew FISSugeno即可。

图2.3:FIS Editor

点击EditAdd variableinput(或output),添加判决器的输入和输出,我们使用的模糊PID判决器是2个输入3个输出。把这5个变量(variable)的名字(Name)改成e、ec、kp、ki和kd。双击任一个variable ,弹出Membership Function Editor,可以设定这个variable 的取值范围(range)。如图2.4所示。新建的variable默认只有3个子集,在Membership Function Editor中点击EditAdd MFs ,添加子集,加到7个。按照模糊隶属度设定每个子集的名字(Name)、形状(Type)和覆盖范围(Params)。

添加规则:在FIS Editor中点击EditRules,弹出Rule Editor。如图2.5所示。

新建的模糊判决器有0条规则,按照模糊控制规则表,使用Rule Editor底部的“添加规则(Add rule)”和“修改规则(Change rule)”按钮设定模糊控制的49条

规则。先添加条数,再按规则修改。最后将该FIS保存,在FIS Editor中点击FileExportTo Disk,保存为fuzzpid.?s 。

图2.4:Membership Function Editor

图2.5:Rule Editor

4.4.1.2 用Matlab程序生成模糊判决器[1]

用Matlab程序语言也能生成和上一节一模一样的fuzzpid.fis。a=ne wfis(’fuzzpid’);建立一个新的FIS,取名fuzzpid。

escale=1;

a=addvar(a,’input’,’e’,[-3*escale,3*escale]);添加variable

a=addmf(a,’input’,1,’NB’,’zm f’,[-3*escale,-1*escale]);本行往下共7行分别添加MFs a=addmf(a,’input’,1,’NM’,’t rimf’,[-3*escale,-2*escale,0]);

a=addmf(a,’input’,1,’NS’,’t rimf’,[-3*escale,-1*escale,1*escale]);

a=addmf(a,’input’,1,’Z’,’t rimf’,[-2*escale,0,2*escale]);

a=addmf(a,’input’,1,’PS’,’t rimf’,[-1*escale,1*escale,3*escale]);

a=addmf(a,’input’,1,’PM’,’t rimf’,[0,2*escal e,3*escale]);

a=addmf(a,’input’,1,’PB’,’smf’,[1*escal e,3*escale]);

这几行代码添加了e这个variable,作为input,range为[-3,3],e有7个子集,Name、Type和Params各不相同。ec、kp、ki、kd的添加方式完全类似,只需更改scale和input(output),“addmf(a,’input’,1??”中的“1”依次改为2、3、4、5。个人感觉这样子生成FIS比用FIS Edit还快。FIS Edit虽然有友好的用户界面,但每个variable、每个mfs、49条规则都要一一输入;而上述程序具有通用性,比如e的range变为[-30,30],只需要将escale赋值为10即可。ec、kp、ki、kd的scale的更改完全类似。

rulelist=

[1 1 7 1 5 1 1;

1 2 7 1 3 1 1;

。。。。。

。。。。。

7 6 1 7 5 1 1;

7 7 1 7 7 1 1];

(↑总共49行)

a=addrule(a,rulelist);

这几十行代码实现49条模糊控制规则的添加。每一行代表一条规则,由前5个数字来完成对规则的描述。数值1~7按顺序代表从NB到PB7个子集,5个数字的位置对应e、ec、kp、ki、kd。比如,第一行前5个数字为:1-1-7-1-5,代表NB-NB-PB-NB-PS,其对应的模糊规则为:

If (e is NB) and (ec is NB) then (k p is PB)and (k i is NB) and (k d is PS)。

这个rulelist可以完全按照模糊控制规则,用数字代表7个字母符号列出来的。这个rulelist也是通用的。

a=setfis(a,’DefuzzMethod’,’mom’);解模糊的算法设定为Mandani,也可以改为Sugeno。

writefis(a,’fuzzpid’);

a=readfis(’fuzzpid’);

这样子就生成了一个和上一小节完全一模一样的fuzzpid.fis。

4.4.1.3 模糊判决器的使用

这个模糊判决模块,可以作为一个模块嵌入到Simulink模型编辑窗口当中,在本章中可以看到其用法。这个模块还能被Matlab编程语言调用,在第5章用Matlab程序进行模糊PID控制仿真的时候会用到。

4.4.2 建立系统模型

模糊PID控制系统最核心的部分是模糊判决器,这个判决器可以作为一个模块放入到simulink模型编辑器中,在Matlable主窗口中输入fuzzy,弹出FIS Editor,点击File→Export→To Workspace,把这个判决器添加到工作空间。然后在simulink模型编辑器中,按图4.4从库中选择模块,更改参数,连线,这样建立起模糊PID控制系统模型。从图中可以清楚地看出模糊控制对P、I、D三个参数的调整作用。比如PID控制中的微分环节的输出u d = (K d0 + ?k d) × ec,而在这个系统模型中,u d = K d0 × ec + ?k d × ec,与PID控制理论是一致的。

图4.4:模糊PID控制系统模型

图4.5:模糊PID仿真结果

4.4.2 调试

模糊PID 控制需要调整的参数包括PID 三个初始值,以及模糊判决器2个输入3个输出的论 域。传统PID 调出的三个参数对模糊PID 的三个初始参数有一定的参考价值。

仿真的控制目标是1,故设置e 和ec 的论域均为[-1.5,1.5];模糊判决器的输出是?K ,是对 三个初始参数进行调整,所以?K 的论域大小应该与对应的K 数量级相当或较小。如果?K 论域数量级明显超过对应的K 的初始值,那初始值的设定就没什么意义了。

设置?k p 论域为[-0.15,0.15],?k i 论域为[-0.003,0.003],?k d 论域为[-500,500]。 每次改变论域,模糊判决器就发生改变。在Matlab6.5中进行仿真时,每次都必须在FISEditor 中重新打开这个模糊判决器,重新将其导入工作空间,Simulink 才能使用最新修改的模糊判决器来进行仿真。

这个系统的模糊PID 控制的仿真结果,没有实现对传统PID 控制的改进。本人尝试着对三个PID 初始参数以及5个论域进行调整,但能得到的最佳组合就是上述的数值。按上述数值得到的仿真曲线与传统PID 控制相比,超调减少,但控制系统达到的稳定时间要长些,如图4.5所示。

4.6

本章小结

本章简要介绍电弧炉炉温控制系统以及Simulink 仿真软件。用Simulink 对该炉温进行传统PID 和模糊PID 控制的仿真,由于动词PID 推理模块嵌入到Simulink 中工作量比较大,本章没有对其进行仿真,只是提出了一些解决思路。传统PID 和模糊PID 的仿真结果比较相似,模糊PID 没有对传统PID 控制效果进行明显的改良。

5 用Matlab 编写程序进行各种PID 控制仿真

本章用Matlab 编写程序,对控制对象进行传统PID 、模糊PID 、动词PID 控制仿真。被控对象仍然是第4章所用过的炉温控制系统。系统函数:

s

e s s G 2088331623.0)(-=

(5.1)

5.1

仿真程序流程图

三个Matlab 仿真程序的结构组成都列于图5.1。程序开始设定控制目标r ,对被控对象的输入信号u 、以及k p 、k i 、k d 三个参数进行初始化,然后进入循环。由u 作用于被控对象,对象的输出为y out ,控制误差e=r-y out ,误差变化率ec 用e 的差分表示,误差的积累用 e 表示。如果是传统PID 控制器,因为PID 三个参数不变,所以直接用加法求出新的控制信号u ,进行下一轮循环。

图5.1流程图

智能PID 控制器在求出e 和ec 之后,通过e 和ec 计算出?k p 、?k i 和?k d ,修正3个参数,然后再进行加法求出u ,进入下一个循环。 模糊PID 控制和动词PID 控制仿真程序的不同在于修正3个PID 参数的过程。模糊PID 控制 器通过查找模糊规则表,然后K=K0+?K ;而动词规则分别求出e 的动态与七个标准动词的相似度,?k 是七个输出动词在相似度上的加权平均,然后修正参数:K next = K current + ?k .

做完预设的循环次数后,每一仿真时刻的y out 、k p 、k i 、k d 都有记录下来,此时画出这四个 变量随时间变化的曲线,以供研究比较。

5.2 关键环节的算法

图5.1已经描述了仿真程序的大纲,其中一些加法、减法、乘法、累加的环节,非常容易理解。只有两个环节的算法比较复杂。一个是由e 和ec 怎样计算出?k p 、?k i 和?k d 。针对模糊和动词控制规则,有相应的计算方法,在前面已经介绍。

另外一个比较复杂的环节是:如何由控制电压u 得到输出y out 。本文仿真通过用ode45求解微分方程的方法来完成。由于选取的控制对象具有时滞,在写微分方程时要对系统函数里时滞的部分进行近似,所以用到一个 “ PAD E”指令,下面分别介绍。

5.2.1 ode45求解微分方程[7]

仿真程序中ode45的用法如下:

TSPAN = Ts*k:simuStep:Ts*(k+1); [t,x]=ode45(’dynsys’,TS PAN,x0); Ts 是采样时间,simuStep=Ts/4;k 是循环控制量,TSPAN 把两次采样的时间间隔分成5个点。’dynsys’是一个文件名,dynsys.m 文件里保存着描述被控对象特征的微分方程,这些微分方程以状态空间的形式给出,其中包含了输入u 的影响。

x ˙ = A x + Bu (5.2) x 是状态向量(列向量)。

TSPAN 是ode45解微分方程组的几个时间点,x0是第一个时间点上系统

的状态向量。这样进行ode45运算的结果,产生了5个t 和5个x 。t 是一维的,也就是5个时间点。x 的维数与系统的阶数相当。系统的输出y out 是x 的几个分量以及输入u 的线性组合。

y = C x + Du (5.3) A ,B ,C ,D 是一些矩阵。在已知系统的传递函数的情况下,在Matlab 主窗口中输入

[A,B,C,D]=tf2ss([num],[den])

即可得到这4个矩阵。[num]和[den]是系统函数的分子和分母。

5.2.2 对延时的近似处理

对无时滞的系统进行仿真时,直接用tf2ss 写出微分方程,再写进dynsys.m 文件,在主程序里循环调用ode45函数即可进行仿真。本文选用的被控对象具有208秒的延迟。 无法直接根据系统函数写出微分方程。我采用的解决方法是,先把e ?τ s 用Matlab 指令“[NUM,DEN]=P ADE(τ,N )“近似成一个N 阶的不带指数 的系统函数(N 越大近似越精确)。再和原来系统函数中非时滞的部分相乘,得到总的系统函数,然后用TF2SS 写出微分方程。

针对上面的系统,在Matlab 中输入“[NUM,DEN]=PADE (208,1)”得到

NUM=[-1 0.0096],DEN=[1 0.0096],即s e 208-用

0096

.00096

.0++-s s 代替,则:

s s s s s s s G 997.7833001558

.01623.08331623.00096.00096.0)(2++-=

?++-≈

(5.4)

5.3 传统PID控制仿真

5.3.1 调整过程及结果

仿真程序的编写遵循图5.1的上、中部分。设置PID三个参数,并进行调节。PID参数的选取,在第4.3.2小节已经提过。先令ki=0,kd=0,找到一个kp;然后ki从0开始增大,kp适当减小,ki增大到能消除静态误差就行了,不必一直调大。最后调kd,再对kp、kd进行联合调整。

调节三个参数,观察在传统PID控制下误差e的变化情况。误差e的变化如图5.2所示。当K p=80、K i=0.01、K d=800时,误差变化如图所示。

本文后面要拿智能PID控制的效果来和传统PID控制做比较,为了统一标准,智能PID控制结果都和传统PID来做对比。在响应时间差不多的情况下,看智能PID对超调和振荡的控制效果如何。在这里传统PID控制超调量为15%。

图5.2: 传统PID控制误差e变化

图5.3:传统PID仿真结果

5.3.2 关于两种不同仿真方法的说明

用编程语言仿真时得到的一组参数和用Simulink仿真时得到的一组参数有些差距。这个控制对象本身带有208秒的时滞,控制达到稳定需要几千秒的时间。程序是用循环来做的,我选取Ts=20秒,k=0~400,仿真4000秒只需要200次循环。为了减少每次仿真程序运行的时间,只能这样。而Simulink里面计算精度比较高,取样时间不同导致仿真方法调试出来的参数不同,但在数量级上是一致的。

误差刚开始是1,这是我写程序时没有采用延时的近似处理,这样更与实际情况贴合,图5.2、图5.3可以反映出实际情况

5.4 模糊PID控制仿真

5.4.1 模糊推理源代码分析

模糊PID控制,首先设置一组初始PID参数。在仿真过程中,时时检测控制误差e(k)及其变化率ec(k),保存到两个变量中。在每次循环里:e_1=e(k+1);ec_1=e(k+1)-e(k);

然后调用第2.3节建立的那个模糊判决器:

k_pid=evalfis([e_1,ec_1],a); k_pid就是模糊判决器的输出,是一个三维的列向量,这三个数就是?k p 、?k i和?k d。然后对PID三个初始的参数进行修正。

Kp=Kp0+k_pid(1); Ki=Ki0+k_pid(2); Kd=Kd0+k_pid(3);

这样就完成了参数的自整定,因为程序是循环在执行的,所以参数的整定也是循环在做的。

5.4.2 参数调整及仿真结果

图5.4:模糊PID仿真结果

图5.5:模糊PID的误差变化

相关文档
相关文档 最新文档