新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)中實(shí)現(xiàn)模糊控制PID程序

單片機(jī)中實(shí)現(xiàn)模糊控制PID程序

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
#define KPU 0.01

#define KIU 0.0005
#define KDU 0.1
#define KE 0.06
#define KEC 3
char code dkp[13][13]={
{6,6,6,5,4,4,4,3,3,2,0,0,0},
{6,6,6,5,4,3,3,3,3,2,0,-1,-1},
{6,6,6,5,4,3,3,3,3,2,0,-1,-2},
{5,5,5,5,4,3,3,2,2,0,-1,-1,-2},
{4,4,4,4,4,3,3,2,0,-1,-2,-2,-2},
{4,4,4,3,3,2,2,0,-1,-1,-3,-3,-3},
{4,4,4,3,3,2,0,-1,-2,-3,-3,-3,-3},
{3,3,3,2,2,0,-1,-1,-2,-3,-3,-3,-3},
{3,3,3,2,0,-1,-2,-2,-2,-3,-3,-3,-3},
{3,2,2,0,-1,-1,-3,-3,-3,-3,-3,-4,-4},
{3,2,0,-1,-2,-3,-3,-3,-3,-3,-3,-4,-6},
{2,2,0,-1,-3,-3,-3,-3,-3,-4,-4,-4,-5},
{0,0,0,-1,-3,-3,-3,-3,-3,-4,-6,-5,-6}
}; //K模糊控制
char code dki[13][13]={{-6,-5,-6,-4,-3,-3,-3,-3,-2,-1,0,0,0},
{-5,-5,-5,-4,-3,-3,-3,-3,-2,-1,0,0,0},
{-6,-5,-6,-4,-3,-3,-2,-2,-2,-1,0,0,0},
{-5,-4,-4,-3,-3,-3,-2,-1,-1,0,2,2,2},
{-6,-4,-3,-3,-2,-2,-2,-1,0,2,3,3,3},
{-4,-4,-3,-3,-2,-1,-1,0,2,2,3,3,3},
{-3,-3,-3,-3,-2,-1,0,2,3,3,4,4,4},
{-3,-3,-3,-1,-1,0,2,2,3,3,4,5,5},
{-3,-3,-2,-1,0,2,3,3,3,3,4,5,6},
{-1,-1,-1,0,2,2,3,3,3,4,5,5,6},
{0,0,0,2,3,3,3,3,4,5,6,6,6},
{0,0,0,2,3,3,3,3,4,5,6,6,6},
{0,0,0,2,3,3,4,4,4,5,6,6,6}
};
char code dkd[13][13]={{3,0,-2,-3,-6,-5,-6,-5,-6,-4,-3,0,3},
{3,0,-2,-3,-5,-4,-4,-4,-4,-3,-3,0,2},
{3,0,-2,-3,-6,-4,-3,-3,-3,-3,-2,-1,0},
{2,0,-2,-3,-4,-4,-3,-3,-3,-3,-2,-1,0},
{0,-1,-2,-3,-3,-3,-3,-3,-2,-2,-2,-1,0},
{0,-1,-2,-3,-3,-3,-3,-3,-2,-2,-2,-1,0},
{0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,0},
{0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0},
{2,1,-1,0,2,2,2,2,2,2,2,2,2},
{6,1,-2,0,3,3,3,3,3,3,3,4,6},
{6,2,1,2,3,3,3,3,3,3,3,4,6},
{6,5,4,4,4,4,4,3,3,3,3,4,6}
};

本文引用地址:http://m.butianyuan.cn/article/201611/315911.htm

/*===========================================
函數(shù)功能:溫度自動(dòng)調(diào)節(jié)函數(shù)
============================================*/
void fuzzypid(void)
{
uchar te=0,tec=0;
float kp,ki,kd;
kp=0.35;
ki=0.001;kd=1.8;
Error = setPoint - rellytemp;
sumError+=Error;
dError =Error - LastError;
LastError=Error;
te=(uchar)(KE*Error+0.5)+6;
tec=(uchar)(KEC*dError+0.5)+6;
kp=kp+KPU*dkp[te][tec];
ki=ki+KIU*dki[te][tec];
kd=kd+KDU*dkd[te][tec];
uout=kp*Error+ki*sumError+kd*dError;
open_time=(int)(uout+0.5);
if(open_time>40)//PID限幅
open_time=40;
if(open_time<1)
open_time=0;
}



評(píng)論


技術(shù)專區(qū)

關(guān)閉