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

资源简介

本人对模糊PID控制的两种理解的写法,模糊pid控制C程序,内有一定注释,欢迎交流本人对模糊PID控制的两种理解的写法,模糊pid控制C程序,内有一定注释,欢迎交流

资源截图

代码片段和文件信息

#include “config.h“
#if fuzzy_EN>0

extern fp32   angle_down_maxangle_up_max;

//extern fp32   motor_xtvelocity_max;
#define IS_Kp 0.3
#define IS_Ki 0.6
#define IS_Kd 0.9
 
#define NL   -0.9
#define NM  -0.6
#define NS  -0.3
#define ZE  0
#define PS  0.3
#define PM  0.6
#define PL  0.9
 
 
 
static const fp32 fuzzyRuleKp[7][7]={
PL PL PM PM PS PS ZE
PL PL PM PM PS ZE ZE
PM PM PM PS ZE NS NM
PM PS PS ZE NS NM NM
PS PS ZE NS NS NM NM
ZE ZE NS NM NM NM NL
ZE NS NS NM NM NL NL
};
 
static const fp32 fuzzyRuleKi[7][7]={
NL NL NL NM NM ZE ZE
NL NL NM NM NS ZE ZE
NM NM NS NS ZE PS PS
NM NS NS ZE PS PS PM
NS NS ZE PS PS PM PM
ZE ZE PS PM PM PL PL
ZE ZE PS PM PL PL PL
};
 
static const fp32 fuzzyRuleKd[7][7]={
PS PS ZE ZE ZE PL PL
NS NS NS NS ZE NS PM
NL NL NM NS ZE PS PM
NL NM NM NS ZE PS PM
NL NM NS NS ZE PS PS
NM NS NS NS ZE PS PS
PS ZE ZE ZE ZE PL PL
};
 
typedef struct{
fp32 Kp;
fp32 Ki;
fp32 Kd;
}PID;
 
 
PID fuzzy(fp32 efp32 ec)//误差,误差变化率
{
 char pepec;
     fp32 eFuzzy[2]={00};
 fp32 ecFuzzy[2]={00};
     static fp32 E_TABLE[]={NLNMNSZEPSPMPL};
     static fp32 EC_TABLE[]={NLNMNSZEPSPMPL};
     PID fuzzy_PID;
    //误差隶属函数
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

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

     文件       4862  2019-01-12 20:32  新建文件夹 (5)\fuzzy\fuzzy.c

     文件        788  2019-01-11 10:19  新建文件夹 (5)\fuzzy\fuzzy.h

     文件       4519  2019-01-18 17:36  新建文件夹 (5)\fuzzy1\fuzzy.c

     文件        788  2019-01-11 10:19  新建文件夹 (5)\fuzzy1\fuzzy.h

     目录          0  2019-01-25 21:12  新建文件夹 (5)\fuzzy

     目录          0  2019-01-18 17:38  新建文件夹 (5)\fuzzy1

     目录          0  2019-01-25 21:12  新建文件夹 (5)

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

                10957                    7


评论

共有 条评论