智能车制作

标题: PID调节经验总结 [打印本页]

作者: qual9109    时间: 2013-1-14 22:14
标题: PID调节经验总结
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调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。
(4)        系统空载、带载联调
对PID参数进行微调,直到满足性能要求。





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占空比
              }        
           }


作者: mxj1005071012    时间: 2013-1-14 22:16
PID还没学,正好看看
作者: yukunlinykl    时间: 2013-1-14 22:22
上述算法通常都是由人脑来完成的。
作者: 270136977    时间: 2013-1-14 22:32
学习学习
作者: liuyuliuyu1216    时间: 2013-1-14 22:37
顶一个
作者: tanry53    时间: 2013-1-14 22:47

作者: dlyt03    时间: 2013-1-14 23:04
学习下
作者: seakid    时间: 2013-1-14 23:15

作者: 叶子一哥    时间: 2013-1-14 23:26
学了,谢谢啊
作者: 我爱小kb    时间: 2013-1-14 23:47
顶一个
作者: 1006110218    时间: 2013-1-15 09:27
顶下!
作者: 暴走兄弟    时间: 2013-1-15 11:57

作者: 音之夏萤    时间: 2013-1-15 15:04

作者: wen123    时间: 2013-1-15 15:27

作者: lx1122334    时间: 2013-1-15 17:07


作者: qual9109    时间: 2013-1-15 23:13

作者: Dwe    时间: 2013-1-30 19:56
实望自己,也能对PID有如此之体悟,学了
作者: yangbw4978    时间: 2013-1-30 22:34
学习了 哈哈
作者: 暖暖10312138    时间: 2013-2-3 20:20

作者: 用户不存在    时间: 2013-2-4 16:17
学习了
作者: 潜水一厮    时间: 2013-2-9 04:55
留爪
作者: 蓝枫2012    时间: 2013-2-25 21:04
怎么看是否出现震荡?

作者: mazhaoyang    时间: 2013-2-26 20:28
gabs(ek)<0.1   是啥函数啊
请楼主解答

作者: cqhb小麦    时间: 2013-3-10 12:12
学习一下哈

作者: Mumu.Y    时间: 2013-3-10 23:45
顶下!
作者: DOUxiaoshuai    时间: 2013-3-11 17:57
楼主有没有遇到这样的问题  在单纯调P的时候  由于P特别小  而需要的PWM特别大   这样就要等老长的时间才能启动起来   怎样解决啊   求指导!
作者: Dwe    时间: 2013-3-24 08:30
学习了
作者: pry1989    时间: 2013-3-26 12:12
学习一下
作者: 百川汇流    时间: 2013-3-26 15:14
学习了
作者: 时光茶居    时间: 2013-3-31 21:58
谢谢,学习学习。
作者: 林的0922    时间: 2013-4-1 16:33
:)
作者: KAKA10    时间: 2013-4-9 10:53
怒学习
作者: AACQ3    时间: 2013-4-9 15:29
补下
作者: 晨光燊    时间: 2013-4-9 20:52
好东西
作者: 简单丹    时间: 2013-4-15 00:49
学习学习
作者: 墨羽飞    时间: 2013-4-15 19:39
学习学习~~~
作者: Fong    时间: 2013-4-17 12:52

作者: warn00    时间: 2013-4-23 20:36
学习学习。。。
作者: uli12345    时间: 2013-6-15 18:09
正头疼这个问题呢,谢谢启发!
作者: 3009    时间: 2013-6-18 12:14
介个···真心百度文库搜到过···
作者: xhyscqcssllw    时间: 2013-6-18 22:03
理解能理解了   可是还是有些地方看不太明白
作者: 梦已过    时间: 2013-6-23 16:40

作者: hj911024    时间: 2013-6-23 21:57
不错,学习下
作者: zyh無_煙_無_尘    时间: 2013-6-24 00:21
系统空载、带载联调   什么意思啊
作者: 。浅岸    时间: 2013-7-7 21:09

作者: asdf123    时间: 2013-8-27 19:15
dingyige   
作者: 顾笑斐    时间: 2013-8-31 09:57
学习了
作者: 追风style    时间: 2013-9-7 10:30
是的!
作者: 春日迟迟    时间: 2013-9-12 17:58
:):)
作者: 柒年ヾ追梦    时间: 2013-10-23 21:26
学习
作者: kk228    时间: 2013-11-2 09:16

作者: MicroJIA    时间: 2013-11-2 14:45
gabs() 是什么
作者: 胡天天    时间: 2013-11-3 17:31
学习学习!!
作者: 麦田里的守望者    时间: 2013-11-20 19:01
我看着有点不舒服,有点不对劲

作者: 青青水草    时间: 2013-11-20 19:21

作者: mengyu139    时间: 2013-11-21 22:56
新手,学习
作者: 彼岸花开洒落    时间: 2014-1-17 21:29
学习
作者: 两条线223    时间: 2014-1-20 20:13

作者: 两条线223    时间: 2014-3-22 12:19

作者: guolei6649    时间: 2014-4-18 01:43
从网上copy的吧,百度上到处都是这个
作者: jianpeng    时间: 2014-4-19 10:49
:lol:lol凑热闹
作者: 逆光的空白    时间: 2014-4-19 12:38
马克
作者: wgw5820974944    时间: 2014-8-9 10:43
学习了
作者: 子非鱼199205    时间: 2014-8-9 22:11
表示每次调参数的时候都是先设为零,然后就一个个调,单一变量法各种神烦
作者: 287218954    时间: 2015-3-2 10:36
学习学习
作者: finder    时间: 2015-3-24 20:34
不错!!
作者: seuStones    时间: 2015-3-26 20:18
赞赞赞!
作者: 高峰    时间: 2015-3-27 23:55
初学者,想问一下为什么要用最大值的60%~70%进行测试,这60%~70%是指占空比吗? 还有就是那个gabs()函数是什么
作者: 沙漏、、、    时间: 2015-3-28 16:54
自动化的公式...
作者: 沙漏、、、    时间: 2015-3-28 16:56
感觉实质要求是当有阻力时快速调整加速,让输出速度和目标速度一致、 、 、
作者: 微光刺眼    时间: 2015-5-5 19:40
:):):):)
作者: benben123    时间: 2015-5-11 15:24
希望早点学会
作者: xxxxxaoo    时间: 2015-5-13 07:59
楼主好人
作者: 生活不相信祝福    时间: 2015-5-13 22:16
顶一个
作者: xueyitianshi    时间: 2015-7-6 15:01
赞一个
作者: danxiao898    时间: 2015-11-3 21:16
学习一下
作者: Sτrīvé___    时间: 2015-12-4 14:37
顶起来!!!!!
作者: 我爱小白白    时间: 2016-3-5 15:36
:):):victory::victory:
作者: 王锋MX    时间: 2016-4-15 17:22
学习一下
作者: sunshuai1    时间: 2016-6-30 19:54
学习学习
作者: 阳关西    时间: 2016-10-22 17:31
【表情】
作者: 蝶舞翩跹    时间: 2016-10-24 18:50
没学PID呢,完全没看懂
作者: imo    时间: 2016-11-19 13:04
我只想问怎么确定等幅震荡??去大神说明一下

作者: xueliang    时间: 2017-7-17 21:38
PID系数不用浮点型,而用整型,会有这样的不良后果?

作者: efreeworm    时间: 2017-12-12 13:34
好东西,要顶起




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2