这个例子展示了如何使用二维查找表块实现非线性PID控制的模糊推理系统。
模糊推理系统(FIS)利用模糊逻辑将给定的输入映射到输出。例如,一个典型的双输入单输出模糊控制器的映射可以用三维图来描述。情节通常被称为控制曲面图。
对于控制应用,典型的FIS输入是误差(e (k)
)及更改误差(e (k) - e (k - 1)
),E
和CE
分别在控制面图中。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的动作。打开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部件
,在前馈路径从r
来u
,确保错误信号e
当模糊PID控制器为线性时,用于比例控制。
本例中常规PID控制器为离散时间PID控制器,在积分和微分作用下均采用反向欧拉数值积分。控制器增益为Kp
,Ki
,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控制器。
通过配置FIS和选择四个比例因子,可以得到一个线性模糊PID控制器,其控制性能与传统PID控制器相同。
首先,配置模糊推理系统,使其产生一个线性控制面从输入E
和CE
输出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”);
定义以下模糊规则:
如果E
是负的,CE
是负的,那么u
是-20
.
如果E
是负的,CE
为零,那么u
是-10
.
如果E
是负的,CE
是积极的u
是0
.
如果E
是零和CE
是负的,那么u
是-10
.
如果E
是零和CE
为零,那么u
是0
.
如果E
是零和CE
是积极的,那么u
是10
.
如果E
是积极的,CE
是负的,那么u
是0
.
如果E
是积极的,CE
为零,那么u
是10
.
如果E
是积极的,CE
是积极的,那么u
是20.
.
规则列表= [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部件
,顾
从Kp
,Ki
,Kd
常规PID控制器的增益。对比传统PID与线性模糊PID的表达式,变量关系如下:
Kp
=GCU部件
*全球教育运动
+顾
*通用电气
Ki
=GCU部件
*通用电气
Kd
=顾
*全球教育运动
设最大参考步长为1
,从而得到最大误差e
是1
.由于输入范围E
[-10 10],设置好了吗通用电气
来10
.然后就可以解了全球教育运动
,GCU部件
,顾
.
通用电气= 10;GCE =通用电气* (Kp-sqrt (Kp ^ 2 - 4 * Ki * Kd)) / 2 /吻;GCU部件= Ki /通用电气;顾= Kd / GCE;
模糊控制器块有两个输入(E
和CE
)和一个输出(u
).因此,可以使用2d查找表替换模糊系统。
要从您的FIS生成一个2-D查找表,请循环输入域,并使用以下方法计算相应的输出值evalfis
.由于控制面是线性的,您可以为每个输入变量使用一些样本点。
一步= 10;E = -10:步骤:10;CE = -10:步骤:10;N =长度(E);LookUpTableData = 0 (N);为i = 1: N为j = 1: N计算每个样本点组合的输出u。LookUpTableData(i,j) = evalfis(FIS,[E(i) CE(j)]);结束结束
使用二维查找表查看模糊PID控制器。
open_system ('sllookuptable/Fuzzy PID using Lookup Table')
与模糊PID控制器的唯一区别是模糊逻辑控制器块被二维查找表块代替。
当控制面为线性时,使用二维查找表的模糊PID控制器产生的结果与使用模糊逻辑控制器块的结果相同。
Simu万博1manbetxlink模型仿真了常规PID、模糊PID和查表模糊PID三种不同的控制器子系统对同一被控对象的控制。
运行仿真。为了比较闭环响应的步骤参考变化,打开范围。正如预期的那样,所有三个控制器产生相同的结果。
sim卡(“sllookuptable”) open_system (“sllookuptable /范围”)
一旦有了线性模糊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岁,“名字”,“马克斯”);
定义以下规则:
如果E
是负的,CE
是负的,那么u
是-20
.
如果E
是负的,CE
是积极的,那么u
是0
.
如果E
是积极的,CE
是负的,那么u
是0
.
如果E
是积极的,CE
是积极的,那么u
是20.
.
规则列表= [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);
查看三维非线性控制面。这个表面在靠近中心处有较高的增益E
和CE
这有助于在误差较小的情况下更快地减小误差。当误差较大时,控制器变得不那么激进,以避免可能的饱和。
gensurf (FIS)
在开始模拟之前,使用新的控件表面数据更新查找表。由于曲面是非线性的,为了获得足够的近似,需要增加更多的采样点。
一步= 1;E = -10:步骤:10;CE = -10:步骤:10;N =长度(E);LookUpTableData = 0 (N);为i = 1: N为j = 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。