首页资源分类嵌入式系统 > pid算法原理

pid算法原理

已有 445117个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:理解PID原理

    分    享:

    文档简介

    学习PID的初学者必看

    文档预览

    PID算法原理、调试经验以及代码(转载) 热1已有 631 次阅读  2009-05-05 21:35   标签:  PID  算法  原理  经验  代码  1。PID原理 2.流程图   3。PID代码 //定义变量 float Kp;                       //PI调节的比例常数 float Ti;                       //PI调节的积分常数 float T;                        //采样周期 float Ki; float ek;                       //偏差e[k] float ek1;                      //偏差e[k-1] float ek2;                      //偏差e[k-2] float uk;                       //u[k] signed int uk1;                 //对u[k]四舍五入取整 signed int adjust;              //调节器输出调整量 //变量初始化     Kp=4;     Ti=0。005;     T=0.001; // Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数     ek=0;     ek1=0;     ek2=0;     uk=0;     uk1=0;     adjust=0; int piadjust(float ek)  //PI调节算法 {     if( gabs(ek)<0.1 )     {        adjust=0;     }     else     {             uk=Kp*(ek-ek1)+Ki*ek;  //计算控制增量        ek1=ek;               uk1=(signed int)uk;        if(uk>0)        {           if(uk-uk1>=0.5)           {              uk1=uk1+1;           }        }        if(uk<0)        {           if(uk1-uk>=0.5)           {              uk1=uk1-1;           }        }        adjust=uk1;        }                     return adjust; } 下面是在AD中断程序中调用的代码。               。。。。。。。。。。。        else //退出软启动后,PID调节,20ms调节一次            {               EvaRegs.CMPR3=EvaRegs.CMPR3+piadjust(ek);//误差较小PID调节稳住               if(EvaRegs.CMPR3>=890)               {                  EvaRegs.CMPR3=890; //限制PWM占空比               }                    }         。。。。。。。。。。。。。。。。 4。PID调节经验总结 PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。依据经验,一般PID参数确定的步骤如下[42]: (1)        确定比例系数Kp 确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为 纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。 (2)        确定积分时间常数Ti 比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。 (3)        确定微分时间常数Td 微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Ti的方法相同,取不振荡时其值的30%。 (4)        系统空载、带载联调 对PID参数进行微调,直到满足性能要求。 上面的实际是PI调节的代码,现附上PID的。 1. //声明变量 2. 3. //定义变量 4. float Kp;                       //PID调节的比例常数 5. float Ti;                       //PID调节的积分常数 6. float T;                        //采样周期 7. float Td;                       //PID调节的微分时间常数 8. float a0; 9. float a1; 10. float a2; 11. 12. float ek;                       //偏差e[k] 13. float ek1;                      //偏差e[k-1] 14. float ek2;                      //偏差e[k-2] 15. float uk;                       //u[k] 16. int uk1;                      //对uk四舍五入求整 17. int adjust;                   //最终输出的调整量 18. 19. //变量初始化,根据实际情况初始化 20.     Kp=; 21.     Ti=; 22.     T=; 23.         Td=;    24. 25.         a0=Kp*(1+T/Ti+Td/T); 26.         a1=-Kp*(1+2*Td/T); 27.         a2=Kp*Td/T; 28. // Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数 29.     ek=0; 30.     ek1=0; 31.     ek2=0; 32.     uk=0; 33.         uk1=0; 34.         adjust=0; 35. 36. 37. int pid(float ek) 38. { 39.     if(gabs(ek)0) 51.                 { 52.            if(uk-uk1>=0.5) 53.                    { 54.               uk1=uk1+1; 55.                    } 56.                 } 57.        if(uk<0) 58.            { 59.           if(uk1-uk>=0.5) 60.                   { 61.              uk1=uk1-1; 62.                   } 63.            } 64.           65.            adjust=uk1;    66.     } 67.         return adjust; 68.     69. } 70. 71. float gabs(float ek) 72. { 73.         if(ek<0) 74.         { 75.                 ek=0-ek; 76.         } 77.         return

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。