<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      PID詳解1(理論+整定方法)

      PID詳解(理論+應用)

           ~~~~     最近研究智能小車這個方面,發現這個課題貌似已經被研究透了,僅僅在CSDN中就能搜索到無數的相關博文。但我查看一些博文的時候,隱隱感覺出作者君似乎也僅僅處于似懂非懂的階段,又或者他用的是春秋筆法所以模糊了一些關鍵點?為了記錄下自己看過的博文并且自我總結一些相關方面,在此提筆記錄一下自己的研究過程。

      理論基礎:

      PID是什么?

      工業過程中廣泛采用的三作用控制器,也稱PID控制器(PID controller).

      P: (Proportional)比例;
      I : (Integral)積分;
      D:(Derivative)微分;

      時域輸出方程:

      u ( t ) = K P ? e ( t ) + K I ? ∫ e ( t ) + K D ? d e ( t ) d t u(t)=K_P*e(t) +K_I*\int e(t)+K_D*\frac{de(t)}{dt} u(t)=KP??e(t)+KI??e(t)+KD??dtde(t)?

      編程中我們更多用到的是這個方程的數字式:

      U [ k ] = K P ? e r r [ k ] + K I ? ∑ e r r [ k ] + K D ? ( e r r [ k ] ? e r r [ k ? 1 ] ) U[k]=K_P*err[k]+K_I*\sum err[k]+K_D*(err[k]-err[k-1]) U[k]=KP??err[k]+KI??err[k]+KD??(err[k]?err[k?1])

      由基本的自控知識可得到傳遞函數:

      G c ( s ) = U ( s ) E ( s ) = K P + K I s + K D ? s Gc(s)=\frac{U(s)}{E(s)}=K_P+\frac{K_I}{s}+K_D*s Gc(s)=E(s)U(s)?=KP?+sKI??+KD??s

      其中可調的三個參數就是:

      K P K_P KP?:比例增益 Proportional gain
      K I K_I KI? :積分增益 Integral gain
      K D K_D KD?:微分增益 Derivative gain

      • 但很多情況下,我們不需要使用到全部的三種手段,經過排列組合就出現了P、PI、PD這種不完全版的控制器。

      在工業中,更多采用傳統的PID控制器:

              u ( t ) = 100 P ( e ( t ) + 1 T 1 ∫ e ( t ) d t + T D d e ( t ) d t ) ~~~~~~~u(t)=\frac{100}{P}(e(t)+\frac{1}{T_1}\int e(t)dt+T_D\frac{de(t)}{dt})        u(t)=P100?(e(t)+T1?1?e(t)dt+TD?dtde(t)?)

      其中:
      P : 比例帶(%)
      T 1 T_1 T1? :積分時間(s)
      T D T_D TD?:微分時間(s/min)

      對比之前的公式,我們得到:

      K P = 100 P K_P = \frac{100}{P} KP?=P100?
      K I = 100 P ? 1 T 1 K_I = \frac{100}{P}*\frac{1}{T_1} KI?=P100??T1?1?
      K D = 100 P ? T D K_D=\frac{100}{P}*T_D KD?=P100??TD?

           ~~~~     在工業的高精度要求與復雜處理環境下,我們對微積分時間的關注度更高。但在平時的小設計沒有必要采用這一套體系。

           ~~~~     在實際應用中,反饋測量信號往往混雜高頻噪聲,微分處理則會放大這些噪聲,所以這里我們需要濾波來去除高頻噪聲。

           ~~~~     所以這里我們的微分項在實際實現是采用:

            G d ( s ) = K D s τ d s + 1 ~~~~~G_d(s)=\frac{K_Ds}{\tau_d s+1}      Gd?(s)=τd?s+1KD?s?

      其中:
      τ d \tau_d τd? 作為濾波時間常數,遠遠小于過程本身的時間,可以忽略。

      位置式PID和增量式PID

      位置式PID與增量式PID區別淺析:參考博文原址

      位置式PID:

      還是這個公式:
      在這里插入圖片描述
      其中誤差

      P : e ( k ) = 設定值 ? 當前狀態值 P: e(k) = 設定值 - 當前狀態值 P:e(k)=設定值?當前狀態值
      I : ∑ e ( i ) = 誤差的累加 I : \sum e(i) = 誤差的累加 I:e(i)=誤差的累加
      D : e ( k ) ? e ( k ? 1 ) = 本次誤差 ? 上一次的誤差 D: e(k) - e(k-1) = 本次誤差 - 上一次的誤差 D:e(k)?e(k?1)=本次誤差?上一次的誤差

      位置式PID是對:當前系統的實際位置與你預期位置的偏差 進行PID控制。

      通常PD控制器就可以滿足位置式PID:

      因為有誤差積分 ∑e(i),一直累加,也就是當前的輸出u(k)與過去的所有狀態都有關系,用到了誤差的累加值;(誤差e會有誤差累加),輸出的u(k)對應的是執行機構的實際位置,,一旦控制輸出出錯(控制對象的當前的狀態值出現問題 ),u(k)的大幅變化會引起系統的大幅變化
      并且位置式PID在積分項達到飽和時,誤差仍然會在積分作用下繼續累積,一旦誤差開始反向變化,系統需要一定時間從飽和區退出,所以在u(k)達到最大和最小時,要停止積分作用,并且要有積分限幅和輸出限幅。
      所以在使用位置式PID時,一般我們直接使用PD控制
      而位置式 PID 適用于執行機構不帶積分部件的對象,如舵機和平衡小車的直立和溫控系統的控制

      typedef struct PID
      { 
        float P,I,D,limit;
      }PID;
       
      typedef struct Error
      {
        float Current_Error;//當前誤差
        float Last_Error;//上一次誤差
        float Previous_Error;//上上次誤差
      }Error;
       
      /*! 
       *  @brief      位置式PID
       *  @since      v1.0
       *  *sptr :誤差參數
       *  *pid:  PID參數
       *  NowPlace:當前位置
       *  Point:   預期位置  
       */
       
      // 位置式PID控制
      float PID_Realize(Error *sptr,PID *pid, int32 NowPlace, float Point)
      {
       
      	int32 iError,	// 當前誤差
      		 Realize;   //實際輸出	
       
      	iError = Point - NowPlace;	// 計算當前誤差
      	sptr->Current_Error += pid->I * iError;	// 誤差積分
            sptr->Current_Error = sptr->Current_Error > pid->limit?pid->limit:sptr->Current_Error;//積分限幅
            sptr->Current_Error = sptr->Current_Error <-pid->limit?-pid->limit:sptr->Current_Error;
      	Realize = pid->P * iError       //比例P
                  + sptr->Current_Error   //積分I
      			+ pid->D * (iError - sptr->Last_Error);  //微分D
      	sptr->Last_Error = iError;		  	// 更新上次誤差
      	return Realize;	// 返回實際值
      }
      
      增量式PID

      Δ u [ k ] = u [ k ] ? u [ k ? 1 ] \Delta u[k] = u[k]-u[k-1] Δu[k]=u[k]?u[k?1]
      = K P [ e [ k ] ? e [ k ? 1 ] ] + K I e ( k ) + K D [ e [ k ] ? 2 e [ k ? 1 ] + e [ k ? 2 ] ] =K_P[e[k]-e[k-1]]+K_Ie(k)+K_D[e[k]-2e[k-1]+e[k-2]] =KP?[e[k]?e[k?1]]+KI?e(k)+KD?[e[k]?2e[k?1]+e[k?2]]

      P : e ( k ) ? e ( k ? 1 ) = P: e(k)-e(k-1)= P:e(k)?e(k?1)= 本次誤差 - 上一次的誤差

      I : e ( i ) = I : e(i) = I:e(i)= 誤差

      D : e [ k ] ? 2 e [ k ? 1 ] + e [ k ? 2 ] ¥ D: e[k]-2e[k-1]+e[k-2]¥ D:e[k]?2e[k?1]+e[k?2] = 本次誤差 - 2*上一次的誤差+上上次誤差

      增量式PID的控制量 Δ u ( k ) \Delta u(k) Δu(k)是最近幾次誤差的增量,而不是實際的誤差,沒有誤差累加
      所以增量式PID不需要累加,只需要最近的相鄰三次誤差就可以通過加權獲得比較好的控制效果,而系統出問題時這種PID不會嚴重影響系統工作。

      總結:增量型 PID,是對位置型 PID 取增量,這時控制器輸出的是相鄰兩次采樣時刻所計算的位置值之差,得到的結果是增量,即在上一次的控制量的基礎上需要增加(負值意味減少)控制量。

      typedef struct PID
      { 
        float P,I,D,limit;
      }PID;
      typedef struct Error
      {
        float Current_Error;//當前誤差
        float Last_Error;//上一次誤差
        float Previous_Error;//上上次誤差
      }Error;
       
      /*! 
       *  @brief      增量式PID
       *  @since      v1.0
       *  *sptr :誤差參數
       *  *pid:  PID參數
       *  NowPlace:實際值
       *  Point:   期望值
       */
      // 增量式PID電機控制
      int32 PID_Increase(Error *sptr, PID *pid, int32 NowPlace, int32 Point)
      {
       
      	int32 iError,	//當前誤差
      		Increase;	//最后得出的實際增量
       
      	iError = Point - NowPlace;	// 計算當前誤差
       
      	Increase =  pid->P * (iError - sptr->Last_Error)   //比例P
      			  + pid->I * iError      //積分I
      			  + pid->D * (iError - 2 * sptr->Last_Error + sptr->Previous_Error);  //微分D
      	
      	sptr->Previous_Error = sptr->Last_Error;	// 更新前次誤差
      	sptr->Last_Error = iError;		  	// 更新上次誤差
      	
      	return Increase;	// 返回增量
      }
      

      辨析:

      增量式與位置式區別:
      1。增量式算法不需要做累加,控制量增量的確定僅與最近幾次偏差采樣值有關,計算誤差對控制 量計算的影響較小。而位置式算法要用到過去偏差的累加值,容易產生較大的累加誤差。
      2。增量式算法得出的是控制量的增量,例如在閥門控制中,只輸出閥門開度的變化部分,誤動作 影響小,必要時還可通過邏輯判斷限制或禁止本次輸出,不會嚴重影響系統的工作。 而位置式的輸出直接對應對象的輸出,因此對系統影響較大。
      3。增量式PID控制輸出的是控制量增量,并無積分作用,因此該方法適用于執行機構帶積分部件的對象,如步進電機等,而位置式PID適用于執行機構不帶積分部件的對象,如電液伺服閥。
      4。在進行PID控制時,位置式PID需要有積分限幅和輸出限幅,而增量式PID只需輸出限幅
      位置式PID優缺點:
      優點:
      ①位置式PID是一種非遞推式算法,可直接控制執行機構(如平衡小車),u(k)的值和執行機構的實際位置(如小車當前角度)是一一對應的,因此在執行機構不帶積分部件的對象中可以很好應用
      缺點:
      ①每次輸出均與過去的狀態有關,計算時要對e(k)進行累加,運算工作量大。
      增量式PID優缺點:
      優點:
      ①誤動作時影響小,必要時可用邏輯判斷的方法去掉出錯數據。
      ②手動/自動切換時沖擊小,便于實現無擾動切換。當計算機故障時,仍能保持原值。
      ③算式中不需要累加。控制增量Δu(k)的確定僅與最近3次的采樣值有關。
      缺點:
      ①積分截斷效應大,有穩態誤差;
      ②溢出的影響大。有的被控對象用增量式則不太好;

      下面理論分析PID的作用

      G c ( s ) = K P + K I s + K D s = K D s 2 + K P s + K I s = K D ( S 2 + a s + b ) s = K D ( s + z 1 ) ( s + z 2 ) s G_c(s)=K_P+ \frac{K_I}{s}+K_Ds =\frac{K_Ds^2+K_Ps+K_I}{s}\\ =\frac{K_D(S^2+as+b)}{s}=\frac{K_D(s+z_1)(s+z_2)}{s} Gc?(s)=KP?+sKI??+KD?s=sKD?s2+KP?s+KI??=sKD?(S2+as+b)?=sKD?(s+z1?)(s+z2?)?

      根據數學知識可得:
      a = K P K D , b = K I K D a=\frac{K_P}{K_D},b=\frac{K_I}{K_D} a=KD?KP??,b=KD?KI??

      所以我們可以得知,引用PID會為系統帶來一個純積分環節和兩個零點。
      原點處的極點可以提高系統的型數,改善穩態性能
      兩個零點理論上可以在任何位于左半S平面的任意位置

      PID整定方法

      對于有數學模型的系統,自然可以仿真完成整定,但對于一個實際系統,我們可以通過實驗來標定。

      1.手動標定

      1.系統閉環,采取P控制器,設置Ki = 0, Kd = 0, Kp取一個較小的數,
        滿足系統穩定即可
      2.逐漸增加Kp,每次改變控制器參數,都要觀察一段時間系統輸出量、控
        制量,直到閉環系統達到臨界穩定,輸出量產生等幅度、等周期的持續震蕩
        記錄此時的Kp
      3.將Kp減少一半,繼續采用P控制器,逐步減少Kp,直到獲得41衰減震蕩
      4.固定Kp,設置Kd = 0,采用PI控制器,將Ki從0開始逐漸增大,每次改變
        控制器參數,都要觀察一段時間系統輸出、控制量,直到閉環系統對擾動
        的抑制 和/或 對設定值的階躍響應 達到最佳。
      5.固定Kp和Ki,采用PID控制器,將Kd從0開始逐漸增大,每次改變控制器參數
        觀察系統輸出、控制量,直到閉環系統對擾動的抑制 和/或 對設定值的階躍
        相應達到最佳
      6.采用PID控制器,在已獲得的Kp,Ki,Kd附近,進一步精調控制器參數,直到
        得到最滿意的系統響應
      

      對于PID的三個參數,對系統階躍相應的影響:

      PID增益百分比超調量調整時間穩態誤差
      增大Kp增大影響很小減小
      增大Ki增大增大為0
      增大Kd減小減小沒有影響

      上表僅為參考,現實中情況錯綜復雜,一定要積極變通。

      2.臨界比例帶法:Z-N法(Zigler-Nichols)

      閉環:

      這是一套實驗得出的方法,目標是使得閉環系統得到4:1衰減振蕩的階躍相應,閉環相應速度較快、振蕩適中、擾動抑制能力強。

      1.設置Ki = 0, Kd = 0, 采用純P控制器
      2.增大Kp,觀測輸入、輸出,直到系統達到臨界穩定,產生幅值和周期不變
         的持續振蕩
      3.記錄Kp,成為臨界增益Ku;振蕩周期稱為臨界振蕩周期Tu
      4.選定控制器類型,按閉環Z-N整定規則計算PID各個增益
      

      整定規則:

      控制器類型KpKiKd
      P Gc(s)=Kp0.5Ku --
      PI Gc(s)=Kp+Ki/s0.45Ku0.54Ku/tu-
      PID Gc(s)=Kp+Ki/s+Kds0.6Ku1.2Ku/Tu0.6KuTu/8

      其實還有一種開環Z-N手段,這里不再贅述

      3.經驗法:

      1.P控制器:Ki = 0, Kd = 0,選擇初始Kp, 觀測擾動曲線或設定值響應曲線,
        增大或減小Kp,觀測曲線是否有所改善,若改善,則繼續按此方向整定Kp,
        反之,反向整定Kp,直到得到較好的曲線
      2.Kp減小0.8倍,從0開始增大Ki,觀測曲線,得到較好的響應曲線
      3.固定Ki,精調Kp,增大或減小Kp,直到得到較好的響應曲線
      4.同里,精調Ki
      5.由此得到較好的Kp、Ki
      6.若增加微分,則采用類似方法,從0開始整定Kp,并進一步精調Kp、Ki、Kd
      

      也可按照以下初始試湊范圍設定PID控制器初始值,然后精調

      系統類型P(%)Ti(s)Td(s)
      溫度20-60180-60030-180
      流量40-1006-60-
      壓力30-70124-180
      液壓20-80

      var code = “7794f5a6-3484-4545-91d8-e7d01462725e”

      posted @ 2021-03-28 23:34  gwkai(遺忘是原罪)  閱讀(45)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 日本高清一区二区三| WWW丫丫国产成人精品| 亚洲人成色99999在线观看| 精品国产亚洲av麻豆特色| 韩国无码AV片午夜福利| 久久久久国精品产熟女久色| 亚洲理论在线A中文字幕| 国产一区二区亚洲精品| 亚洲另类无码一区二区三区| 116美女极品a级毛片| 久久精品久久黄色片看看| 天堂网av一区二区三区| 日韩人妻一区中文字幕| 亚洲色欲在线播放一区二区三区| 97久久超碰精品视觉盛宴| 亚洲国产精品成人无码区| 欧美午夜理伦三级在线观看| 国语精品自产拍在线观看网站| 老熟妇老熟女老女人天堂| 国产高潮又爽又刺激的视频| 嘉兴市| 欧洲亚洲成av人片天堂网| 精品国产一区二区三区2021| 日本一区二区三区免费播放视频站 | 欧美乱码伦视频免费| 欧美 亚洲 国产 制服 中文| 日韩精品国内国产一区二| 久久精品国产99久久丝袜| 国产精品中文字幕久久| 性视频一区| 亚洲国产欧美一区二区好看电影 | 太原市| 亚洲深深色噜噜狠狠网站| 亚洲成人四虎在线播放| 波多野结衣网站| 日本一区二区精品色超碰| 日韩乱码人妻无码中文字幕视频 | 色老99久久九九爱精品| 亚洲AV成人片不卡无码| 亚洲国产午夜精品福利| 国产短视频精品一区二区|