tec控制pid程序_单片机中实现模糊控制PID程序

本文介绍了一个在单片机中实现模糊控制PID的程序,详细给出了PID参数KPU、KIU、KDU、KE和KEC的定义,并展示了模糊控制表dkp、dki和dkd。通过fuzzypid函数,动态调整PID控制器的增益,实现温度自动调节,同时进行了限幅处理以保证输出稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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://www.eepw.com.cn/article/201611/315911.htm

/*===========================================

函数功能:温度自动调节函数

============================================*/

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值