自动控制原理分享报告——仿真步骤

  • PID模型
  • 原理展示
  • simulink展示
  • 模糊控制模型
  • 原理展示
  • 仿真演示



 

PID模型

原理展示

simulink展示

局部模糊自适应PI控制java代码_html


局部模糊自适应PI控制java代码_matlab_02

模糊控制模型

原理展示

本伺服电机跟踪系统的总体结构框图如下图所示,我们可以看到输入模糊逻辑控制器的输入语言量选择偏差 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。

局部模糊自适应PI控制java代码_bc_03

仿真演示

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

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

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

首先我们要确定描述输入输出变量语言值的模糊子集,并设置输入输出变量的论域,然后我们为模糊语言变量选取相应的隶属度函数。

在模糊控制工具箱中,我们在Member Function Edit中即可完成这些步骤。首先我们打开Member Function Edit窗口.如下图所示:

局部模糊自适应PI控制java代码_输入输出_04


按照原理中给出的参数进行设计:

将范围设到[-3,3],隶属函数添加到7

局部模糊自适应PI控制java代码_matlab_05


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

局部模糊自适应PI控制java代码_html_06


根据控制规则表,各参数之间的调节规则可以

写成条件语句的形式,如下:

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”,即可进行规则的添加,依照上述规则,添加完成后,如下

局部模糊自适应PI控制java代码_matlab_07


将其导出 fis文件的保存

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

正常导出

局部模糊自适应PI控制java代码_matlab_08


读取结果:

局部模糊自适应PI控制java代码_matlab_09


运行报错:

局部模糊自适应PI控制java代码_bc_10


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

应该如下:

局部模糊自适应PI控制java代码_bc_11


进行如下设置,

局部模糊自适应PI控制java代码_输入输出_12

建立simulink模型,如下图:

局部模糊自适应PI控制java代码_matlab_13


导入。

局部模糊自适应PI控制java代码_bc_14

局部模糊自适应PI控制java代码_html_15


运行报错,原因是模型的输入输出参数不对应,但不知道为什么。

卡到这里,目前搜到的结果
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控制模块。

结合这篇参考,我们加入了PID控制模块,参数选外部参数

局部模糊自适应PI控制java代码_输入输出_16


最终图:

局部模糊自适应PI控制java代码_输入输出_17


结果图:

局部模糊自适应PI控制java代码_bc_18