模糊PID控制器的MATLAB仿真程序

作者&投稿:乌幸 (若有异议请与网页底部的电邮联系)
求模糊PID控制器的MATLAB仿真程序~

给你一个全MATLAB仿真的程序,没用到SIMULINK
close all
clear all
a=newfis('fuzzf');
f1=1;
a=addvar(a,'input','e',[-3*f1,3*f1]);
a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1]);
a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]);
a=addmf(a,'input',1,'NS','trimf',[-3*f1,-1*f1,1*f1]);
a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f1]);
a=addmf(a,'input',1,'PS','trimf',[-1*f1,1*f1,3*f1]);
a=addmf(a,'input',1,'PM','trimf',[0,2*f1,3*f1]);
a=addmf(a,'input',1,'PB','smf',[1*f1,3*f1]);
f2=1;
a=addvar(a,'input','ec',[-3*f2,3*f2]);
a=addmf(a,'input',2,'NB','zmf',[-3*f2,-1*f2]);
a=addmf(a,'input',2,'NM','trimf',[-3*f2,-2*f2,0]);
a=addmf(a,'input',2,'NS','trimf',[-3*f2,-1*f2,1*f2]);
a=addmf(a,'input',2,'Z','trimf',[-2*f2,0,2*f2]);
a=addmf(a,'input',2,'PS','trimf',[-1*f2,1*f2,3*f2]);
a=addmf(a,'input',2,'PM','trimf',[0,2*f2,3*f2]);
a=addmf(a,'input',2,'PB','smf',[1*f2,3*f2]);
f3=1.5;
a=addvar(a,'output','u',[-3*f3,3*f3]);
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);
a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3]);
a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3]);
a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]);
a=addmf(a,'output',1,'PB','smf',[1*f3,3*f3]);
rulelist=[1 1 1 1 1;
1 2 1 1 1;
1 3 2 1 1;
1 4 2 1 1;
1 5 3 1 1;
1 6 3 1 1;
1 7 4 1 1;

2 1 1 1 1;
2 2 2 1 1;
2 3 2 1 1;
2 4 3 1 1;
2 5 3 1 1;
2 6 4 1 1;
2 7 5 1 1;

3 1 2 1 1;
3 2 2 1 1;
3 3 3 1 1;
3 4 3 1 1;
3 5 4 1 1;
3 6 5 1 1;
3 7 5 1 1;

4 1 2 1 1;
4 2 3 1 1;
4 3 3 1 1;
4 4 4 1 1;
4 5 5 1 1;
4 6 5 1 1;
4 7 6 1 1;

5 1 3 1 1;
5 2 3 1 1;
5 3 4 1 1;
5 4 5 1 1;
5 5 5 1 1;
5 6 6 1 1;
5 7 6 1 1;

6 1 3 1 1;
6 2 4 1 1;
6 3 5 1 1;
6 4 5 1 1;
6 5 6 1 1;
6 6 6 1 1;
6 7 7 1 1;

7 1 4 1 1;
7 2 5 1 1;
7 3 5 1 1;
7 4 6 1 1;
7 5 6 1 1;
7 6 7 1 1;
7 7 7 1 1];
a=addrule(a,rulelist);
a1=setfis(a,'DefuzzMethod','mom');%Defuzzy
writefis(a1,'fuzzf');
a2=readfis('fuzzf');
Ulist=zeros(7,7);
for i=1:7
for j=1:7
e(i)=-4+i;
ec(j)=-4+j;
Ulist(i,j)=evalfis([e(i),ec(j)],a2);
end
end
figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'input',2);
figure(4);
plotmf(a,'output',1);
这里简单说明一下:首先是编写2个输入,1个输出的隶属度函数;接下来的是模糊规则,一共49条;然后用解模糊函数得出控制量U,这里输出的U就直接是精确量了,解模糊用到得规则是取隶属度最大的那个数即MOM算法。
显示的三个图形窗口分别是:模糊控制器内部原理图,以及2个输入,1个输出的隶属度函数图。
另外,虚机团上产品团购,超级便宜

  第一部分 创建一个模糊逻辑(.fis文件)
  第一步:打开模糊推理系统编辑器
  步骤:
  在Commond Window 键入fuzzy
  回车


  打开如下窗口,既模糊推理系统编辑器

  第二步:使用模糊推理系统编辑器
  本例用到两个输入,两个输出,但默认是一个输人,一个输出
  步骤:
  1、添加一个输入


  添加一个输出


  http://jingyan.baidu.com/article/851fbc37ef05463e1f15ab20.html

给你一个全MATLAB仿真的程序,没用到SIMULINK
close all
clear all
a=newfis('fuzzf');
f1=1;
a=addvar(a,'input','e',[-3*f1,3*f1]);
a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1]);
a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]);
a=addmf(a,'input',1,'NS','trimf',[-3*f1,-1*f1,1*f1]);
a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f1]);
a=addmf(a,'input',1,'PS','trimf',[-1*f1,1*f1,3*f1]);
a=addmf(a,'input',1,'PM','trimf',[0,2*f1,3*f1]);
a=addmf(a,'input',1,'PB','smf',[1*f1,3*f1]);
f2=1;
a=addvar(a,'input','ec',[-3*f2,3*f2]);
a=addmf(a,'input',2,'NB','zmf',[-3*f2,-1*f2]);
a=addmf(a,'input',2,'NM','trimf',[-3*f2,-2*f2,0]);
a=addmf(a,'input',2,'NS','trimf',[-3*f2,-1*f2,1*f2]);
a=addmf(a,'input',2,'Z','trimf',[-2*f2,0,2*f2]);
a=addmf(a,'input',2,'PS','trimf',[-1*f2,1*f2,3*f2]);
a=addmf(a,'input',2,'PM','trimf',[0,2*f2,3*f2]);
a=addmf(a,'input',2,'PB','smf',[1*f2,3*f2]);
f3=1.5;
a=addvar(a,'output','u',[-3*f3,3*f3]);
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);
a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3]);
a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3]);
a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]);
a=addmf(a,'output',1,'PB','smf',[1*f3,3*f3]);
rulelist=[1 1 1 1 1;
1 2 1 1 1;
1 3 2 1 1;
1 4 2 1 1;
1 5 3 1 1;
1 6 3 1 1;
1 7 4 1 1;

2 1 1 1 1;
2 2 2 1 1;
2 3 2 1 1;
2 4 3 1 1;
2 5 3 1 1;
2 6 4 1 1;
2 7 5 1 1;

3 1 2 1 1;
3 2 2 1 1;
3 3 3 1 1;
3 4 3 1 1;
3 5 4 1 1;
3 6 5 1 1;
3 7 5 1 1;

4 1 2 1 1;
4 2 3 1 1;
4 3 3 1 1;
4 4 4 1 1;
4 5 5 1 1;
4 6 5 1 1;
4 7 6 1 1;

5 1 3 1 1;
5 2 3 1 1;
5 3 4 1 1;
5 4 5 1 1;
5 5 5 1 1;
5 6 6 1 1;
5 7 6 1 1;

6 1 3 1 1;
6 2 4 1 1;
6 3 5 1 1;
6 4 5 1 1;
6 5 6 1 1;
6 6 6 1 1;
6 7 7 1 1;

7 1 4 1 1;
7 2 5 1 1;
7 3 5 1 1;
7 4 6 1 1;
7 5 6 1 1;
7 6 7 1 1;
7 7 7 1 1];
a=addrule(a,rulelist);
a1=setfis(a,'DefuzzMethod','mom');%Defuzzy
writefis(a1,'fuzzf');
a2=readfis('fuzzf');
Ulist=zeros(7,7);
for i=1:7
for j=1:7
e(i)=-4+i;
ec(j)=-4+j;
Ulist(i,j)=evalfis([e(i),ec(j)],a2);
end
end
figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'input',2);
figure(4);
plotmf(a,'output',1);
这里简单说明一下:首先是编写2个输入,1个输出的隶属度函数;接下来的是模糊规则,一共49条;然后用解模糊函数得出控制量U,这里输出的U就直接是精确量了,解模糊用到得规则是取隶属度最大的那个数即MOM算法。
显示的三个图形窗口分别是:模糊控制器内部原理图,以及2个输入,1个输出的隶属度函数图。

Digitally, the PID-controller can very simply be programmed according to
/* Simulating a PID-controller
The controller is programmed in the position form
as independent variables
*/
#include <iostream>
using namespace std;
#include <cmath>
#include <fstream>
// Parameters
const int kmax=50;
const int kstart=5;
int main()
{
int k;
double ubias=50; double sum=0;
// The controller parameters in ISA-form
double Kc=2; double Ti=5; double Td=5;
// The sampling time
double Tsamp=1;
// recalculating the controller parameters to independent variables
double Ki=Kc/Ti;
double Kd=Kc*Td;
double u[kmax]; // controller output
double y[kmax]; // actual value
double r[kmax]; // set-point
double e[kmax]; // control error
// Writing to a file
ofstream outFile;
outFile.open("c:\temp\testdata.txt");
// initial values for the variables
u[0]=50;
y[0]=50;
r[0]=50;
e[0]=0;
// the main loop
for (k=1; k<kmax; k++)
{
// simulating a change in the set-point
if (k < kstart)
r[k]=50;
else
r[k]=51;

// Actual value (fixed in this simulation)
y[k]=50;
// calculating the control error
e[k]=r[k]-y[k];
// calculating the integral
sum+=e[k];
// Calculating the controller output, independent variables
u[k]=ubias+Kc*e[k]+Ki*Tsamp*sum+Kd/Tsamp*(e[k]-e[k-1]);
// writing results to screen and to file
cout << k << "\t" << r[k] << "\t" << y[k] << "\t" <<
e[k] << "\t" << u[k] << "\n";
outFile << k << "\t" << r[k] << "\t" << y[k] << "\t" <<
e[k] << "\t" << u[k] << "\n";
}
return 0;
}

你的模糊控制规则是什么样的的,我曾做过这方面的研究,你可以加我
看你这图是2个输入,一个输出,但是模拟过程显示的输出是3通道。可能是这方面的问题

这个程序中的rulelist怎么写的啊?是怎么把IF THEN的形式转化的啊??


PLC中的m8002是什么
M8002用于PLC的初始化,plc每次断电重启后M8002就会执行一次。名称:初始脉冲常开触点。RUN后输出一个扫描周期的ON。需要做数据初始化的时候使用,一般是做初始化时候用。

关于PID自整定Matlab程序在辨识(idareas.m)程序中MODEL.m, MODEL.L...
给你一个全MATLAB仿真的程序,没用到SIMULINK close all clear all a=newfis('fuzzf');f1=1;a=addvar(a,'input','e',[-3*f1,3*f1]);a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1]);a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]);a=addmf(a,'input',1...

模糊滑模控制器在ROV机械手上的应用研究
[1]谷娜.2008.基于AMESim 和simulink 的汽车电动助力转向器系统的联合仿真[D].四川:西华大学 [2]刘金琨.2005.滑模变结构控制MATLAB 仿真[M].北京:清华大学出版社,2005. [3]刘金琨.2004.先进PID 控制MATLAB 仿真[M].北京:电子工业出版社,2004. [4]Lynn A,Smid E,Eshraghi M,et al.2005.Modeling hydraul...

参考文献中的m是什么意思?
在物理学和工程学领域中,研究对象通常涉及对物质和能量的量化测量。因此,这些领域中使用的术语通常涉及量化性质。m可以代表物质或系统的质量因子,如电容器或电路中的电感。此外,m也可以代表系统的时间常数,如控制回路中的比例-积分-微分(PID)控制器中的时间常数。m在参考文献中也可以代表“光学密度...

2G的TF卡变成RAW格式,格式化后只有0.5M.
如还无法找到U盘,可以在 “我的电脑”上按右键选“属性”,然后在弹出的窗口中选“硬件”、“设备管理器”,在硬件列表中选“通用串行总线控制器”,在下面的USB MASS STORAGE DEVICE 上右键选“"属性”,在弹出的窗口中选“详细信息”,在列表框中选"硬件ID”,看看是不是有VID和PID(也可以用“...

PID控制器中,积分控制的作用是( )
在实际的过程控制与运动控制系统中,PID家族占有相当的地位,据统计,工业控制的控制器中PID类控制器占有90%以上(K J Åström and T. Hägglund. PID Controllers: Theory,Design and Tuning. Instrument Society of America, 1995)。PID控制器是最早出现的控制器类型,因为其结构...

PID控制器是如何实现的
应该指出,另一点是 PI-PD 控制器的使用提供更大的灵活性,比在更多所需的位置,同时与找到的开环植物传递函数 Gil(s) 杆将-P PID 控制器 use of Kf and Td rather than a gain-only parameter Kf. 使用的 Kf 和 Td 而不是只增益参数 Kf 呵呵,在线翻译的。

控制器设计怎么做
八、比例-积分-微分控制(PID)让我们来验证PID控制,使用PID控制器的feiding给定闭环控制系统传递函数为:[公式](10)经过一定的参数调节过程,在Kp=350,Ki=300,Kd=50时,得到期望响应,为了验证,创建新的m文件 输出:C = 1 Kp + Ki * --- + Kd * s s with Kp = 350, Ki = 300,...

为什么PI 和PID 在阶跃信号作用下,输出的终值为一常量?
通过.m文件编程出的图像,不是仿真的出的图像,所以不存在阶跃信号step()过早置0的情况;显示窗口,t终值1000时,输出图像不变的,所以不存在窗口限制了显示的问题。原理和特点 在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近...

直流电机转速慢是怎么回事
直流发电机的工作原理就是把电枢线圈中感应的交变电动势,靠换向器配合电刷的换向作用,使之从电刷端引出时变为直流电动势的原理。感应电动势的方向按右手定则确定(磁感线指向手心,大拇指指向导体运动方向,其他四指的指向就是导体中感应电动势的方向)。导体受力的方向用左手定则确定。这一对电磁力...

万秀区15188478340: 急急急!!!如何用matlab中的simulink仿真模糊PID控制器? -
超致再造: 可以再SIMULINK模块中拉出模糊控制器模型,然后还要用M文件编写相应的模糊控制器程序,取个模糊文件的名字,比如a,然后单击模块,键入字母a,即可,注意写好M文件后,要运行一次,这样才能生成模糊文件a. 程序可参考,我的另一个答复:http://wenwen.sogou.com/z/q876166627.htm

万秀区15188478340: 怎么在matlab里实现模糊控制和pid控制的结合来控制非线性模型 -
超致再造: 我刚好做了一个模糊PID控制器..步骤是这样:1、确定模糊控制规则:输入输出量、对应的模糊规则表、各变量的论域.2、在MATLAB主命令窗口输入fuzzy,在里面设置模糊规则.保存下来一个fis文件.3、在MATLAB主命令窗口输入myFLC=readfis('fuzzpid.fis'),并在Simulink中的fuzzy logic controller中参数设为myFLC,即可在Simulink中调用此模糊控制器.当然了,这里的myFLC和fuzzpid是你自己定的文件名.4、我做的时候,PID控制器是自己搭建的,并没有直接用自带的PID模块.直接用PID模块我没有成功.有什么问题你可以继续问我~

万秀区15188478340: 我在做一个MATLAB仿真模糊PID,规则,系统图都已经完成就是怎么都运行不成功,请大神帮我看一下可以吗? -
超致再造: 第一步:打开模糊推理系统编辑器 步骤:在Commond Window 键入fuzzy 回车 打开如下窗口,既模糊推理系统编辑器 第二步:使用模糊推理系统编辑器 本例用到两个输入,两个输出,但默认是一个输人,一个输出 步骤:1、添加一个输入 添加...

万秀区15188478340: 求悬架模糊PID控制MATLAB仿真程序 -
超致再造: close all clear all a=newfis('fuzzf'); f1=1; a=addvar(a,'input','e',[-3*f1,3*f1]); a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1]); a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]); a=addmf(a,'input',1,'NS','trimf',[-3*f1,-1*f1,1*f1]); a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f...

万秀区15188478340: 电机转速 模糊pid控制 用matlab仿真 求指教 -
超致再造: 先弄清楚模糊控制设计的一般步骤,如果常规PID会的话,模糊PID也就会做了

万秀区15188478340: 用MATLAB simulink做PID控制器仿真时 PID Controller在哪里添加? -
超致再造: 模块库里没有现成的PID Controller,方法如下:1复制,直接从现成的MATLAB例子中复制PID controller,比如可在MATLAB 命令窗口输入sltank,其中就有一个PID controller,直接复制即可.2自己建立,分别建立比例,积分,微分模块,参照以上例子建立.

万秀区15188478340: 如何实现rbf神经网络的模糊pid控制仿真 -
超致再造: 我的毕设只用把PID和模糊PID相比较 常规PID,用Matlab里的Simulink模块仿真,建立你要做的动力学模型的传函或者状态空间.PID参数调节可用临界比度法.模糊PID就麻烦了,打开Matlab中FIS模块,一般都用二阶模糊?输入E,EC的隶属函数,一般为高斯,和输出模糊Kp,Ki,Kd,一般为三角.还要整定模糊规则,再加载到Simulink里.调节模糊因子Gu,Ge,Gec,设置模糊PID的参数.总之,你这个问题在白度知道里很难说清楚.

万秀区15188478340: 怎么通过MATLAB使用遗传算法实现pid参数整定 -
超致再造: 我的毕设只用复把PID和模糊PID相比较 常规PID,用Matlab里的Simulink模块仿真,建立你要做的动力学模型的传函或者状态空间.PID参数调节制可用临界比度法.模糊PID就麻烦了,打开Matlab中FIS模块,一般都用二阶模糊?输入E,EC的隶属函数,一般为高斯百,和输出模糊Kp,Ki,Kd,一般为三角.还要整定模糊规则,再加载到Simulink里.调节模糊因子Gu,Ge,Gec,设置模糊PID的参度数.总之,你这个问题在白度知道里很难说清楚.

万秀区15188478340: MATLAB仿真模糊PID控制初始位置不为零是什么原因? -
超致再造: 检查下模糊规则,很可能是输入为零的时候,规则中对应的控制量并不为零.

万秀区15188478340: 跪求:如何用matlab做专家PID控制的仿真 -
超致再造: 条件太少,自己做了,可以出结果,%Integration separation PID Controller clear all; close all; ts=5;%delay plant sys=tf([1],[30,1],'inputdelay',10); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); u_1=0;u_2=0;u_3=0;u_4=0;u_5=0; y_1=0;y_2=0;y_3...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网