资源简介
这个是非常好用的模糊PID温度控制算法,已经在自己的项目中使用,你只需要按照自己的控制对象修改误差变化率最大值和误差阈值即可。
代码片段和文件信息
#include
#include
#include
#include “pid_fuzzy.h“
//注1:自适应模糊pid最重要的就是论域的选择,要和你应该控制的对象相切合
//注2:以下各阀值、限幅值、输出值均需要根据具体的使用情况进行更改
//注3:因为我的控制对象惯性比较大,所以以下各部分取值较小
//论域e:[-55] ec:[-0.50.5]
//误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡
#define Emin 0.0
#define Emid 0.08
#define Emax 0.6
//调整值限幅,防止积分饱和
#define Umax 5
#define Umin -5
//输出值限幅
#define Pmax 7200
#define Pmin 0
#define NB 0
#define NM 1
#define NS 2
#define ZO 3
#define PS 4
#define PM 5
#define PB 6
int kp[7][7]= { {PBPBPMPMPSZOZO}
{PBPBPMPSPSZOZO}
{PMPMPMPSZONSNS}
{PMPMPSZONSNMNM}
{PSPSZONSNSNMNM}
{PSZONSNMNMNMNB}
{ZOZONMNMNMNBNB}
};
int kd[7][7]= { {PSNSNBNBNBNMPS}
{PSNSNBNMNMNSZO}
{ZONSNMNMNSNSZO}
{ZONSNSNSNSNSZO}
{ZOZOZOZOZOZOZO}
{PBNSPSPSPSPSPB}
{PBPMPMPMPSPSPB}
};
int ki[7][7]= { {NBNBNMNMNSZOZO}
{NBNBNMNSNSZOZO}
{NBNMNSNSZOPSPS}
{NMNMNSZOPSPMPM}
{NMNSZOPSPSPMPB}
{ZOZOPSPSPMPBPB}
{ZOZOPSPMPMPBPB}
};
/**************求隶属度(三角形)***************/
float FTri(float xfloat afloat bfloat c)//FuzzyTriangle
{
if(x<=a)
return 0;
else if((a return (x-a)/(b-a);
else if((b return (c-x)/(c-b);
else if(x>c)
return 0;
else
return 0;
}
/*****************求隶属度(梯形左)*******************/
float FTraL(float xfloat afloat b)//FuzzyTrapezoidLeft
{
if(x<=a)
return 1;
else if((a return (b-x)/(b-a);
else if(x>b)
return 0;
else
return 0;
}
/*****************求隶属度(梯形右)*******************/
float FTraR(float xfloat afloat b)//FuzzyTrapezoidRight
{
if(x<=a)
return 0;
if((a return (x-a)/(b-a);
if(x>=b)
return 1;
else
return 1;
}
/****************三角形反模糊化处理**********************/
float uFTri(float xfloat afloat bfloat c)
{
float yz;
z=(b-a)*x+a;
y=c-(c-b)*x;
return (y+z)/2;
}
/*******************梯形(左)反模糊化***********************/
float uFTraL(float xfloat afloat b)
{
return b-(b-a)*x;
}
/*******************梯形(右)反模糊化***********************/
float uFTraR(float xfloat afloat b)
{
return (b-a)*x +a;
}
/**************************求交集****************************/
float fand(float afloat b)
{
return (a}
/**************************求并集****************************/
float forr(float afloat b)
{
return (a}
float ec;
/*========== PID计算部分 ======================*/
int PID_realize(PID *structpiduint16_t suint16_t in)
{
float pwm_var;//pwm调整量
float iError;//当前误差
float setinput;
//计算隶属度表
float es[7]ecs[7]e;
float form[7][7];
int i=0j=0;
int MaxX=0MaxY=0;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-08-29 15:24 Fuzzy_PID\
目录 0 2017-08-09 15:59 Fuzzy_PID\.git\
文件 28 2017-08-09 15:58 Fuzzy_PID\.git\COMMIT_EDITMSG
文件 23 2017-08-08 10:06 Fuzzy_PID\.git\HEAD
文件 41 2017-08-09 15:59 Fuzzy_PID\.git\ORIG_HEAD
文件 304 2017-08-08 10:06 Fuzzy_PID\.git\config
文件 73 2017-08-08 10:06 Fuzzy_PID\.git\desc
目录 0 2017-08-08 10:06 Fuzzy_PID\.git\hooks\
文件 478 2017-08-08 10:06 Fuzzy_PID\.git\hooks\applypatch-msg.sample
文件 896 2017-08-08 10:06 Fuzzy_PID\.git\hooks\commit-msg.sample
文件 189 2017-08-08 10:06 Fuzzy_PID\.git\hooks\post-update.sample
文件 424 2017-08-08 10:06 Fuzzy_PID\.git\hooks\pre-applypatch.sample
文件 1642 2017-08-08 10:06 Fuzzy_PID\.git\hooks\pre-commit.sample
文件 1348 2017-08-08 10:06 Fuzzy_PID\.git\hooks\pre-push.sample
文件 4951 2017-08-08 10:06 Fuzzy_PID\.git\hooks\pre-reba
文件 544 2017-08-08 10:06 Fuzzy_PID\.git\hooks\pre-receive.sample
文件 1239 2017-08-08 10:06 Fuzzy_PID\.git\hooks\prepare-commit-msg.sample
文件 3610 2017-08-08 10:06 Fuzzy_PID\.git\hooks\update.sample
文件 305 2017-08-09 15:59 Fuzzy_PID\.git\index
目录 0 2017-08-08 10:06 Fuzzy_PID\.git\info\
文件 240 2017-08-08 10:06 Fuzzy_PID\.git\info\exclude
目录 0 2017-08-08 10:06 Fuzzy_PID\.git\logs\
文件 678 2017-08-09 15:59 Fuzzy_PID\.git\logs\HEAD
目录 0 2017-08-08 10:06 Fuzzy_PID\.git\logs\refs\
目录 0 2017-08-09 15:58 Fuzzy_PID\.git\logs\refs\heads\
文件 529 2017-08-09 15:59 Fuzzy_PID\.git\logs\refs\heads\master
文件 155 2017-08-09 15:58 Fuzzy_PID\.git\logs\refs\heads\test
目录 0 2017-08-08 10:06 Fuzzy_PID\.git\logs\refs\remotes\
目录 0 2017-08-08 10:06 Fuzzy_PID\.git\logs\refs\remotes\origin\
文件 181 2017-08-08 10:06 Fuzzy_PID\.git\logs\refs\remotes\origin\HEAD
目录 0 2017-08-18 16:56 Fuzzy_PID\.git\ob
............此处省略103个文件信息
相关资源
- RapidIO 2.2 Specification
- RapidIO_Rev_2.2_Specification
- 基于DSP的大功率开关电源的设计方案
- 基于DSP的大功率开关电源设计
- BLDC电机PID算法
- 基于双闭环模糊PID控制器的开关电源
- pid 模拟测试软件
- 基于RBF神经网络在线辨识的永磁同步
-
Lipase-catalyzed synthesis and the lipid me
- 中微子双β衰变的CUPID-Mo实验:性能
- 温度控制直流电机转速
- 智能车模糊控制
- LabVIEW实现Fuzzy_PID的补充资源
- 四轴飞控源码 PID参考apm 采用了dmp自带
- 平衡小车之家全套资料
- 基于PLC和组态软件的加热炉温度控制
- 基于ARM的高精度PID温度控制器_张军
- 基于STM32F07单片机风洞程序
- EBJ120TP型掘进机液压系统温度控制的研
- t12白光电烙铁温度控制电路图
- 基于51单片机的直流电机PID控制
- 科技创新-基于CAN总线的温度控制系统
- 基于STM32的室内温度控制系统.doc
- 基于STM32的智能服务型多功能多足机器
- 基于STM32PID电机控制
- STM32直流有刷电机PID控制
- STM32F407. 基于PID速度环的步进电机速度
- 基于stm32F103的两轮自平衡小车
- 模糊PID算法控制
- 倒立摆调试,使用步进电机,完全成
评论
共有 条评论