主要内容

使用查找表在Simulink中实现模糊PID控制器金宝app

此示例显示了如何使用2-D查找表块来实现用于非线性PID控制的模糊推理系统。

概述

使用模糊逻辑给出输入输出的模糊推理系统(FIS)映射。例如,可以在3-D图中描绘两个输入的一个输出模糊控制器的典型映射。剧情通常被称为a控制表面图。

对于控制应用,典型的FIS输入是错误(e(k))和更改错误(E(k)-e(k-1)),E.ce分别在控制表面图中。FIS输出是从模糊规则推断的控制动作,在表面图中。模糊逻辑工具箱™提供用于为所需控制表面设计FIS的命令和应用。然后,您可以使用Simulink®中的模糊逻辑控制器块模拟设计的FIS。金宝app

您通常可以使用查找表近似非线性控制表面来简化生成的代码并提高执行速度。例如,您可以使用一组查找表块将模糊逻辑控制器块替换为Simulink,为FIS中定义的每个输出的一个表。金宝app您可以使用介绍表中使用的数据使用evalfis.命令。

在此示例中,您可以为Simulink中的工厂设计一个非线性模糊PID控制器。金宝app该工厂是一个单一输入的单输出系统,可在离散时间。设计目标是实现良好的参考跟踪性能。

ts = 0.1;植物= C2D(ZPK([],[ -  1 -3 -5],1),TS);

您还使用近似控制表面的2-D查找表来实现模糊推理系统,并实现相同的控制性能。

模糊PID控制器结构

在该示例中的模糊控制器位于反馈循环中,并使用模糊推理计算类似的PID样动。打开Simulin金宝appk模型。

Open_System('sllockuptable'

模糊PID控制器使用并行结构,如模糊PID子系统所示。有关更多信息,请参阅[1]。控制器是模糊PI控制和模糊PD控制的组合。

Open_System('sllockupt / fuzzy pid'

模糊PID控制器使用输出的变化- (y(k)-y(k-1)),而不是改变错误E(k)-e(k-1),作为FIS的第二输入信号。这样做可以防止步骤改变参考信号直接触发衍生动作。两个增益块,格索GCU.,在馈送前向路径中R.,确保错误信号E.当模糊PID控制器是线性时,以比例动作使用。

设计传统PID控制器

在该示例中传统的PID控制器是具有积分和衍生动作的反向欧拉数值集成的离散时间PID控制器。控制器收益是kp.ki., 和kd.

Open_System('sllockupt /常规pid'

类似于模糊PID控制器,输入信号到衍生物动作是- 我(k), 代替e(k)

您可以手动调整PID控制器增益或使用调优惯例。在此示例中,使用该示例获取初始PID设计Pidtune.来自控制系统工具箱™的命令。

定义PID结构,调整控制器,提取PID增益。

C0 = PID(1,1,1,'ts',ts,'如果''B''df''B');C = PidTune(植物,C0)[KP,ki,kd] = piddata(c);
C = TS * Z Z-1 KP + KI * ------ + KD * ------ Z-1 TS * Z带KP = 30.6,ki = 25.2,KD = 9.02,TS = 0.1样品时间:0.1秒离散时间PID控制器并行形式。

设计等效线性模糊PID控制器

通过配置FIS并选择四个缩放因子,您可以获得一个线性模糊PID控制器,可再现传统PID控制器的控制性能。

首先,配置模糊推理系统,使其从输入中产生线性控制表面E.ce输出。FIS设置基于[2]中描述的设计选择:

  • 使用具有默认推理方法的Sugeno风格模糊推理系统。

  • 将输入的范围标准化为[-10 10]。

  • 使用三角形输入成员资格函数以0.5的隶属值重叠其邻居函数。

  • 使用[-20 20]的输出范围。

  • 使用常量输出成员函数。

构建模糊推理系统。

fis = sugfis;

定义输入变量E.

FIS = AddInput(FIS,[ -  10 10],'名称''e');fis = addmf(fis,'e''trimf',[ -  20 -10 0],'名称''消极的');fis = addmf(fis,'e''trimf',[ -  10 0 10],'名称''零');fis = addmf(fis,'e''trimf',[0 10 20],'名称''积极的');

定义输入ce

FIS = AddInput(FIS,[ -  10 10],'名称'');fis = addmf(fis,''trimf',[ -  20 -10 0],'名称''消极的');fis = addmf(fis,''trimf',[ -  10 0 10],'名称''零');fis = addmf(fis,''trimf',[0 10 20],'名称''积极的');

定义输出变量不变会员函数。

fis = addoutput(fis,[ -  20 20],'名称''U');fis = addmf(fis,'U''不变',-20,'名称''largenegative');fis = addmf(fis,'U''不变',-10,'名称'“小小”);fis = addmf(fis,'U''不变',0,'名称''零');fis = addmf(fis,'U''不变'10,'名称''小型');fis = addmf(fis,'U''不变'20,'名称''大阳性');

定义以下模糊规则:

  1. 如果E.是消极的ce是消极的,然后-20

  2. 如果E.是消极的ce是零,然后-10

  3. 如果E.是消极的ce那么是积极的0.

  4. 如果E.是零ce是消极的,然后-10

  5. 如果E.是零ce是零,然后0.

  6. 如果E.是零ce那是积极的,然后10.

  7. 如果E.是积极的ce是消极的,然后0.

  8. 如果E.是积极的ce是零,然后10.

  9. 如果E.是积极的ce那是积极的,然后20.

rulelist = [1 1 1 1 1;% 规则11 2 2 1 1;%规则21 3 3 1 1;%规则3.2 1 2 1 1;%规则4.2 2 3 1 1;%规则5.2 3 4 1 1;%规则6.3 1 3 1 1;%规则7.3 2 4 1 1;%规则8.3 3 5 1 1];%规则9.FIS = addrule(FIS,尺码);

在此示例中从命令行实现您的FIS时,您可以使用使用的方式使用您的FIS模糊逻辑设计师应用程序。

绘制线性控制表面。

Gensurf(FIS)

确定缩放因素GE格索GCU., 和来自kp.ki., 和kd.传统PID控制器的增益。比较传统PID和线性模糊PID的表达式,变量如下所示:

  • kp.=GCU.*格索+*GE

  • ki.=GCU.*GE

  • kd.=*格索

假设最大参考步骤是1,因此最大错误E.1。由于输入范围E.是[-10 10],设置GE10.。然后你可以解决格索GCU., 和

ge = 10;GCE = GE *(kp-sqrt(kp ^ 2-4 * ki * kd))/ 2 / ki;gcu = ki / ge;顾= kd / gce;

使用2-D查找表来实现模糊推理系统

模糊控制器块有两个输入(E.ce)和一个输出()。因此,您可以使用2-D查找表替换模糊系统。

从FIS生成2-D查找表,循环通过输入Universe,并使用相应的输出值计算evalfis.。由于控制表面是线性的,因此可以为每个输入变量使用一些采样点。

步骤= 10;e = -10:步骤:10;CE = -10:步骤:10;n =长度(e);LookuptableData =零(n);为了我= 1:n为了j = 1:n对于每个采样点的组合,%计算输出u。SpeeUppastabata(i,j)= evalfis(fis,[e(i)ce(j)]);结尾结尾

使用2-D查找表查看模糊PID控制器。

Open_System(“使用查找表”sllockuptable / fuzzy pid'

与模糊PID控制器相比的唯一差异是模糊逻辑控制器块被2-D查找表块替换为。

当控制表面是线性的,使用2-D查找表的模糊PID控制器将与使用模糊逻辑控制器块的结果产生相同的结果。

模拟Simulink中的闭环响应金宝app

Simu金宝applink模型使用查找表模拟了三个不同的控制器子系统,即传统的PID,模糊PID和模糊PID来控制同一工厂。

运行模拟。要将闭环响应与步进参考更改进行比较,请打开范围。正如预期的那样,所有三个控制器都产生相同的结果。

SIM('sllockuptable')Open_System('sllockupt / scope'

具有非线性控制表面的模糊PID控制器

有一个线性模糊PID控制器后,可以通过调整FIS设置,例如其样式,会员函数和规则库来获得非线性控制曲面。

对于此示例,使用Sugeno型FIS设计陡峭的控制表面。每个输入集都有两个术语(积极的消极的),规则的数量减少到四。

构建FIS。

fis = sugfis;

定义输入E.

FIS = AddInput(FIS,[ -  10 10],'名称''e');fis = addmf(fis,'e''Gaussmf',[7-10],'名称''消极的');fis = addmf(fis,'e''Gaussmf',[7 10],'名称''积极的');

定义输入ce

FIS = AddInput(FIS,[ -  10 10],'名称'');fis = addmf(fis,''Gaussmf',[7-10],'名称''消极的');fis = addmf(fis,''Gaussmf',[7 10],'名称''积极的');

定义输出

fis = addoutput(fis,[ -  20 20],'名称''U');fis = addmf(fis,'U''不变',-20,'名称''min');fis = addmf(fis,'U''不变',0,'名称''零');fis = addmf(fis,'U''不变'20,'名称''最大限度');

定义以下规则:

  1. 如果E.是消极的ce是消极的,然后-20

  2. 如果E.是消极的ce那是积极的,然后0.

  3. 如果E.是积极的ce是消极的,然后0.

  4. 如果E.是积极的ce那是积极的,然后20.

rulelist = [1 1 1 1 1;......% 规则11 2 2 1 1;......%规则22 1 2 1 1;......%规则3.2 2 3 1 1];%规则4.FIS = addrule(FIS,尺码);

查看3-D非线性控制表面。该表面在中心附近具有更高的增益E.ce平面比线性表面具有,这有助于在误差小时更快地减少误差。当误差很大时,控制器变得不那么侵略性,以避免可能的饱和度。

Gensurf(FIS)

在开始模拟之前,请使用新的控制表面数据更新查找表。由于表面是非线性的,得到足够的近似,添加更多采样点。

步骤= 1;e = -10:步骤:10;CE = -10:步骤:10;n =长度(e);LookuptableData =零(n);为了我= 1:n为了j = 1:n对于每个采样点的组合,%计算输出u。SpeeUppastabata(i,j)= evalfis(fis,[e(i)ce(j)]);结尾结尾

运行模拟。

SIM('sllockuptable'

与传统的线性PID控制器相比(响应曲线具有较大的过冲),非线性模糊PID控制器将过冲降低50%。来自非线性模糊控制器的两个响应曲线几乎重叠,这表明2-D查找表近似于模糊系统。

bdclose('sllockuptable'%闭合模型也清除其工作区变量。

结论

您可以使用查找表近似非线性模糊PID控制器。通过在Simulink中替换带查找表块的模糊逻辑控制器块,可以使用简化的生成代码部署模糊控制器和提高的执行速度。金宝app

参考

[1] Xu,J.X.,Hang,C. C.,Liu,C。“模糊PID控制器的并行结构和调整”。自动,卷。36,pp。673-684。2000年。

[2] jantzen,j。调整模糊PID控制器,丹麦技术大学自动化技术报告,技术报告。1999年。

也可以看看

相关话题