• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: 其他
  • 标签: 模糊PID  C  

资源简介

模糊PID调节,自己已测试,调试效果比经典PID要好。

资源截图

代码片段和文件信息

#include “fuzzypid.h“

PID_STRUCT PID_Data;

static float E_TABLE[]={-3-2-10123};
static float EC_TABLE[]={-3-2-10123};
static float KpTABLE[]={0.00.30.61.2};
static float KiTABLE[]={0.20.40.60.9};
static float KdTABLE[]={0.000.010.020.03};
static char KpRULE[7][7]=
{
3333333
2222122
1111111
1101011
0010010
0101002
3333333
};

static char KiRULE[7][7]=
{
0000000
0000000
0000000
0000000
0000000
2000001
3333333
};

static char KdRULE[7][7]=
{
3332222
2221111
1121121
1101011
1100011
2210111
3333232
};


static float fuzzy_kp(float efloat ec)
{
char numpepec;
float eFuzzy[2]={00};
float ecFuzzy[2]={00};
float KpFuzzy[4]={0};
float Kp;

//误差隶属函数
if(e {
eFuzzy[0]=1.0;
pe=0;
}
else if(e>=E_TABLE[0]&&e {
eFuzzy[0]=(E_TABLE[1]-e)/(E_TABLE[1]-E_TABLE[0]);
pe=0;
}
else if(e>=E_TABLE[1]&&e {
eFuzzy[0]=(E_TABLE[2]-e)/(E_TABLE[2]-E_TABLE[1]);
pe=1;
}
else if(e>=E_TABLE[2]&&e {
eFuzzy[0]=(E_TABLE[3]-e)/(E_TABLE[3]-E_TABLE[2]);
pe=2;
}
else if(e>=E_TABLE[3]&&e {
eFuzzy[0]=(E_TABLE[4]-e)/(E_TABLE[4]-E_TABLE[3]);
pe=3;
}
else if(e>=E_TABLE[4]&&e {
eFuzzy[0]=(E_TABLE[5]-e)/(E_TABLE[5]-E_TABLE[4]);
pe=4;
}
else if(e>=E_TABLE[5]&&e {
eFuzzy[0]=(E_TABLE[6]-e)/(E_TABLE[6]-E_TABLE[5]);
pe=5;
}
else
{
  eFuzzy[0]=0;
pe=6;
}
eFuzzy[1]=1-eFuzzy[0];

//误差变化率隶属函数
if(e {
ecFuzzy[0]=1.0;
pec=0;
}
else if(ec>=EC_TABLE[0]&&ec {
ecFuzzy[0]=(EC_TABLE[1]-ec)/(EC_TABLE[1]-EC_TABLE[0]);
pec=0;
}
else if(ec>=EC_TABLE[1]&&ec {
ecFuzzy[0]=(EC_TABLE[2]-e)/(EC_TABLE[2]-EC_TABLE[1]);
pec=1;
}
else if(ec>=EC_TABLE[2]&&ec {
ecFuzzy[0]=(EC_TABLE[3]-e)/(EC_TABLE[3]-EC_TABLE[2]);
pec=2;
}
else if(ec>=EC_TABLE[3]&&ec {
ecFuzzy[0]=(EC_TABLE[4]-e)/(EC_TABLE[4]-EC_TABLE[3]);
pec=3;
}
else if(ec>=EC_TABLE[4]&&ec {
ecFuzzy[0]=(EC_TABLE[5]-e)/(EC_TABLE[5]-EC_TABLE[4]);
pec=4;
}
else if(ec>=EC_TABLE[5]&&ec {
ecFuzzy[0]=(EC_TABLE[6]-e)/(EC_TABLE[6]-EC_TABLE[5]);
pec=5;
}
else
{
  ecFuzzy[0]=0;
pec=6;
}
ecFuzzy[1]=1-ecFuzzy[0];

//查询模糊表
num=KpRULE[pe][pec];
KpFuzzy[num]+=eFuzzy[0]*ecFuzzy[0];
num=KpRULE[pe][pec+1];
KpFuzzy[num]+=eFuzzy[0]*ecFuzzy[1];
num=KpRULE[pe+1][pec];
KpFuzzy[num]+=eFuzzy[1]*ecFuzzy[0];
num=KpRULE[pe+1][pec+1];
KpFuzzy[num]+=eFuzzy[1]*ecFuzzy[1];
Kp=KpFuzzy[0]*KpTABLE[0]+KpFuzzy[1]*KpTABLE[1]+KpFuzzy[2]*KpTABLE[2]+KpFuzzy[3]*KpTABLE[3];
return Kp;
}


float fuzzy_ki(float efloat ec)
{
char numpepec;
float eFuzzy[2]={0

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7834  2016-12-27 19:15  FUZZPID\fuzzypid.c

     文件        239  2016-12-27 19:15  FUZZPID\fuzzypid.h

     目录          0  2017-01-03 13:58  FUZZPID

----------- ---------  ---------- -----  ----

                 8073                    3


评论

共有 条评论