久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 交流 剛學(xué)PID的一點(diǎn)想法 [打印本頁(yè)]

作者: 天涯奇人    時(shí)間: 2013-3-6 21:32
標(biāo)題: 交流 剛學(xué)PID的一點(diǎn)想法
這幾天稍微看了一點(diǎn)點(diǎn)的PID,今天有了小小頭緒,于是,就想把自己的想法寫(xiě)出來(lái),歡迎拍磚。

     最開(kāi)始的時(shí)候,是先了解什么是PID。PID實(shí)指“比例proportional”、“積分integral”、“微分derivative”,如果我們要求被控制的對(duì)象最終趨于一個(gè)穩(wěn)定的結(jié)果,一般就可以使用PID算法。假設(shè)說(shuō),有一輛速度為1m/s的小車(chē),我們要求他的速度改變?yōu)?m/s,要完成這樣的一件事,我們必須要有,1.小車(chē)驅(qū)動(dòng)裝置(用程序控制它輸出多大的電壓,電壓決定驅(qū)動(dòng)的馬力),2.被驅(qū)動(dòng)器控制的部分(即小車(chē)),3.檢測(cè)當(dāng)前速度的裝置(當(dāng)前速度與目標(biāo)速度的差稱(chēng)為誤差)。本來(lái),我們可以給小車(chē)一個(gè)驅(qū)動(dòng)力讓小車(chē)加速,直到檢測(cè)到小車(chē)速度達(dá)到5m/s,撤去驅(qū)動(dòng)力。然而,這樣做會(huì)帶來(lái)幾個(gè)問(wèn)題。1,當(dāng)小車(chē)速度達(dá)到5m/s時(shí),從裝置檢測(cè)到這個(gè)速度,通知控制器,讓控制器改變輸出的電壓,這一個(gè)過(guò)程需要耗費(fèi)一定時(shí)間,在這個(gè)時(shí)間里面,小車(chē)速度可能增加了不少。2,撤去驅(qū)動(dòng)力后,外界條件如摩擦?xí)屝≤?chē)速度進(jìn)一步改變。PID算法可以在一定誤差內(nèi)解決這些問(wèn)題。
   使用PID算法時(shí),大致是這樣的。每一個(gè)采樣周期,通過(guò)速度檢測(cè)裝置獲得當(dāng)前速度,傳入程序,通過(guò)程序計(jì)算得到電壓控制小車(chē)得到新速度。下一個(gè)采樣周期又把新速度傳入,獲得新電壓,再傳入速度,再獲得電壓,如此反復(fù)。
   PID算法的關(guān)鍵,是如何根據(jù)當(dāng)前得到的速度值,輸出一個(gè)“恰當(dāng)”的電壓,以致小車(chē)最終能夠趨于穩(wěn)定。
      PID算法采用比例,積分,微分三種方法進(jìn)行控制。三種方法都有自己對(duì)應(yīng)的一個(gè)常量(pconst,iconst,dconst)。這三個(gè)變量都需要在實(shí)驗(yàn)中多次嘗試得出。
  一般地,先把與算法相關(guān)的量放入一個(gè)結(jié)構(gòu)體,方便調(diào)用。
  srtuct PID
     {
    double   pconst,    //比例控制常量
          iconst,     //積分控制常量
          dconst;    //微分控制常量
    double   ErrorSum;      //誤差累計(jì)
    double   iMax,iMin;      //積分上下限
    double   Vnew;         //當(dāng)前速度
         };
  比例:
    Vnew = GetV();            //獲得當(dāng)前速度
    error = aim - Vnew;      //誤差=目標(biāo)速度 - 當(dāng)前速度
    pTerm = error*pconst;     //比例項(xiàng)的值就是誤差乘上比例常量
    Motor(pTerm);    //讓電機(jī)根據(jù)得出的值工作
        有時(shí)候,我們?cè)龃蟊壤?shù)可以讓小車(chē)更快的到達(dá)目標(biāo)速度,但是過(guò)大的比例常數(shù)又容易產(chǎn)生過(guò)沖,即速度超過(guò)目標(biāo)速度5m/s,然后再減速,再加速,在減速。這樣,系統(tǒng)產(chǎn)生振蕩,然而,振蕩的結(jié)果不一定能趨于穩(wěn)定。

  積分:
                Vnew = GetV();            //獲得當(dāng)前速度
    ErrorSum += (aim - Vnew);      //每一次的誤差累計(jì)起來(lái)
    if(ErrorSum > iMax)ErrorSum = iMax;
    else if(ErrorSum < iMin)ErrorSum = iMin;
    iTerm = ErrorSum *iconst;     //誤差和乘上積分常量
    Motor(iTerm);    //讓電機(jī)根據(jù)得出的值工作
  一般我們都讓比例配合積分一起使用,即PI算法,類(lèi)似上面的程序,得出pTerm和iTerm,然后Motor(pTerm+iTerm)。PI控制一般會(huì)比純比例控制花費(fèi)更少時(shí)間使小車(chē)到達(dá)目標(biāo)值,但是我們必須避免積分飽和,通常的做法是像上面程序一樣設(shè)定iMax和iMin。它們和積分常量的大小相關(guān)。
  
  微分:
  我們用比例控制或者PI控制,都不能保證任何系統(tǒng)一定能趨于穩(wěn)定。比例控制根據(jù)現(xiàn)在來(lái)控制。積分控制根據(jù)過(guò)去來(lái)控制。而微分能夠根據(jù)將來(lái)來(lái)控制,非常強(qiáng)大,能使被控設(shè)備更好地趨于穩(wěn)定。
    Vnew = GetV();            //獲得當(dāng)前速度
    dTerm = (Vnew - Vlast)*dconst;     //當(dāng)前速度 - 上次速度,再乘微分常數(shù)
    Vlast = Vnew ;              //保留本次速度,下次當(dāng)成上次速度使用
    Motor(dTerm);    //讓電機(jī)根據(jù)得出的值工作
  同樣,微分控制也是與比例,積分一起使用,形成PID算法,Motor(pTerm+iTerm+dTerm)。
  微分控制相當(dāng)強(qiáng)大,然而也很容易出問(wèn)題。具體調(diào)控和整定我想等到實(shí)際應(yīng)用時(shí)再學(xué)習(xí)。

交流地址:http://bbs.21ic.com/icview-189462-1-1.html




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产综合精品一区二区三区 | 国产精品永久免费视频 | 九九av | 日韩第一区 | 国产精品一区二区无线 | 一区在线免费视频 | 日本精品久久久一区二区三区 | 综合精品久久久 | 欧美一区二区 | 伊人狠狠操 | 在线观看成人精品 | 91美女视频| 久久久免费电影 | 一区二区三区免费 | 亚洲一区 中文字幕 | 国产一区二区三区高清 | 天天草天天操 | 亚洲成人av一区二区 | 99re热精品视频国产免费 | 一级做a爰片久久毛片 | 欧美一级做性受免费大片免费 | 一区二区在线 | 久久成人精品视频 | 在线一区二区三区 | 狠狠干天天干 | 日韩欧美精品一区 | 91丨国产 | 老牛影视av一区二区在线观看 | 一区二区久久 | 日日操网站 | 国产精品久久久久久亚洲调教 | 97人人超碰 | 午夜视频在线 | 久久久精品网站 | 亚洲精品一区二区三区蜜桃久 | 欧美黄在线观看 | 男女性毛片 | 成人国产a | 亚洲第1页 | 亚洲一区电影 | 在线不卡视频 |