黄工无刷电机学习
直播中

萧蔼晨

7年用户 975经验值
私信 关注
[问答]

萌新求助,关于模糊PID控制仿真步骤是怎样的?

萌新求助,关于模糊PID控制仿真步骤是怎样的?

回帖(1)

余姗姗

2021-10-13 11:54:39
PID模型

原理展示

simulink展示











模糊控制模型

原理展示

本伺服电机跟踪系统的总体结构框图如下图所示,我们可以看到输入模糊逻辑控制器的输入语言量选择偏差 e 和偏差率 ec ,输出语言变量为 ∆Kp、∆Ki、∆Kd ,构造一个双输入三输出的模糊控制器,语言变量的模糊集合为{NB,NM,NS,0,PS,PM,PB},由 7 个模糊值将集合划分开,分别对应负大、负中、负小、零、正小、正中、正大。 e、ec、∆Kp 、∆Ki 和 ∆Kd 的量化论域范围都取为{-3,-2,-1,0,1,2,3}。量化因子 Ke=3/emax,Kec=3/ecmax,缩放因子:Kp=3/pmax,Ki=3/imax,Kd=3/dmax。





仿真演示



  • Matlab命令窗输入 fuzzy ,弹出如下窗口:





    我们可以选择增加输入(Add Variable)来实现双入单出控制结构。如图:





    输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊集合。

首先我们要确定描述输入输出变量语言值的模糊子集,并设置输入输出变量的论域,然后我们为模糊语言变量选取相应的隶属度函数。
在模糊控制工具箱中,我们在Member Function Edit中即可完成这些步骤。首先我们打开Member Function Edit窗口.如下图所示:





按照原理中给出的参数进行设计:
将范围设到[-3,3],隶属函数添加到7





然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。最终结果如下图:





根据控制规则表,各参数之间的调节规则可以
写成条件语句的形式,如下:
If e is Ai,and ec is Bi,Then k_p is Ci,and k_i isDi,and k_d is Ei
  在FIS Editor菜单栏下的Edit中打开“Rules”,即可进行规则的添加,依照上述规则,添加完成后,如下





将其导出 fis文件的保存
这一步有坑,需要注意因为,一般大家保存文件都是,把文件保存在某个文件夹里面,这无可厚非,绝大多数情况也是这样的。包括在一般的matlab编程中,保存文件也是保存在matlab可以“识别”的空间里面,即我们的.m所在的文件中。然而,对于这个模糊控制器fis文件,更加要注意的是需要”To Workspace” 而不是“To file”(大多数情况我们存matlab文件是“To file”)。我之前也一直是这么保存、打开fis文件。然而,在下面的第三步中“基于Matlab的Simulink Library 的控制器”,需要用到fis逻辑,并且在命令窗口也能够把这个fis文件读入(或者也叫加载吧,但是命令是 readfis)也没问题,不报错。然而,就算在编译仿真的时候老是通过不了,主要 错误就是找不到那个fis文件(“未定义函数或变量”),然而在命令窗口是明明可以读取的。如下图所示:
正常导出





读取结果:





运行报错:





刚开始,实在找不出问题,就去百度,也有几个人遇到此问题,不是沉贴多年的僵尸贴就是随便顶的。不过,有一个用户提到过 存储的路径问题,也就是存储到Workspace还是File的。这里的是workSpace,一定要注意
应该如下:





进行如下设置,





建立simulink模型,如下图:





导入。










运行报错,原因是模型的输入输出参数不对应,但不知道为什么。
卡到这里,目前搜到的结果
https://ww2.mathworks.cn/matlabcentral/answers/128865-invalid-setting-for-input-port-dimensions-of-induction-demux-the-dimensions-are-being-set-to-1-t
https://zhidao.baidu.com/question/80136039.html
错误问题分析:论文的仿真的传函不正确,根据刚刚模糊原理的讲解,应该加入一个PID控制模块。
https://blog.csdn.net/m0_37763336/article/details/89325795 结合这篇参考,我们加入了PID控制模块,参数选外部参数





最终图:




结果图:


举报

更多回帖

发帖
×
20
完善资料,
赚取积分