📄 温度控制系统pid算法.txt
字号:
/*
* 文件名称:pid_adj
* 摘 要:温度调整程序
* 使 用:1.使用PID_init和int_tb_pwm,初始化pid三个系数定时器1
* 2.调用PID_c,调用一次调整一次pwm值,以控制输出电压大小,进而控制温度
* 当前版本:1.0
* 完成日期:2008年8月19日
*/
unsigned int pid[3] = {2500,5,0};//pid[0]为Kp pid[1]为Ti pid[2]为Td
unsigned int pid_A,pid_B,pid_C;
void PID_init(void)//pid[0]为Kp pid[1]为Ti pid[2]为Td,Ts = 1
{ //初始值为Ki = 4000;Ti = 65534;Td = 0
pid_A=pid[0]*1+pid[0]/pid[1]+pid[0]*pid[2]; //先不要积分环节即Ti=无穷大,Ts=1
pid_B=pid[0]*(1+2*pid[2]); //B=Kp(1+2Td/Ts)
pid_C=pid[0]*pid[2] ; //C=KpTd/Ts
}
void int_tb_pwm(void)
{
PWM_TB_ON;
TBCCR0 = 200;
TBCCR1 = 50;
TBCCTL1 = OUTMOD0+OUTMOD1+OUTMOD2; //输出模式选
TBCTL |= TBSSEL1+MC0;
}
void control_pwm(unsigned char i)//i为占空比,值为0~40,响应TBCCR1为0~80
{
if(i > 40) TBCCR1 = 80;
else if(i > 0) TBCCR1 = i*2;
else TBCCR1 = 0;
}
void PID_c(void)
{
float U0=0,Ua,Ub,Uc;
float static e0=0,e1=0,e2=0;
char pwm_value = 0;
e0=((float)temperature - (float)end_temp)/100;//需根据实际调节
Ua=pid_A*e0;
Ub=pid_B*e1;
Uc=pid_C*e2;
U0=Ua-Ub+Uc;//增量u0=A*e0+B*e1+C*e2;
U1 = U1+U0;
if(U1<=0) U1 = 0;//防止U1过大,调节比较慢
if(U1>4000) U1 = 4000;
pwm_value = (char)(U1/100);
control_pwm(pwm_value);
e2=e1;
e1=e0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -