PID算法之增量式控制温度

来源:互联网 发布:淘宝微淘粉丝抢红包 编辑:程序博客网 时间:2024/05/17 17:55



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


一、简介

本文介绍PID增量式算法。



二、实验平台

电脑平台:无

编译软件:

硬件平台:


三、版权声明

博主:_懵懂

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

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

QQ:951795235

E-mail :951795235@qq.com

懵懂之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
  一看二调多分析,调节质量不会低

原创粉丝点击