智能车制作

标题: PID经典解释和例子(觉得很经典就转过来个大家看看) [打印本页]

作者: 椰.耶喽较瘦.    时间: 2012-7-11 08:34
标题: PID经典解释和例子(觉得很经典就转过来个大家看看)
PID形象解释
小明接到这样一个任务:
有一个水缸点漏水(而且漏水的速度还不一定固定不变),
要求水面高度维持在某个位置,
一旦发现水面高度低于要求位置,就要往水缸里加水。
小明接到任务后就一直守在水缸旁边,
时间长就觉得无聊,就跑到房里看小说了,
每30分钟来检查一次水面高度。水漏得太快,
每次小明来检查时,水都快漏完了,离要求的高度相差很远
,小明改为每3分钟来检查一次,结果每次来水都没怎么漏
,不需要加水,来得太频繁做的是无用功。几次试验后,
确定每10分钟来检查一次。这个检查时间就称为采样周期。
开始小明用瓢加水,水龙头离水缸有十几米的距离,
经常要跑好几趟才加够水,于是小明又改为用桶加,
一加就是一桶,跑的次数少了,加水的速度也快了,
但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,
我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,
也不会让水溢出。这个加水工具的大小就称为比例系数。
小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多
,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,
每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,
但加水的速度又慢了,有时还赶不上漏水的速度。
于是他试着变换不同大小口径的漏斗来控制加水的速度
,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间 。
小明终于喘了一口,但任务的要求突然严了,
水位控制的及时性要求大大提高,一旦水位过低,
必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。
小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,
一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。
他又在要求水面位置上面一点将水凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。
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;
}


补充内容 (2012-7-17 09:07):
float gabs(float ek)
{
    if (ek > 0) return ek;    else return -ek;
}

作者: junjie520    时间: 2012-7-11 09:22
顶。。。。
作者: 木木勇    时间: 2012-7-11 09:25

作者: 低调!!!!    时间: 2012-7-11 09:57
搞起!!!!!!
作者: chengjaven    时间: 2012-7-11 10:06

作者: 有志者事竟成    时间: 2012-7-11 13:02

作者: 有志者事竟成    时间: 2012-7-11 13:02
不错
作者: B组    时间: 2012-7-11 13:15
老师要是能这么讲课就好了.
作者: 卡卡a    时间: 2012-7-11 13:22
必须顶
作者: 軌跡。    时间: 2012-7-11 13:37
顶个
作者: ljl1033835624    时间: 2012-7-11 15:53
又理解了一遍,更清晰了!!!
作者: lixin101357    时间: 2012-7-11 19:24
楼主,顶起!!!
作者: 强者    时间: 2012-7-12 20:14
顶。。。。
作者: Y_N    时间: 2012-7-13 12:19
不错不错!
作者: zyj19911112    时间: 2012-7-13 14:41

作者: 北斗STONE    时间: 2012-7-13 14:57
不错不错
作者: wendaoxyp    时间: 2012-7-13 18:29
很不错
作者: ▄︻┻═┳一    时间: 2012-7-13 19:17
顶顶
作者: ljl1033835624    时间: 2012-7-15 23:11
楼主,你的程序中有点问题啊!!if( gabs(ek)<0.1 )这个里面的gabs没有定义啊!?
作者: zsk-    时间: 2012-7-16 06:23
搞起
作者: 椰.耶喽较瘦.    时间: 2012-7-16 08:30
ljl1033835624 发表于 2012-7-15 23:11
楼主,你的程序中有点问题啊!!if( gabs(ek)

这个子函数就是取绝对值的函数。
float gabs(float ek)
{
    if (ek > 0) return ek;    else return -ek;
}


作者: xining_yang    时间: 2012-7-17 04:13

作者: dlutccj    时间: 2012-7-17 16:40

作者: wushshsha    时间: 2012-7-17 20:44

作者: 期待着你2010    时间: 2012-7-19 14:33

作者: nst11305    时间: 2012-7-26 00:22
额,初学者,我还要加油
作者: 易手乛天    时间: 2012-8-13 17:00
顶了
作者: icitydesk    时间: 2012-8-15 14:29
这种形象的对新手最好了
作者: 刘畅    时间: 2012-8-18 09:03
顶一个,很形象啊
作者: 叶子一哥    时间: 2012-8-18 10:31
顶起,谢了
作者: 禾ζ物    时间: 2012-8-19 11:20
讲的简单易懂,谢啦。
作者: 774960834    时间: 2012-8-31 17:48
还能讲多点吗
作者: 1228463834    时间: 2012-9-1 08:46

作者: 吢冇紷蒠    时间: 2012-9-1 20:42
好东西
作者: jjz921024    时间: 2012-9-1 23:54
这个必须顶啊,仔细理解
作者: 1228463834    时间: 2012-9-2 09:33

作者: hnpdslibing    时间: 2012-9-4 16:34
不错

作者: 期待着你2010    时间: 2012-9-7 08:50

作者: 赵彤山东    时间: 2012-10-15 21:03
丘比!!
作者: @光风霁月    时间: 2012-10-16 20:57
LZ 牛
作者: icitydesk    时间: 2012-10-17 00:57

作者: xiaojiong    时间: 2012-10-18 00:47
{:soso_e179:}
作者: 陌路樱花泪    时间: 2012-10-21 15:38
太牛了,好帖子啊
作者: zhoupeiyi008    时间: 2012-11-8 13:31

作者: w717342899    时间: 2012-11-9 12:44
我擦,这个必须顶
作者: 瓜豪gh    时间: 2012-11-10 19:04

作者: 瓜豪gh    时间: 2012-11-10 19:04

作者: 前行者cross    时间: 2012-11-10 19:50
学习了

作者: V_晓星    时间: 2012-11-10 20:31

作者: zoehu    时间: 2012-11-10 22:28

作者: kido    时间: 2012-11-12 14:13
:o
作者: shenghui    时间: 2012-11-12 18:12

作者: 昌林旺旺    时间: 2012-11-16 01:22

作者: guanglidu    时间: 2012-11-16 08:52

作者: 夏夜之星    时间: 2012-11-16 10:10

作者: wkhuahuo    时间: 2012-11-17 09:08
顶啊,很好很强大
作者: 氺朩哖譁o(∩_∩    时间: 2012-11-17 16:06
必须顶个

作者: dynasty--sen    时间: 2012-11-17 23:16
顶一个~~
作者: 小角色    时间: 2012-11-18 14:36
不错 看了比较容易懂   谢谢楼主
作者: 小三爷    时间: 2012-11-18 18:47
还行
作者: zhth20    时间: 2012-11-18 23:36
【默默的 点顶
作者: 側祐沵茬    时间: 2012-11-29 17:54
顶一个
作者: 天方夜潭    时间: 2012-12-1 07:56
顶!!!
作者: yangshenle    时间: 2012-12-1 18:12

作者: wen123    时间: 2012-12-2 11:56
相当好!!!
作者: WD2012WD    时间: 2013-1-15 20:30
  看来我的编程功底还要再学习学习,没到家。
作者: cmwanysys    时间: 2013-1-17 21:15
不错
作者: melon_1    时间: 2013-1-19 21:07
经典!!!
作者: K吉可德    时间: 2013-1-19 23:22
好东西
作者: 幻城淡然    时间: 2013-1-20 02:06
顶一个
作者: 程伟NO.1    时间: 2013-1-20 15:10

作者: cqhb小麦    时间: 2013-3-12 17:17
pid,有点纠结呀?求指导
作者: 避风港1717    时间: 2013-3-12 18:25

作者: 飞鸿印雪    时间: 2013-3-15 17:21
额  我境界还没到
作者: lpp5301308    时间: 2013-3-15 20:44
厉害~~~~
作者: 小蛇丸    时间: 2013-3-15 21:21
谢谢呢,讲得真好
作者: 1012193070    时间: 2013-3-15 22:09
{:soso_e179:}
作者: dlyt03    时间: 2013-3-15 23:27
有意思!!!!
作者: guangzhejiaoya    时间: 2013-3-25 11:55
好东西啊
作者: lgh183    时间: 2013-3-25 13:03


作者: song_pf    时间: 2013-4-9 18:14
ding
作者: 小小金刚    时间: 2013-4-9 18:57
顶个!
作者: 嚜綠铯の氺    时间: 2013-5-5 17:25
赞,顶起
作者: lyb    时间: 2013-5-5 17:33
顶起
作者: 清风流水隐士    时间: 2013-5-11 16:11
强!!!
作者: 1655153513    时间: 2013-5-12 15:50
挺好

作者: kjdxlc    时间: 2013-7-21 10:27
好东西
作者: 石头王    时间: 2013-8-29 10:38
不错
作者: 小天sky    时间: 2016-10-16 15:58
顶。。。。




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