利用查找表在Simulink中实现模糊PID控制器万博1manbetx

这个例子展示了如何使用二维查找表块实现非线性PID控制的模糊推理系统。

概述

模糊推理系统(FIS)利用模糊逻辑将给定的输入映射到输出。例如,一个典型的双输入单输出模糊控制器的映射可以用三维图来描述。情节通常被称为控制曲面图。

对于控制应用,典型的FIS输入是误差(e (k))及更改误差(e (k) - e (k - 1)),ECE分别在控制面图中。FIS的输出是由模糊规则推导出的控制动作,u在平面图中。模糊逻辑工具箱™提供命令和应用程序,用于为所需的控制表面设计FIS。然后,您可以在Simulink®中使用模糊逻辑控制器模块来模拟设计的FIS。万博1manbetx

通常可以使用查找表逼近非线性控制面,以简化生成的代码并提高执行速度。例如,您可以用一组Lookup Table块替换Simulink中的Fuzzy Logic Controller块,FIS中定万博1manbetx义的每个输出对应一个表。属性可以计算查找表中使用的数据evalfis命令。

对于这个例子,你在Simulink中为一个被控对象设计了一个非线性模糊PID控制器。万博1manbetx该装置是离散时间下的单输入单输出系统。设计目标是实现良好的参考跟踪性能。

t = 0.1;zpk([],[-1 -3 -5],1);

您还可以使用一个2d查找表来实现模糊推理系统,该查找表近似于控制面并实现相同的控制性能。

模糊PID控制器结构

这个例子中的模糊控制器是在反馈回路中,并使用模糊推理来计算类似pid的动作。打开Simulin万博1manbetxk模型。

open_system (“sllookuptable”

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

open_system (“sllookuptable /模糊PID”

模糊PID控制器采用的是输出的变化——(y (k) - y (k - 1)),而不是改变误差e (k) - e (k - 1),作为FIS的第二输入信号。这样做可以防止参考信号的阶跃变化直接触发导数动作。这两个增益块,全球教育运动GCU部件,在前馈路径从ru,确保错误信号e当模糊PID控制器为线性时,用于比例控制。

常规PID控制器设计

本例中常规PID控制器为离散时间PID控制器,在积分和微分作用下均采用反向欧拉数值积分。控制器增益为KpKi,Kd

open_system (“sllookuptable /常规PID”

与模糊PID控制器类似,输入信号对导数的作用为- y (k),而不是e (k)

您可以手动调整PID控制器增益或使用调整公式。在本例中,得到初始PID设计使用pidtune命令来自控制系统工具箱™。

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

C0 = pid (1, 1, 1,“t”Ts,“如果”“B”“DF”“B”);C = pidtune(Plant,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控制器相同。

首先,配置模糊推理系统,使其产生一个线性控制面从输入ECE输出u.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),“名字”“零”);FIS = addMF (FIS,“E”“trimf”(0 10 20),“名字”“积极”);

定义输入CE

FIS = addInput(FIS,[-10 10],“名字”“CE”);FIS = addMF (FIS,“CE”“trimf”(-20 -10 0),“名字”“负面”);FIS = addMF (FIS,“CE”“trimf”(-10 0),“名字”“零”);FIS = addMF (FIS,“CE”“trimf”(0 10 20),“名字”“积极”);

定义输出变量u常数隶属度函数。

FIS = addOutput(FIS,[-20 20],“名字”“u”);FIS = addMF (FIS,“u”“不变”, -20,“名字”“LargeNegative”);FIS = addMF (FIS,“u”“不变”, -10,“名字”“SmallNegative”);FIS = addMF (FIS,“u”“不变”,0,“名字”“零”);FIS = addMF (FIS,“u”“不变”10“名字”“SmallPositive”);FIS = addMF (FIS,“u”“不变”, 20岁,“名字”“LargePositive”);

定义以下模糊规则:

  1. 如果E是负的,CE是负的,那么u-20

  2. 如果E是负的,CE为零,那么u-10

  3. 如果E是负的,CE是积极的u0

  4. 如果E是零和CE是负的,那么u-10

  5. 如果E是零和CE为零,那么u0

  6. 如果E是零和CE是积极的,那么u10

  7. 如果E是积极的,CE是负的,那么u0

  8. 如果E是积极的,CE为零,那么u10

  9. 如果E是积极的,CE是积极的,那么u20.

规则列表= [1 1 1 1 1 1;%规则11 2 2 1 1;%规则21 3 3 1 1;%规则32 1 2 1 1;%规则42 2 3 1 1;%规则52 3 4 1 1;%规则63 1 3 1 1;%规则73 2 4 1 1;%规则83 3 5 1 1];%规则9ruleList FIS = addRule (FIS);

当您在本例中通过命令行实现FIS时,您也可以使用模糊逻辑设计应用程序。

绘制线性控制曲面。

gensurf (FIS)

确定比例因子通用电气全球教育运动GCU部件,KpKi,Kd常规PID控制器的增益。对比传统PID与线性模糊PID的表达式,变量关系如下:

  • KpGCU部件全球教育运动+通用电气

  • KiGCU部件通用电气

  • Kd全球教育运动

设最大参考步长为1,从而得到最大误差e1.由于输入范围E[-10 10],设置好了吗通用电气10.然后就可以解了全球教育运动GCU部件,

通用电气= 10;GCE =通用电气* (Kp-sqrt (Kp ^ 2 - 4 * Ki * Kd)) / 2 /吻;GCU部件= Ki /通用电气;顾= Kd / GCE;

用二维查询表实现模糊推理系统

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

要从您的FIS生成一个2-D查找表,请循环输入域,并使用以下方法计算相应的输出值evalfis.由于控制面是线性的,您可以为每个输入变量使用一些样本点。

一步= 10;E = -10:步骤:10;CE = -10:步骤:10;N =长度(E);LookUpTableData = 0 (N);i = 1: Nj = 1: N计算每个样本点组合的输出u。LookUpTableData(i,j) = evalfis(FIS,[E(i) CE(j)]);结束结束

使用二维查找表查看模糊PID控制器。

open_system ('sllookuptable/Fuzzy PID using Lookup Table'

与模糊PID控制器的唯一区别是模糊逻辑控制器块被二维查找表块代替。

当控制面为线性时,使用二维查找表的模糊PID控制器产生的结果与使用模糊逻辑控制器块的结果相同。

在Simulink中模拟闭环响应万博1manbetx

Simu万博1manbetxlink模型仿真了常规PID、模糊PID和查表模糊PID三种不同的控制器子系统对同一被控对象的控制。

运行仿真。为了比较闭环响应的步骤参考变化,打开范围。正如预期的那样,所有三个控制器产生相同的结果。

sim卡(“sllookuptable”) open_system (“sllookuptable /范围”

设计非线性控制面模糊PID控制器

一旦有了线性模糊PID控制器,就可以通过调整FIS设置来获得非线性控制曲面,比如它的样式、成员函数和规则库。

对于本例,使用sugeno型FIS设计一个陡峭的控制面。每个输入集有两个项(积极的),规则的数量减少到4条。

构建金融中间人。

FIS = sugfis;

定义输入E

FIS = addInput(FIS,[-10 10],“名字”“E”);FIS = addMF (FIS,“E”“gaussmf”-10年[7],“名字”“负面”);FIS = addMF (FIS,“E”“gaussmf”, 10 [7],“名字”“积极”);

定义输入CE

FIS = addInput(FIS,[-10 10],“名字”“CE”);FIS = addMF (FIS,“CE”“gaussmf”-10年[7],“名字”“负面”);FIS = addMF (FIS,“CE”“gaussmf”, 10 [7],“名字”“积极”);

定义输出u

FIS = addOutput(FIS,[-20 20],“名字”“u”);FIS = addMF (FIS,“u”“不变”, -20,“名字”“最小值”);FIS = addMF (FIS,“u”“不变”,0,“名字”“零”);FIS = addMF (FIS,“u”“不变”, 20岁,“名字”“马克斯”);

定义以下规则:

  1. 如果E是负的,CE是负的,那么u-20

  2. 如果E是负的,CE是积极的,那么u0

  3. 如果E是积极的,CE是负的,那么u0

  4. 如果E是积极的,CE是积极的,那么u20.

规则列表= [1 1 1 1 1 1;...%规则11 2 2 1 1;...%规则22 1 2 1 1;...%规则32 2 3 1 1];%规则4ruleList FIS = addRule (FIS);

查看三维非线性控制面。这个表面在靠近中心处有较高的增益ECE这有助于在误差较小的情况下更快地减小误差。当误差较大时,控制器变得不那么激进,以避免可能的饱和。

gensurf (FIS)

在开始模拟之前,使用新的控件表面数据更新查找表。由于曲面是非线性的,为了获得足够的近似,需要增加更多的采样点。

一步= 1;E = -10:步骤:10;CE = -10:步骤:10;N =长度(E);LookUpTableData = 0 (N);i = 1: Nj = 1: N计算每个样本点组合的输出u。LookUpTableData(i,j) = evalfis(FIS,[E(i) CE(j)]);结束结束

运行仿真。

sim卡(“sllookuptable”

与传统的线性PID控制器(响应曲线具有大超调量)相比,非线性模糊PID控制器使超调量降低了50%。非线性模糊控制器的两个响应曲线几乎重合,说明二维查找表很好地逼近了模糊系统。

bdclose (“sllookuptable”关闭模型也会清除它的工作区变量。

结论

你可以使用查找表近似非线性模糊PID控制器。通过在Simulink中用查找表块替换模糊逻辑控制器块,可以使用简化的生成代码部署模糊控制器,并提高执行速度。万博1manbetx

参考文献

[1]徐建新,韩春春,刘春春。模糊PID控制器的并行结构和整定自动化,第36卷,第673-684页。2000.

[2]示,J。模糊PID控制器的整定,丹麦技术大学自动化系技术报告,1999。

另请参阅

相关的话题