资源简介

这个是非常好用的模糊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\description
     目录           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-rebase.sample
     文件         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\objects\
............此处省略103个文件信息

评论

共有 条评论