⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pid-fuzzy.c

📁 模糊pID控制的典型程序
💻 C
字号:
unsigned int SetPoint			//设定目标,应用时实际上取值该值的1/10,出现温度的0.x度
int	ei;                         //最近1次偏差,ei=stPID.SetPoint-stPID.T_adc_data[2]
int LastError;					//SetPoint-T_adc_data[1]
int delt_ei;					//偏差的变化:delt_ei=PID.LastError-ei
int T_adc_data[3];				//近3次的测量值,T_adc_data[2]为最近一次
int ui;							//ui:输出
int delt_ui;					//增量式增量输出

char DFC_tbl[11][13]={ 			//增量式输出
        /* -12   -10   -8   -6   -4   -2    0   +2   +4   +6   +8   +10   +12 */
/*-5*/	   -5,   -5,   -4,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -1,   0,
/*-4*/	   -5,   -5,   -4,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,   0,   0,
/*-3*/	   -5,   -4,   -3,  -2,  -1,  -1,  -1,  -1,  -2,  -1,   0,   0,   0,
/*-2*/	   -4,   -3,   -2,  -2,  -1,   0,   0,  -1,  -1,  -1,   0,   1,   2,
/*-1*/	   -3,   -2,   -1,  -1,  -1,   0,   0,   0,   1,   1,   2,   3,   4,
/* 0*/	   -3,   -2,   -1,  -1,  -1,   0,   0,   2,   2,   2,   2,   3,   4,
/*+1*/	   -2,   -2,   -1,  -1,  -1,   0,   0,   2,   2,   2,   2,   3,   4,
/*+2*/	    0,    0,    0,   0,   1,   1,   1,   2,   2,   2,   3,   4,   5,
/*+3*/	    0,    0,    0,   0,   1,   1,   1,   2,   3,   3,   3,   4,   5,
/*+4*/	    0,    0,    0,   0,   1,   2,	2,	 3,	  3,   4,   4,   5,   5,
/*+5*/		0,    0,    0,   0,   2,   2,   3,   3,   4,   5,   5,   5,   5
}; 

int GetDeltFuzzyValue(int ei,int delt_ei)
{unsigned char i,j;
#define delt_M 20
if(di>delt_M) ei=delt_M;
if(di<delt_M) ei=-delt_M;
i=delt_ei+5;
j=6+ei*6/delt_M;
return DFC_table[i][j];
}

void Delt_FuzzyCtrl(void)		  //增量式PID,调节ui
{
#define delt_Um 50
LastError=ei;						 //刷新近2次偏差
ei=SetPoint-T_adc_data[2];
delt_ei=LastError-ei;				 //刷新偏差的变化
if(delt_ei>5) delt_ei=5;
if(delt_ei<-5) delt_ei=-5;
delt_ui=GetDeltFuzzyValue(ei,delt_ei);	//采用模糊控制模型
delt_ui=delt_ui*2;						 //其中2是比例因子
if(delt_ui>delt_Um) delt_ui=delt_Um;
if(delt_ui<-delt_Um) delt_ui=-delt_Um;
ui+=delt_ui;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -