第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/25 15:37:03 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

可以设定这个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=newfis(’fuzzpid’); 建立一个新的FIS,取名fuzzpid。 escale=1;

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

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

a=addmf(a,’input’,1,’NS’,’trimf’,[-3*escale,-1*escale,1*escale]); a=addmf(a,’input’,1,’Z’,’trimf’,[-2*escale,0,2*escale]); a=addmf(a,’input’,1,’PS’,’trimf’,[-1*escale,1*escale,3*escale]); a=addmf(a,’input’,1,’PM’,’trimf’,[0,2*escale,3*escale]); a=addmf(a,’input’,1,’PB’,’smf’,[1*escale,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 (kp is PB)and (ki is NB) and (kd 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控制中的微分 环节的输出ud = (Kd0 + ?kd) × ec,而在这个系统模型中,ud = Kd0 × ec + ?kd × 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的初始值,那初始值的设定就没什么意义了。

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

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

4.5

关于动词PID控制Simulink仿真的一点说明

模糊控制理论已经问世数十年,在Matlab中已经集成了模糊判决器的模型,可以对模糊判 决器进行修改,嵌入到Simulink模型编辑器中,进行模糊控制的仿真。动词PID控制器目前还未大面积推广,Matlab中没有相应的集成模块,因此没有进行动词PID控制的Simulink仿真。 动词PID控制并不是无法用Simulink进行仿真,只是难度比较高,工作量比较大,本人没有进行研究,这里

毕业论文 基于matlab的智能PID控制器的设计与仿真.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c04r3q09f6y83uyx977ah_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top