资源简介
模糊控制pid,可设定参数,且有详细注释,学习或者移植都很方便
代码片段和文件信息
/****************************************************************************
*
*文件名:FUZZY_PID.c
*
*功 能:此文件是模糊自适应整定PID控制程序
*
*作 者: Sahara
*
****************************************************************************/
#include “fuzzy_pid.h“
/****************************************************************************
*
*文件名:FUZZY_Calc_Kp(float efloat ecuint16_t e_maxuint16_t ec_maxuint8_t fuzzy_max)
*
*功 能:模糊处理 (具体处理依靠参数设定)
*
*作 者: Sahara Ekko
*
*入口参数:float efloat ec,e_max(误差变化范围为+-e_max)ec_max同理,
*
*出口参数:fuzzy
*
****************************************************************************/
float FUZZY_Calc(float efloat ecuint16_t e_maxuint16_t ec_maxuint8_t fuzzy_max)
{
float eRule[7] = {-e_max -e_max * 0.667f -e_max * 0.333f 0 e_max * 0.333f e_max * 0.667f e_max};
float ecRule[7] = {-ec_max -ec_max * 0.667f -ec_max * 0.333f 0 ec_max * 0.333f ec_max * 0.667f ec_max};
float uRule[7] = {fuzzy_max fuzzy_max * 0.667f fuzzy_max * 0.333f 0 fuzzy_max * 0.333f fuzzy_max * 0.667f fuzzy_max};
float eFuzzy[7];
float eFuzzy_Out[6];
float ecFuzzy[7];
float ecFuzzy_Out[6];
float uFuzzy[7];
int PePec;
float Rule[7][7];
float a1 a2;//生成模糊规则表的可调因子
float fuzzy; //输出值
/*int Rule[6][6]={{3 2 2 1 0 0}
{3 2 1 1 0 -1}
{2 2 1 0 -1 -1}
{2 1 0 -1 -2 -2}
{1 0 -1 -1 -2 -2}
{0 -1 -2 -2 -2 -3}
};
*/
/*int Rule[7][7]={{3 3 2 2 1 0 0}
{3 3 2 1 1 0 -1}
{2 2 2 1 0 -1 -1}
{2 2 1 0 -1 -2 -2}
{1 1 0 -1 -1 -2 -2}
{1 0 -1 -2 -2 -2 -3}
{0 0 -2 -2 -2 -3 -3}
};
*/
int ij;
for(i=0;i<7;i++)
{
eFuzzy[i]=0;
}
for(i=0;i<7;i++)
{
ecFuzzy[i]=0;
}
for(i=0;i<7;i++)
{
uFuzzy[i]=0;
}
for(i=0;i<2;i++)
{
eFuzzy_Out[i]=0;
}
for(i=0;i<2;i++)
{
ecFuzzy_Out[i]=0;
}
/****************************************************************************
*
* 误差隶属函数描述
* 误差隶属函数的描述采用三角形隶属函数描述
*
****************************************************************************/
if(e < eRule[0])
{
eFuzzy_Out[0] = 1.0;
Pe = 0;
}
else if(e > eRule[0] && e < eRule[1])
{
eFuzzy[0] = (e - eRule[1])/(eRule[0] - eRule[1]);
eFuzzy[1] = (e - eRule[0])/(eRule[1] - eRule[0]);
eFuzzy_Out[0] = eFuzzy[0] > eFuzzy[1] ? eFuzzy[0] : eFuzzy[1];
Pe = 0;
}
else if(e > eRule[1] && e < eRule[2])
{
eFuzzy[1] = (e - eRule[2])/(eRule[1] - eRule[2]);
eFuzzy[2] = (e - eRule[1])/(eRule[2] - eRule[1]);
eFuzzy_Out[1] = eFuzzy[1] > eFuzzy[2] ? eFuzzy[1] : eFuzzy[2];
Pe = 1;
}
else if(e > eRule[2] && e < eRule[3])
{
eFuzzy[2] = (e - eRule[3])/(eRule[2] - eRule[3]);
eFuzzy[3] = (e - eRule[2])/(eRule[3] - eRule[2]);
eFuzzy_Out[2] = eFuzzy[2] > eFuzzy[3] ? eFuzzy[2] : eFuzzy[3];
Pe = 2;
}
else if(e > eRule[3] && e < eRule[4])
{
eFuzzy[3] = (e - eRule[4])/(eRule[3] - e
- 上一篇:2017年电子商务师考试试真题及答案
- 下一篇:IAT 实验程序
相关资源
- 倒立摆源码,自动起摆源码
- 模糊PID控制算法讲解与代码
- 前馈-改进PID算法在智能车控制上的应
- PID控制超详细教程(含软硬件上位机
- FX2NPLC+2AD+4ADTC+2DA+电阻尺+编码器+PID温
- 台达PLC-PID控制温度程序
- 课程设计 51单片机电机PID调速打包k
- pid_assignment_defaults.qdf
- 基于BP神经网络整定的PID温度控制.p
- PID调试助手发布版.exe
- 基于神经网络控制的PID
- 采用labview 实现水箱的PID控制,界面美
- PID模拟软件
- zw_离散PID控制器.zip
- pid算法,积分分离,抗积饱和
- 基于模糊控制和PID控制的自主车辆速
- PID参数整定方法
- 一阶倒立摆的PID控制
- c编写的pid s函数
- 模糊pid控制C程序
- 模糊强化学习
- 模糊PID控制算法
- BP神经网络PID控制器
- PID算法控制电机转速
- PID调节模拟器
- S7_200PLC的PID参数自整定
- 基于模糊PID的智能小车控制算法研究
- 模糊PID C 程序源码
- 基于三菱FX2N的PLC非PID实现温度控制的
- PID模拟器绝对真实版
评论
共有 条评论