近日,我看了一篇论文《Continuous gradient temperature control of microfluidic chip based on thermoelectric cooler》是关于基于模糊PID控制算法对微流控芯片温度进行控制,其中讲述模糊PID控制算法,相比于通常的PID控制算法,模糊PID控制算法是一种基于模糊逻辑的控制算法,它结合了模糊控制和PID控制的优点。与传统的PID控制算法相比,模糊PID控制算法能够更好地适应复杂的非线性系统,并且在控制效果和稳定性方面表现出更好的性能。
但是由于在这篇论文中没有阐述具体传递函数以及控制规则,于是我换了一篇论文进行复现,原文地址在这,题目为《基于模糊PID的水下航行器运动控制研究》,本文是在学习b站相关视频后进行复现与学习的,视频地址在这里。
在文章中,由水下航行器的动力学模型得到深度控制传递函数为
根据传统的PID控制算法搭建得到的simulink系统以及得到的仿真结果如下图所示,并且设置的kp,ki,kd初始值为20,0.5,15。我们发现传统PID得到仿真结果也很好,但是调参难度很大,在前文我们也介绍过了。
下面重点来介绍模糊PID控制算法。
模糊PID控制算法主要有两个输入,分别是和
,
表示当前值与设定值之间的误差,
表示误差变化率;主要有三个输出
,
和
。模糊PID算法主要有三个步骤:输入量的模糊化、建立模糊规则和输出量的反模糊化。
步骤一:输入量的模糊化
模糊化是根据模糊集的隶属函数确定精确输入值隶属度的过程。输入量归一化处理,输入量论域离散化处理, 转变成论域上的对应变量值。 模糊规则采取Mamdani创建的标准化设计,定义输入和
以及输出
,
和
的范围为模糊集上的论域
,选择七级模糊子集
,其中N表示负,P表示正,B表示大,M表示中,S表示小,ZO表示0,模糊子集的隶属度函数均采用常用的三角函数形式,其中e的隶属度函数所下图示。
步骤二:建立模糊规则
建立模糊控制规则是设计模糊PID控制器最重要的步骤。为了获得最优的控制性能,需要对模糊控制规则、隶属度函数和比例因子进行适当的调整。模糊控制规则的形式为“IF输入THEN输出”,即标准 的Mamdani形式。下图表示表示编写的49条模糊规则。需要注意的是,原文中的表格第一第二多了一组数据,大家可以自行选择其中一组。
在Matlab中建立模糊PID发方法如下,首先在命令行中输入fuzzy,回车后得到如下界面
然后在Edit中添加一个输入和两个输出,界面如下
然后清除原有的隶属函数,新建上述描述的七级模糊子集,并将范围改成[-3,3],改名为结果如下,重复以上操作将一共五个输入输出全部更改(该过程比较繁琐)。
接着,设置模糊规则,点击Edit中的Rules,按照上述模糊规则一一添加,该过程比较无聊而且容易出错,需要耐心和细致,最终的结果如下图所示。
步骤三:输出量的反模糊化
完成上述模糊规则建立后,输出量即是反模糊化之后的数据。
根据文章给出的simulink系统图,自行搭建如下,有搭建疑问的可以直接参考b站视频,网址放在这里。
最后得到的仿真结果为
根据仿真结果我们可以得到,模糊PID的控制效果更好,振荡范围小,振荡次数少,系统可以很快的达到稳定。但是模糊PID也有缺点:参数调整困难、计算复杂度高和对模糊集的选择敏感,需要根据实际情况进行选取和使用。