利用查找表在Simulink中实现模糊PID控制器金宝app
这个例子展示了如何使用二维查找表块实现非线性PID控制的模糊推理系统。
概述
模糊推理系统(FIS)利用模糊逻辑将给定的输入映射到输出。例如,两输入一输出模糊控制器的典型映射可以在三维图中描绘。情节通常被称为控制曲面图。
对于控制应用,典型的FIS输入是误差(e (k)
)和误差变化(e (k) - e (k - 1)
),E
而且CE
分别在控制曲面图中。FIS输出是由模糊规则推断出的控制动作,u
在曲面图中。模糊逻辑工具箱™提供命令和应用程序,为所需的控制面设计一个FIS。然后,您可以使用Simulink®中的模糊逻辑控制器块来模拟设计的FIS。金宝app
通常可以使用查找表近似非线性控制面,以简化生成的代码并提高执行速度。例如,您可以用一组查找表块替换Simulink中的模糊逻辑控制器块,FIS中定义的每个输出对应一个表。金宝app方法计算查找表中使用的数据evalfis
命令。
在这个例子中,你在Simulink中为一个工厂设计了一个非线性模糊PID控制器。金宝app该装置是离散时间下的单输入单输出系统。设计目标是实现良好的参考跟踪性能。
Ts = 0.1;Plant = c2d(zpk([],[-1 -3 -5],1),Ts);
您还可以使用近似于控制面并实现相同控制性能的2-D查找表实现模糊推理系统。
模糊PID控制器结构
本例中的模糊控制器位于反馈回路中,并使用模糊推理计算类似pid的动作。打开Simulin金宝appk模型。
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控制器是一个在积分和导数动作中都具有后向欧拉数值积分的离散时间PID控制器。控制器增益为Kp
,Ki
,Kd
.
open_system (“sllookuptable /常规PID”)
类似于模糊PID控制器,对输入信号的导数动作是- y (k)
,而不是e (k)
.
您可以调整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 with Kp = 30.6, Ki = 25.2, Kd = 9.02, Ts = 0.1采样时间:0.1秒并行形式的离散PID控制器。
设计等效线性模糊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 10],“名字”,“零”);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 10],“名字”,“零”);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
是LargeNegative
.如果
E
是负
而且CE
是零
,然后u
是SmallNegative
.如果
E
是负
而且CE
是积极的
,然后u
是零
.如果
E
是零
而且CE
是负
,然后u
是SmallNegative
.如果
E
是零
而且CE
是零
,然后u
是零
.如果
E
是零
而且CE
是积极的
,然后u
是SmallPositive
.如果
E
是积极的
而且CE
是负
,然后u
是零
.如果
E
是积极的
而且CE
是零
,然后u
是SmallPositive
.如果
E
是积极的
而且CE
是积极的
,然后u
是LargePositive
.
ruleList = [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];规则9FIS = addRule(FIS,规则列表);
在本例中从命令行实现FIS时,也可以使用模糊逻辑设计器应用程序。
绘制线性控制曲面。
gensurf (FIS)
确定比例因子通用电气
,全球教育运动
,GCU部件
,顾
从Kp
,Ki
,Kd
的增益。将传统PID与线性模糊PID的表达式进行比较,变量关系如下:
Kp
=GCU部件
*全球教育运动
+顾
*通用电气
Ki
=GCU部件
*通用电气
Kd
=顾
*全球教育运动
假设最大参考步长为1
,从而得到最大误差e
是1
.的输入范围E
[-10 10]是否已设置通用电气
来10
.你可以解出全球教育运动
,GCU部件
,顾
.
Ge = 10;GCE = GE*(Kp-√(Kp^2-4*Ki*Kd))/2/Ki;GCU = Ki/GE;GU = Kd/GCE;
利用二维查找表实现模糊推理系统
模糊控制器块有两个输入(E
而且CE
)和一个输出(u
).因此,您可以使用二维查找表代替模糊系统。
要从FIS生成2-D查找表,请遍历输入域,并使用evalfis
.由于控制面是线性的,您可以为每个输入变量使用几个样本点。
Step = 10;E = -10:步骤:10;CE = -10:Step: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/模糊PID)
与模糊PID控制器相比,唯一的区别是模糊逻辑控制器块被替换为2-D查找表块。
当控制面为线性时,使用二维查找表的模糊PID控制器与使用模糊逻辑控制器块的模糊PID控制器产生相同的结果。
在Simulink中模拟闭环响应金宝app
Simu金宝applink模型模拟了三个不同的控制器子系统,即常规PID,模糊PID,模糊PID使用查找表控制同一工厂。
运行模拟。要比较步骤引用更改的闭环响应,请打开作用域。正如预期的那样,所有三个控制器产生相同的结果。
sim卡(“sllookuptable”) open_system (“sllookuptable /范围”)
基于非线性控制面的模糊PID控制器设计
一旦你有了一个线性模糊PID控制器,你可以通过调整你的FIS设置来获得一个非线性控制面,比如它的风格、隶属函数和规则库。
对于本例,使用sugeno型FIS设计一个陡峭的控制面。每个输入集有两个项(积极的
而且负
),而规则数目减少至4条。
构建FIS。
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
是最小值
.如果
E
是负
而且CE
是积极的
,然后u
是零
.如果
E
是积极的
而且CE
是负
,然后u
是零
.如果
E
是积极的
而且CE
是积极的
,然后u
是马克斯
.
ruleList = [1 1 1 1 1 1;...规则11 2 2 1 1;...规则22 1 2 1 1;...规则32 2 3 1 1];规则4FIS = addRule(FIS,规则列表);
查看三维非线性控制面。这个表面有一个更高的增益附近的中心E
而且CE
平面比线性曲面具有,这有助于在误差较小时更快地减小误差。当误差较大时,控制器变得不那么激进,以避免可能的饱和。
gensurf (FIS)
在开始模拟之前,用新的控制面数据更新查找表。由于曲面是非线性的,为了获得足够的近似,需要添加更多的采样点。
Step = 1;E = -10:步骤:10;CE = -10:Step: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中用查找表块替换模糊逻辑控制器块,可以使用简化的生成代码和提高的执行速度部署模糊控制器。金宝app
参考文献
[1]徐建新,杭春春,刘春春,刘春春。模糊PID控制器的并行结构和整定自动化,第36卷,第673-684页。2000.
[2] Jantzen, J。模糊PID控制器整定,技术报告,丹麦工业大学自动化系,1999。