pcbddd 发表于 2011-8-5 22:46:54

PID调节经验总结

PID调节经验总结
PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。依据经验,一般PID参数确定的步骤如下:
(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
float ek1;                      //偏差e
float ek2;                      //偏差e
float uk;                     //u
signed int uk1;               //对u四舍五入取整
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占空比
            }      
         }

本文来自: DSP交流网(www.hellodsp.com) 详细出处参考:http://www.hellodsp.com/bbs/viewthread.php?tid=688

pcbddd 发表于 2011-8-5 22:48:45

觉得还可以的话 不要忘了顶噢!!

pvcrobot 发表于 2011-8-9 17:18:35

要顶

kim5257 发表于 2011-8-9 17:35:06

一般PI就够用了。加D应该速度会更快一些吧

liwboy 发表于 2011-8-9 17:47:02

mark!

jetimchen 发表于 2011-8-9 17:48:24

看看

fjourdev 发表于 2011-8-9 19:40:01

是挺详细的并专业!顶下

ksws0482846 发表于 2011-8-9 22:22:31

PID,通俗。。

abcdzhy 发表于 2011-8-9 22:25:38

顶贴

along0425 发表于 2011-8-9 23:22:27

记下,

xyyjjb 发表于 2011-8-9 23:28:53

Mark

weixintec 发表于 2011-8-10 08:53:50

顶贴

jackwang123 发表于 2011-8-10 09:01:14

mark

mokang0421 发表于 2011-8-13 14:04:47

mark

wwwzxfeng 发表于 2011-8-13 16:57:55

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;
          }
这部分干什么用的啊 ?感觉怪

wwwzxfeng 发表于 2011-8-13 16:57:56

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;
          }
这部分干什么用的啊 ?感觉怪

conqueror_the 发表于 2011-8-14 11:21:47

不错学习了

luomofuhua 发表于 2011-8-15 20:07:05

不错。。。。。顶啊

bingshuihuo888 发表于 2011-8-16 10:21:48

要顶

brant_zhang 发表于 2011-8-16 22:51:28

顶一个

wkang11147 发表于 2011-8-17 16:33:01

回复【14楼】wwwzxfeng
-----------------------------------------------------------------------

小数处理,相当于四舍五入。

63256523 发表于 2011-8-17 16:37:52

PID还没用过

wangqi001 发表于 2011-8-20 09:53:51

MARK

maj87 发表于 2011-8-21 21:27:29

mark

xinjie1023 发表于 2011-8-22 21:30:22

收藏

li408326758li 发表于 2011-8-24 09:45:25

怎么知道超调了,怎么测呢??楼主

laugh 发表于 2011-8-24 15:44:40

受教了,有价值。

fskezncsxzh 发表于 2011-8-25 23:01:44

需要学习一下,马上就要用了

liwboy 发表于 2011-8-26 21:43:21

有用 !

FlashNuk 发表于 2011-8-26 22:18:37

很有用,谢谢楼主的辛苦!

bulinsheng 发表于 2011-8-30 09:42:08

mark

lmcc3648ljp 发表于 2011-8-30 21:03:40

顶贴,正找呢!谢谢哈

enzochan 发表于 2011-8-31 16:23:16

收藏

razgriz 发表于 2011-9-2 22:34:58

回复【31楼】li408326758li
-----------------------------------------------------------------------

我的做法是使用Delphi编写了一个靠串口通信的上位机软件时刻监测结果这样可以观察控制信号响应

chrisforbt 发表于 2011-9-3 22:41:04

unic 发表于 2011-9-8 21:26:01

mokang0421 发表于 2011-9-8 22:29:58

MARK

450277626 发表于 2011-9-9 08:42:10

虽然不错 但很笼统

dgitlover02 发表于 2011-9-9 13:21:10

懂了就不难,不懂就很难。哈哈。。。

cltx 发表于 2011-9-20 21:27:56

顶!

xofun 发表于 2011-9-22 21:28:47

学习

joycat 发表于 2011-9-22 21:32:59

感谢楼主分享!!

   对PID算法不太熟悉,程序有点看不懂。。。我再慢慢琢磨。。。

zfw811018 发表于 2011-9-29 13:48:54

MARK

373985805 发表于 2011-9-29 14:26:05

回复【楼主位】pcbddd
-----------------------------------------------------------------------

这玩意用到数字测量和闭环里头很有用

xwhua188 发表于 2011-9-29 14:36:37

感谢分享,顶一下!

dayday 发表于 2011-9-29 14:40:34

谢谢分享

stormfly 发表于 2011-9-29 16:55:50

swp105 发表于 2011-9-30 09:38:49

mark

281257913 发表于 2011-10-6 22:34:18

mark

manbu1999 发表于 2011-10-10 16:44:42

按照楼主的程序,kp=4,ki=0.8怎么发散到最后溢出了啊 楼主来给卢克卢克:
uk= uk1 + kp*(ek-ek1)+ki*ek;
                ek1=ek;
                ek=aim-uk;
                uk1=uk;
循环调整,最后双精度都溢出了。。。

intense 发表于 2011-10-11 15:46:52

mark

357853730 发表于 2011-10-11 16:37:11

最近我也在看关于PID的,谢谢楼主了

robotkid 发表于 2011-10-11 17:03:39

实在愚钝,经过几次才集中精神看了一下,明白了

phone 发表于 2011-10-12 08:31:26

pid有自整定的。

fk2011 发表于 2011-10-16 09:07:25

mark

ideality0214 发表于 2011-10-16 20:08:29

学习

rainbowzz 发表于 2011-10-17 20:50:59

MARK

yufengzheze 发表于 2011-10-24 19:35:23

PID很好

dlsz 发表于 2011-10-27 20:05:06

收藏!

chen1177 发表于 2011-10-29 13:17:23

收藏!

xuming07 发表于 2011-11-23 19:17:46

呵呵,过来看看

hellochen 发表于 2011-11-23 19:57:42

不错的资料,收了,谢谢楼主

szlbz 发表于 2011-11-23 21:59:33

留下记号备用。

fangyangwa123 发表于 2011-12-4 00:15:44

mark

zwhking 发表于 2011-12-4 01:03:30

好贴要顶

hitor 发表于 2011-12-4 23:59:33

mark

bingshuihuo888 发表于 2011-12-5 09:13:37

不错!

wmqian_09 发表于 2011-12-6 23:50:17

lxk52000 发表于 2012-1-3 23:40:41

顶了,十分感谢!

walux 发表于 2012-1-9 09:23:42

MARK

fk2011 发表于 2012-1-9 14:50:48

坛子里面之前有人发过

dingliming 发表于 2012-1-17 09:12:01

mark

bluegreener 发表于 2012-2-8 18:49:23

MARK.,

lisy0526 发表于 2012-2-8 21:28:59

回复【楼主位】pcbddd

-----------------------------------------------------------------------
学习中 帮顶

hymeng98 发表于 2012-2-21 10:02:55

学习了。

t2397362 发表于 2012-2-21 13:28:18

回复【3楼】kim5257
一般pi就够用了。加d应该速度会更快一些吧

-----------------------------------------------------------------------

加d会减小上升时间,同时减小振荡

dz2008dz 发表于 2012-2-22 14:56:24

MARK

ZWzw007aa 发表于 2012-3-29 22:11:34

mark,要顶一下

cyjkai 发表于 2012-3-29 23:01:13

收藏.....

田园牧歌 发表于 2012-5-15 13:27:22

MARK一下,正在学习捏。

tobo 发表于 2012-5-21 10:06:52

定~!!{:handshake:}

菜鸟stm32 发表于 2012-5-22 08:32:10

收藏了,谢谢啊

xiaohe669 发表于 2012-5-22 08:55:09

通俗易懂!!

yuyous 发表于 2012-5-23 10:17:49

mark                                    

qq5735 发表于 2012-5-24 15:06:01

新手学习了

cavalryman 发表于 2012-6-5 13:20:33

关注,顶贴

cxbbb 发表于 2012-6-5 13:36:30

不错,好资料,好好学习

zhihuzhe 发表于 2012-6-6 16:18:44

这计算出来的uk1和占空比有什么关系啊?就是怎么转化为占空比捏

岚岚uan 发表于 2012-6-8 18:22:48

我觉得挺好的,大家的看法呢

awesss_xm 发表于 2012-6-10 19:19:02

位置式PID

songzhe666 发表于 2012-6-12 08:36:13

{:sad:}{:sad:}

木love头 发表于 2012-6-26 08:59:55

wwwzxfeng 发表于 2011-8-13 16:57 static/image/common/back.gif
uk1=(signed int)uk;
       if(uk>0)
       {


应该是限幅的吧!!猜的

Lucky_Lucky 发表于 2012-7-9 20:41:42

不错,学习了

omlarn 发表于 2012-7-31 09:30:57

必须顶起!

vala 发表于 2012-8-4 17:17:01

好东西,顶一下

wzavr 发表于 2012-8-4 17:32:57

gabs( ) 这个函数是什么?哪里的?

maomeijian 发表于 2012-9-3 16:42:27

mark。。。

abcdzhy 发表于 2012-9-6 22:44:25

PID的P,I系数确实是个问题

215661599 发表于 2012-10-15 23:55:39

YOU1 发表于 2012-12-1 17:35:24

顶下了,努力总结哦
页: [1] 2
查看完整版本: PID调节经验总结