【Simulink教程案例2】基于Simulink的模糊控制器设计与实现

欢迎订阅《FPGA/MATLAB/SIMULINK系列教程》

目录

1.软件版本

2.模糊控制器理论详细介绍

3.基于Simulink的模糊控制器设计

3.1模糊规则的建立

3.2模糊控制器simulink建模

第一:导入模糊文件

第二:模糊控制器的输入输出

第三:通过模糊控制器修正pid的控制参数

第四: 闭环

4.基于Simulink的模糊控制器仿真与分析

5.每课一个小技巧学习——通过matlab将数据导入到simulink

本课程学习成果预览


1.软件版本

matlab2021a

2.模糊控制器理论详细介绍

         所谓模糊控制技术是指通过模糊集合和模糊逻辑等原理,并且和经典的控制理论相结合,并通过模拟人类的思考方式,对一些难以建模的控制对象进行控制的一种控制策略。模糊控制器的模糊规则的制定是建立在专家经验的基础之上的,即通过具有丰富经验的专家对控制对象进行分析,并基于个人经验建立一套合理的控制机制,通过参数化的方式将这些经验用具体的数学参数和公式进行建模,从而得到一个符合实际情况的控制。这种控制策略通过使用专家经验知识,将专家的经验转换为控制方式,对过程复杂、模型不精确的控制系统进行有效的控制。这种将个人的经验转换为具体的数学公式,并通过模糊数学理论将其转换为模糊控制的过程,就是模糊控制理论。通常情况下,模糊控制器的基本结构如图所示。

       从图的模糊控制器的基本结构图可知,模糊控制器的核心部分包括控制变量计算,模糊量化处理,模糊控制规则,模糊决策以及逆模糊化处理五个模块。整个控制系统通过计算机编程来实现的,将模糊控制器的反馈输出信号和参考输入信号的误差作为整个模糊控制器的输入控制信号,将误差信号转换为模糊量,并通过模糊语言来表示,从而得到的模糊语言集合的一个子集e,然后由子集e和模糊控制规则R,然后根据模糊推理的合成规则进行模糊决策,得到模糊控制量u,u的关系。

     在一个完整的模糊控制系统中,通过根据输入控制器的个数,将模糊控制器划分为一维模糊控制器,二维模糊控制器以及多维模糊控制器,即通过模糊控制器的输入个数定位模糊控制器的维度,图2所示的是不同输入格式的模糊控制器结构图.

      模糊控制器的语言等级,从负最大到正最大依次为:NB负大、NM负中、NS负小、ZO零、PS正小、PM正中、PB正大。选取模糊语言输入变量EEc和输出变量、的模糊值域分别为{NB,NM,NS,ZO,PS,PM,PB}。

3.基于Simulink的模糊控制器设计

3.1模糊规则的建立

      模糊规则是指根据人的直觉思维推理,依据系统输出的误差及误差的变化趋势来消除系统误差的控制规则,它是由专家或者经验人员总结出来的。控制规则的基本形式为

        建立模糊控制规则表的基本原则是:当误差大或较大时,选取控制量以尽快消除误差为主;而当误差较小时,选取控制量要注意防止超调,以系统的稳定性为主要出发点。误差为正时与误差为负时相类同,相应的符号都要变化。控制语句可描述为:

 我们这里建立如下的模糊规则表:

编号

E

EC

KP

KI

KD

01

NB

NB

PB

NB

PS

02

NB

NM

PB

NB

NS

03

NB

NS

PM

NM

NB

04

NB

ZO

PM

NM

NB

05

NB

PS

PS

NS

NB

06

NB

PM

ZO

ZO

NM

07

NB

PB

ZO

ZO

PS

08

NM

NB

PB

NB

PS

09

NM

NM

PB

NB

NS

10

NM

NS

PM

NM

NB

11

NM

ZO

PS

NS

NM

12

NM

PS

PS

NS

NM

13

NM

PM

ZO

ZO

NS

14

NM

PB

NS

ZO

ZO

15

NS

NB

PM

NB

ZO

16

NS

NM

PM

NM

NS

17

NS

NS

PM

NS

NM

18

NS

ZO

PS

NS

NM

19

NS

PS

ZO

ZO

NS

20

NS

PM

NS

PS

NS

21

NS

PB

NS

PS

ZO

22

ZO

NB

PM

NM

ZO

23

ZO

NM

PM

NM

NS

24

ZO

NS

PS

NS

NS

25

ZO

ZO

ZO

ZO

NS

26

ZO

PS

NS

PS

NS

27

ZO

PM

NM

PM

NS

28

ZO

PB

NM

PM

ZO

29

PS

NB

PS

NM

ZO

30

PS

NM

PS

NS

ZO

31

PS

NS

ZO

ZO

ZO

32

PS

ZO

NS

PS

ZO

33

PS

PS

NS

PS

ZO

34

PS

PM

NM

PM

ZO

35

PS

PB

NM

PB

ZO

36

PM

NB

PS

ZO

PB

37

PM

NM

ZO

ZO

NS

38

PM

NS

NS

PS

PS

39

PM

ZO

NM

PM

PS

40

PM

PS

NM

PM

PS

41

PM

PM

NM

PB

PS

42

PM

PB

NB

PB

PB

43

PB

NB

ZO

ZO

PB

44

PB

NM

ZO

ZO

PM

45

PB

NS

NM

PS

PM

46

PB

ZO

NM

PM

PM

47

PB

PS

NM

PM

PS

48

PB

PM

NB

PB

PS

49

PB

PB

NB

PB

PB

首先在matlab的指令窗口输入指令:

     在MATLAB中,使用模糊函数编辑工具设计上述讲述的模糊模糊集和隶属函数。                        

      在图的模糊控制器工具箱设计界面,根据模糊隶属函数的选择原则,系统中的NB和PB采用正态型分布;NM、NS、20、Ps、PM则采用三角形分布,模糊控制器输入输出参数的隶属度函数图。模糊编辑器效果如下:

双击E,Ec,Kp,Ki,Kd,其各个参数如下:

 

 

 

 

 

然后输入模糊规则,双击红色箭头这里:

 按上述的模糊规则表格依次输入:

如上图所示,依次点击E,Ec,Kp,Ki,Kd对应的模糊规则,然后点击add rule,就可以生成一个模糊规则。全部完成之后。我们将模糊文件进行保存:

保存后如下:

3.2模糊控制器simulink建模

在simulink中,我们在上个课程所设计的PID控制器基础之上,将如下的模块拖到设计界面中:

 如上图所示,我们输入fuzzy,然后点击搜索,就可以找到模糊控制器模块。将该模块拖入到设计界面上,然后进行建模:

下面我们来对这个模型的建模过程进行介绍:

第一:导入模糊文件

编写如下的matlab文件,通过readfis函数读取fis模糊文件。

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));

patient   = readfis('files.fis');

运行这段代码之后,我们可以看到在matlab的workspace中有如下的变量:

然后在simulink中双击:

FIS这里填写刚才运行的模糊文件的变量名字

Refresh rate可以设置为1s。因为模糊控制运行非常慢,设置1s,则可以加快运算速度。这个可以根据电脑的性能配置,自行修改。 

第二:模糊控制器的输入输出

选择mux和demux。

 

可以看到,模糊控制器的输入,我们在第二路中加入了一个微分,那么就可以实现输入模糊控制器模块的E和Ec两个变量。

在模糊控制器的输出,通过demux,设置为3三路,分别对应的是kp,ki,kd调整变量。 

第三:通过模糊控制器修正pid的控制参数

将模糊控制器的输出,和上一个课程中介绍的PID控制器的系数相加,将相加后的系数作为最终的控制器参数。

第四: 闭环

 

我们可以看到,将得到的三个参数,当做PID的三个系数,然后相加作用到控制对象上,并闭环。 

4.基于Simulink的模糊控制器仿真与分析

运行simulink,我们可以在Scope中显示PID控制器的输出,其仿真波形如下图所示:

第一个是三个控制系数的模糊控制器调整过程

第二个是控制的输出。

由于,这里我们并没有设置非常好的模糊规则,所以控制器的效果相对于上一个课程的PID控制器,略微有所提升。我们可以放大第二个图:

其超调量小于1.08.而上一个课程的PID控制器的超调量大于1.08.所以性能略微有提高。 

当然在实际设计过程中,需要严格分析模糊规则的制定,从而有效提高控制器的控制效果。

       注意,在运行过程中,模糊控制器会弹出模糊规则的动态变化过程,我们直接将这个关闭,就可以加快仿真速度。

5.每课一个小技巧学习——通过matlab将数据导入到simulink

这个课程中,除了模糊控制器的设计学习之外,我们通过matlab指令

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));

patient   = readfis('files.fis');

      将simulink以外的变量,导入到了simulink中,这个技巧在simulink设计中经常会被用到,需要牢记。

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值