<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        PID算法原理及調整規律

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月03日   【字體:

        一、PID算法簡介

        在智能車競賽中,要想讓智能車根據賽道的不斷變化靈活的行進,PID算法的采用很有意義。
             首先必須明確PID算法是基于反饋的。一般情況下,這個反饋就是速度傳感器返回給單片機當前電機的轉速。簡單的說,就是用這個反饋跟預設值進行比較,如果轉速偏大,就減小電機兩端的電壓;相反,則增加電機兩端的電壓。
             顧名思義,P指是比例(Proportion),I指是積分(Integral),D指微分(Differential)。在電機調速系統中,輸入信號為正,要求電機正轉時,反饋信號也為正(PID算法時,誤差=輸入-反饋),同時電機轉速越高,反饋信號越大。要想搞懂PID算法的原理,首先必須先明白P,I,D各自的含義及控制規律:
        ² 比例P比例項部分其實就是對預設值和反饋值差值的發大倍數。舉個例子,假如原來電機兩端的電壓為U0,比例P0.2,輸入值是800,而反饋值是1000,那么輸出到電機兩端的電壓應變為U0+0.2*800-1000)。從而達到了調節速度的目的。顯然比例P越大時,電機轉速回歸到輸入值的速度將更快,及調節靈敏度就越高。從而,加大P值,可以減少從非穩態到穩態的時間。但是同時也可能造成電機轉速在預設值附近振蕩的情形,所以又引入積分I解決此問題。
        ² 積分I顧名思義,積分項部分其實就是對預設值和反饋值之間的差值在時間上進行累加。當差值不是很大時,為了不引起振蕩?梢韵茸岆姍C按原轉速繼續運行。當時要將這個差值用積分項累加。當這個和累加到一定值時,再一次性進行處理。從而避免了振蕩現象的發生?梢,積分項的調節存在明顯的滯后。而且I值越大,滯后效果越明顯。
        ² 微分D微分項部分其實就是求電機轉速的變化率。也就是前后兩次差值的差而已。也就是說,微分項是根據差值變化的速率,提前給出一個相應的調節動作?梢娢⒎猪椀恼{節是超前的。并且D值越大,超前作用越明顯?梢栽谝欢ǔ潭壬暇彌_振蕩。比例項的作用僅是放大誤差的幅值,而目前需要增加的是微分項,它能預測誤差變化的趨勢,這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負值,從而避免了被控量的嚴重超調。
        二、參數調整一般規則
        由各個參數的控制規律可知,比例P使反應變快,微分D使反應提前,積分I使反應滯后。在一定范圍內,P,D值越大,調節的效果越好。各個參數的調節原則如下:
        PID調試一般原則


        a.      在輸出不振蕩時,增大比例增益P。
        b.      在輸出不振蕩時,減小積分時間常數Ti。
        c.      輸出不振蕩時,增大微分時間常數Td。
        三、參數調整一般步驟
        a.確定比例增益P
        確定比例增益P 時,首先去掉PID的積分項和微分項,一般是令Ti=0、Td=0,PID純比例調節。輸入設定為系統允許的最大值的60%~70%,由0逐漸加大比例增益P,直至系統出現振蕩;再反過來,從此時的比例增益P逐漸減小,直至系統振蕩消失,記錄此時的比例增益P,設定PID的比例增益P為當前值的60%~70%。比例增益P調試完成。
         
        b.確定積分時間常數Ti
        比例增益P確定后,設定一個較大的積分時間常數Ti的初值,然后逐漸減小Ti,直至系統出現振蕩,之后在反過來,逐漸加大Ti,直至系統振蕩消失。記錄此時的Ti,設定PID的積分時間常數Ti為當前值的150%~180%。積分時間常數Ti調試完成。
         
        c.確定積分時間常數Td
         
        積分時間常數Td一般不用設定,為0即可。若要設定,與確定 PTi的方法相同,取不振蕩時的30%。
         
        d.系統空載、帶載聯調,再對PID參數進行微調,直至滿足要求
        找三個以上PID算法應用實例,結合實例明確參數調試的方法以及參數的意義,同時給小組成員做介紹
         
        一、PID算法:
        比例、積分、微分控制,簡稱PID控制,又稱PID調節;
        二、應用環境:
        當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以采用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定;(由于賽道的參數事先未知,所以只能根據實時采集到的賽道數據控制小車沿著賽道行進
        三、PID算法應用實例
         
        四、參數調整
         
         
        PID控制器參數選擇的方法很多,例如試湊法、臨界比例度法、擴充臨界比例度法等。但是,對于PID控制而言,參數的選擇始終是一件非常煩雜的工作,需要經過不斷的調整才能得到較為滿意的控制效果。依據經驗,一般PID參數確定的步驟如下:
        (1)確定比例系數Kp
        確定比例系數Kp時,首先去掉PID的積分項和微分項,可以令Ti=0、Td=0,使之成為純比例調節。輸入設定為系統允許輸出最大值的60%~70%,比例系數Kp0開始逐漸增大,直至系統出現振蕩;再反過來,從此時的比例系數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占空比
                      }       
                   }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮