基于Simulink的模糊PID控制
Simulink 是一个模块图环境,用于多域仿真以及基于模型的设计。它支持系统级设计、仿真、自动代码生成以及嵌入式系统的连续测试和验证。Simulink 提供图形编辑器、可自定义的模块库以及求解器,能够进行动态系统建模和仿真。
模糊控制论 是以模糊集合,模糊语言变量及模糊逻辑推理为基础的计算机智能控制。该机制的输入是透过模糊化将原本0和1的资料变成0到1之间的数值,相对于原本的非零即一的二分法较接近人类的思维。在推论的过程中资料为模糊的,但透过解模糊化的步骤,可使得输出为精确值。模糊控制常用于智能运算、建构专家系统、和类神经网络共同应用。
最近在课程中用到了PID与模糊控制,为防止遗忘,写下此博客。
题目描述
在本次实践中我们主要应用了 Fuzzy Logic Designer
工具箱去设计模糊控制的输入/输出隶属度函数以及模糊规则,再使用 Simulink
进行仿真。
进行 模糊+PID(FPID)
控制的系统结构图如下所示:
系统框图很清晰的表示了信号流的流向。我们将误差信号以及误差的微分信号作为模糊控制器的输入,控制器的输出为
Δ
K
p
\Delta K_p
ΔKp ,
Δ
K
i
\Delta K_i
ΔKi ,
Δ
K
d
\Delta K_d
ΔKd 。模糊控制器的输出作为微调的因子与 PID
控制器本身原有
P
P
P,
I
I
I,
D
D
D 的权值进行相加,进而作用于控制对象。
Fuzzy Logic Designer
在 matlab
命令行窗口中输入 fuzzy
调出工具箱。
>> fuzzy
如下图所示:
-
调整输入模块个数:依次点击
edit
>Add Variable
>Input
/Output
-
调整输出模块个数:选中要删除的模块,依次点击
edit
>Remove Selected Variable
-
调整输出/输出模块隶属度函数,双击要调整的模块进入新的窗口,如下图所示:
在左侧 FIS Variables
中可以选择要调整的模块,在 Range
中调整函数的范围,在Type
中可以改变隶属度函数的类型,常见的有三角、矩形、高斯型等等。在 edit
中可以改变隶属度函数的种类、数目、类型等等(均为窗口化界面,只要读懂英语就好)。
- 编辑模糊规则:依次点击
edit
>Rules
进入新的窗口,如下图所示:
在此界面中编辑需要的模糊规则。
- 导出模糊控制器:依次点击
Files
>Export
可以选择导出为文件或者工作空间。我导出成Fuzzy_PID_controller.fis
文件。
Simulink
在命令行窗口键入如下命令,以加载 fis
文件到工作空间,并命名为 myFIS
。
>> myFIS = readfis('Fuzzy_PID_controller.fis')
打开 Simulink 窗口设计 FPID
控制器进行仿真。导入 Fuzzy Logic Controller with Ruleviewer
模块,再双击此模块将我们设计的模糊控制器导入其中:
在 FIS structure
中输入myFIS
导入工作空间中的模糊控制结构体。(注意:必须是在工作空间中存在的结构体)
剩下的就是基本的Simulink基本操作,将仿真模型搭建好即可。我搭建了如下模型:
运行仿真结果,双击 Scope
模块查看示波器输出:
改进
运行Simulink会有警告:
Solver is encountering difficulty in simulating model ‘Fuzzy_PID_controller_simulink’ at time 1.0000000000000036. Simulink will continue to simulate with warnings. Please check the model for errors.
Caused by:
Solver was unable to reduce the step size without violating minimum step size of 3.55271E-15 for 1 consecutive times at time 1. Solver will continue simulation with the step size restricted to 3.55271E-15 and using an effective relative error tolerance of 0.0338541, which is greater than the specified relative error tolerance of 0.001. This usually may be caused by the high stiffness of the system. Please check the system or increase the solver Number of consecutive min steps violation parameter.
问下 GPT 该这样解决:
这个报错信息表明模拟中的数值求解器在特定时间点遇到了困难。具体来说,它指出求解器在时间点 1.0000000000000036 处尝试减小步长但无法做到而不违反最小步长限制。因此,求解器将继续以受限的步长(3.55271E-15)进行模拟,并且使用了大于指定相对误差容限(0.001)的有效相对误差容限(0.0338541)。这通常是由系统的高刚度引起的。
针对这个问题,你可以考虑以下解决方案:
- 检查系统的刚度:高刚度可能导致数值求解器在模拟过程中遇到困难。可以尝试调整系统参数,减小系统的刚度,以便求解器能够更好地处理模拟过程。
- 增加求解器连续最小步骤违规参数:你也可以尝试增加求解器连续最小步骤违规参数,这可能有助于解决数值求解器在特定时间点遇到困难的问题。
通过以上方法,你应该能够解决数值求解器在模拟过程中遇到的困难,使模型能够正确进行模拟。
但由于时间原因,我并不清楚该如何减小系统刚度或增加求解器最小步骤违规参数。
使用模糊PID控制并没有比单独的PID控制有多大的好处,推测可能是PID参数的问题或者传递函数过于简单?
Reference
https://blog.csdn.net/qq_43596637/article/details/124659403
https://www.cnblogs.com/zhjblogs/p/14559329.html
https://www.cnblogs.com/hyb221512/p/9993011.html
https://cloud.tencent.com/developer/article/2124559
https://ww2.mathworks.cn/help/simulink/gui/solver-pane_zh_CN.html?requestedDomain=cn
er/article/2124559
https://ww2.mathworks.cn/help/simulink/gui/solver-pane_zh_CN.html?requestedDomain=cn
https://zh.wikipedia.org/wiki/%E6%A8%A1%E7%B3%8A%E6%8E%A7%E5%88%B6
希望本文章能帮到你,感谢阅读。
标签:Simulink,https,求解,模糊,PID,模块 From: https://blog.csdn.net/m0_70117458/article/details/137011074