资源简介
本人对模糊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
相关资源
- 模糊强化学习
- 模糊PID控制算法
- BP神经网络PID控制器
- 模糊PD和模糊PI控制器
- PID算法控制电机转速
- PID调节模拟器
- S7_200PLC的PID参数自整定
- seed数据集
- 基于模糊PID的智能小车控制算法研究
- 模糊PID C 程序源码
- 基于三菱FX2N的PLC非PID实现温度控制的
- PID模拟器绝对真实版
- PID控制电机以及详细的PID算法公式
- 模糊自适应PID控制器设计
- 西门子S7-1200PID总结
- 模糊控制技术在全自动洗衣机的应用
- 基于模糊神经网络的自适应PID控制器
- MSP430 四驱PID速度调节 蓝牙小车代码程
- ztree模糊搜索demo
- swapidc去云平台
- 飞思卡尔舵机、电机PID
- PIDk控制外文及翻译
- 分数阶PID研究与仿真
- PID2010年黑龙江电子设计大赛题解(水
- 无刷直流电机-基于模糊自适应PID控制
- PID水量仿真演示软件
- 树莓派无刷电机控制器调速和PID控制
- 基于模糊c聚类的图像分割
- 四旋翼飞行器的动力学建模及PID控制
- zTree模糊查询Demo
评论
共有 条评论