PID算法之增量式控制温度

 

本篇博文最后修改时间:2017年08月20日 23:00。

 

一、简介

本文介绍PID增量式算法。

 

二、实验平台

电脑平台:无

编译软件:无

硬件平台:无

 

三、版权声明

博主:_懵懂

声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。

原文地址:http://blog.csdn.NET/qq_18842031

懵懂之MCU交流群:136384801

 

四、实验前提

暂无。

 

五、基础知识

暂无

 

六、源码地址

暂无

 

七、关联文章

暂无

 

八、讲述内容

1、PID算法之增量式控制温度

本次增量式:

△OUT= OUTK- OUTk-1=kp(EK-EK-1)+((Kp*T)/Ti)Ek+(((Kp*TD)/T)*(Ek-2Ek-1+Ek-2)

C代码:

 

unsigned int pidtimer;      //定时器计时
void PIDCalc(int Sv,int Pv)  // Sv设定温度值  Pv当前温度值
{
  int DERR1 = 0;       //
  int DERR2 = 0;       //
  
  float Pout = 0;       //比例结果
  float Iout = 0;       //积分结果
  float Dout = 0;       //微分结果
  unsigned int Out = 0; //总输出
  static unsigned int Out1;  //记录上次输出
  
  static int ERR;       //当前误差
  static int ERR1;      //上次误差
  static int ERR2;      //上上次误差
  
  /******************
  *以下四项是需要根据实际情况调试的
  ******************/
  static int pidt = 300;     //300MS计算一次 计算周期
  static char Kp = 30;       //比例系数
  static unsigned int Ti= 5000; //积分时间
  static unsigned int Td= 600; //微分时间
  
  static unsigned char Upper_Limit= 100; //PID输出上限
  static unsigned char Lower_Limit= 0; //PID输出下限
  
  
  if(pidtimer < pidt)     //计算周期   pidtimer可以用定时器计时
    return ;  //
  
  ERR = Sv - Pv;   //算出当前误差
  DERR1 = ERR - ERR1;   //上次
  DERR2 = ERR - 2 * ERR1 + EER2; //上上次
  
  Pout = Kp * DERR1;    //输出P
  Iout = (float)(ERR * ((Kp * pidt) / Ti));  //输出I
  Dout = (float)(DERR2 * ((Kp * Td) / pidt));   //输出D
  Out = (unsigned int)(Out1 + Pout + Iout + Dout);
  
  if(Out >= Upper_Limit)   //如果输出大于等于上限
  {
    Out = Upper_Limit;
  }
  else if(Out <= Lower_Limit)  //如果输出小于等于下线
  {
    Out = Lower_Limit
  }
  Out1 = Out;      //记录这次输出的值
  
  ERR2 = ERR1;    //记录误差
  ERR1 = ERR;     //记录误差
  pidtimer = 0;   //定时器清零重新计数
}

 

PID参数调节口诀

参数整定找最佳,从小到大顺序查
  先是比例后积分,最后再把微分加
  曲线振荡很频繁,比例度盘要放大
  曲线漂浮绕大湾,比例度盘往小扳
  曲线偏离回复慢,积分时间往下降
  曲线波动周期长,积分时间再加长
  曲线振荡频率快,先把微分降下来
  动差大来波动慢。微分时间应加长
  理想曲线两个波,前高后低4比1
  一看二调多分析,调节质量不会低

你可能感兴趣的:(算法)