资源简介
模糊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
- 上一篇:梯形加减速速度规划
- 下一篇:delphi编写的数据库连接测试
相关资源
- DS18B20 STC1T系列单片机驱动程序
- geoserver源码和geotools
- opencv-3.4.11.tar.gz
- 传智播客 activiti 视频资料及代码 第
- 传智播客 activiti 视频资料 第3天 共
- 传智播客 activiti 视频资料 第2天 共
- weblogic8.1安装包
- apache-atlas-2.1.0源码编译包
- Compaq.Visual.Fortran.v6.6.Professional.iso
- Qt5.9c开发指南.pdf代码.zip
- Keil.STM32L4xx_DFP.2.3.0.pack
- cudnn-11.1-linux-x64-v8.0.4.30.tgzab
- tensorflow-2.3.0-cp37-cp37m-win_amd64.whl
- Ansys.Products.2020R2第二部分用户手册
- Mac版本的jdk
- eclipse-win64(免安装) 绿色版
- Linux C程序设计王者归来_book_cd.7z.004
- jdk-8u241-macosx-x64.dmg
- NGSIM 数据集NGSIM__Vehicle_Trajectories_and
- freeswitch1.9版本源码
- 每天5分钟玩转Docker容器技术 完整中文
- 华为USG6300V1升级V5USG6000V500R001C30SPC10
- OpenCV for Unity 2.3.3 支持OpenCV 4.0.0
- 自动泊车效果测试-基于OPENCV与深度学
- docsys_win_2.01.71.zip
- libemgucv-windows-universal-gpu-2.4.9.1847
- tensorflow-1.15.0-cp36-cp36m-win_amd64.whl
- eclipse+jdk
- 《Linux-UNIX系统编程手册 上、下册 全
- MC9S08DZ60资料包.zip
评论
共有 条评论