久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 9976|回復(fù): 13

如何理解PID控制算法

[復(fù)制鏈接]
1#
發(fā)表于 2019-7-17 21:09:47 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式

) a4 F+ O0 Y4 I      10多年前曾經(jīng)也為理解PID算法,苦惱不已。今天看到這篇文章,一下子好像回到10多年前,為理解PID控制算法,天天跑書店的情景。1 q& S! i: D4 B0 h% @2 d, N, I' U8 f
       轉(zhuǎn)給社區(qū)里正在學(xué)習(xí)PID控制算法的社友。
, ^" ^9 v& i# o6 U+ L4 I- X# m& W# n
' I6 F, o: t8 ~- S% ]1 V/ |  e. s4 ~1 K, A! }  `& q" k- t
      PID控制應(yīng)該算是應(yīng)用非常廣泛的控制算法了。小到控制一個元件的溫度,大到控制無人機的飛行姿態(tài)和飛行速度等等,都可以使用PID控制。這里我們從原理上來理解PID控制。
* {- p, b, b# g8 R3 a6 `. I

( i$ x8 m! U* A
       PID(proportion integration differentiation)其實就是指比例,積分,微分控制。先把圖片和公式擺出來,看不懂沒關(guān)系。(一開始看這個算法,公式能看懂,具體怎么用怎么寫代碼也知道,但是就是不知道原理,不知道為什么要用比例,微分,積分這3個項才能實現(xiàn)最好的控制,用其中兩個為什么不行,用了3個項能好在哪里,每一個項各有什么作用)

2 ~' e7 o0 e% ?8 q: M
" O) q: w# ~' D0 ~" C: \! {+ Z
7 S* V( S: O) y" R( j- n! Q+ j
       總的來說,當(dāng)?shù)玫较到y(tǒng)的輸出后,將輸出經(jīng)過比例,積分,微分3種運算方式,疊加到輸入中,從而控制系統(tǒng)的行為,下面用一個簡單的實例來說明。
# W' p) d3 d2 }9 ^; T
比例控制算法
       我們先說PID中最簡單的比例控制,拋開其他兩個不談。還是用一個經(jīng)典的例子吧。假設(shè)我有一個水缸,最終的控制目的是要保證水缸里的水位永遠的維持在1米的高度。假設(shè)初始時刻,水缸里的水位是0.2米,那么當(dāng)前時刻的水位和目標(biāo)水位之間是存在一個誤差的error,且error為0.8.這個時候,假設(shè)旁邊站著一個人,這個人通過往缸里加水的方式來控制水位。如果單純的用比例控制算法,就是指加入的水量u和誤差error是成正比的。
6 ^0 Y; q# C9 Q. u' U
即:u=kp*error. M9 I! P7 @) H; A8 u' u
  m0 w/ x: j' V( z7 [+ \
       假設(shè)kp取0.5, 那么t=1時(表示第1次加水,也就是第一次對系統(tǒng)施加控制),那么u=0.5*0.8=0.4,所以這一次加入的水量會使水位在0.2的基礎(chǔ)上上升0.4,達到0.6.。

: L3 R; A9 j( Y5 p$ ?& ^       接著,t=2時刻(第2次施加控制),當(dāng)前水位是0.6,所以error是0.4。u=0.5*0.4=0.2,會使水位再次上升0.2,達到0.8。

4 f1 x7 k3 m# o* R3 V' c) U2 C       如此這么循環(huán)下去,就是比例控制算法的運行方法。 可以看到,最終水位會達到我們需要的1米。

) J: k+ @% V! m4 {: N       但是,單單的比例控制存在著一些不足,其中一點就是 –穩(wěn)態(tài)誤差!(我也是看了很多,并且想了好久才想通什么是穩(wěn)態(tài)誤差以及為什么有穩(wěn)態(tài)誤差)。

' ?0 q  d9 [9 |6 x       像上述的例子,根據(jù)kp取值不同,系統(tǒng)最后都會達到1米,只不過kp大了到達的快,kp小了到達的慢一些。不會有穩(wěn)態(tài)誤差。但是,考慮另外一種情況,假設(shè)這個水缸在加水的過程中,存在漏水的情況,假設(shè)每次加水的過程,都會漏掉0.1米高度的水。
, |% V$ v& q7 `+ t
      仍然假設(shè)kp取0.5,那么會存在著某種情況,假設(shè)經(jīng)過幾次加水,水缸中的水位到0.8時,水位將不會再變換!!!因為,水位為0.8,則誤差error=0.2。所以每次往水缸中加水的量為u=0.5*0.2=0.1.同時,每次加水,缸里又會流出去0.1米的水!!!加入的水和流出的水相抵消,水位將不再變化!!
7 ]) b! ^" M. D) t: ^
        也就是說,我的目標(biāo)是1米,但是最后系統(tǒng)達到0.8米的水位就不再變化了,且系統(tǒng)已經(jīng)達到穩(wěn)定。由此產(chǎn)生的誤差就是穩(wěn)態(tài)誤差了。
0 Y2 k' g; d2 |% P5 d
        (在實際情況中,這種類似水缸漏水的情況往往更加常見,比如控制汽車運動,摩擦阻力就相當(dāng)于是“漏水”,控制機械臂、無人機的飛行,各類阻力和消耗都可以理解為本例中的“漏水”)

& I8 e6 ^3 q  y" y6 S! I         所以,單獨的比例控制,在很多時候并不能滿足要求。
; }4 B% J3 ]% R  \! N6 h/ `! O0 C
積分控制算
還是用上面的例子,如果僅僅用比例,可以發(fā)現(xiàn)存在暫態(tài)誤差,最后的水位就卡在0.8了。于是,在控制中,我們再引入一個分量,該分量和誤差的積分是正比關(guān)系。所以,比例+積分控制算法為:
5 r) ?+ K5 j$ J" H% U0 q
u=kp*error+ ki∗∫ error
: \6 Y  {( n( @* h" z/ I6 k% c
還是用上面的例子來說明,第一次的誤差error是0.8,第二次的誤差是0.4,至此,誤差的積分(離散情況下積分其實就是做累加),∫error=0.8+0.4=1.2. 這個時候的控制量,除了比例的那一部分,還有一部分就是一個系數(shù)ki乘以這個積分項。由于這個積分項會將前面若干次的誤差進行累計,所以可以很好的消除穩(wěn)態(tài)誤差(假設(shè)在僅有比例項的情況下,系統(tǒng)卡在穩(wěn)態(tài)誤差了,即上例中的0.8,由于加入了積分項的存在,會讓輸入增大,從而使得水缸的水位可以大于0.8,漸漸到達目標(biāo)的1.0.)這就是積分項的作用。
' v1 x# Y' B: [# E' h1 g: K7 I
微分控制算法
換一個另外的例子,考慮剎車情況。平穩(wěn)的駕駛車輛,當(dāng)發(fā)現(xiàn)前面有紅燈時,為了使得行車平穩(wěn),基本上提前幾十米就放松油門并踩剎車了。當(dāng)車輛離停車線非常近的時候,則使勁踩剎車,使車輛停下來。整個過程可以看做一個加入微分的控制策略。

! y- j: d$ {( S微分,說白了在離散情況下,就是error的差值,就是t時刻和t-1時刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一個系數(shù)項。可以看到,在剎車過程中,因為error是越來越小的,所以這個微分控制項一定是負(fù)數(shù),在控制中加入一個負(fù)數(shù)項,他存在的作用就是為了防止汽車由于剎車不及時而闖過了線。從常識上可以理解,越是靠近停車線,越是應(yīng)該注意踩剎車,不能讓車過線,所以這個微分項的作用,就可以理解為剎車,當(dāng)車離停車線很近并且車速還很快時,這個微分項的絕對值(實際上是一個負(fù)數(shù))就會很大,從而表示應(yīng)該用力踩剎車才能讓車停下來。

9 W9 J0 t9 Q$ u, ]! N5 d切換到上面給水缸加水的例子,就是當(dāng)發(fā)現(xiàn)水缸里的水快要接近1的時候,加入微分項,可以防止給水缸里的水加到超過1米的高度,說白了就是減少控制過程中的震蕩。

$ W, v$ b# Z% p3 ?) o0 P
現(xiàn)在再回頭看這個公式,就很清楚了
3 ~) s1 s$ a+ V! m: `; o8 c

! i% p+ P' i0 Y3 E
括號內(nèi)第一項是比例項,第二項是積分項,第三項是微分項,前面僅僅是一個系數(shù)。很多情況下,僅僅需要在離散的時候使用,則控制可以化為 1 j. {' e5 @0 u  f4 P6 m

5 g- I  e. W9 q4 b * r# a1 I3 V9 c% R
每一項前面都有系數(shù),這些系數(shù)都是需要實驗中去嘗試然后確定的,為了方便起見,將這些系數(shù)進行統(tǒng)一一下:
這樣看就清晰很多了,且比例,微分,積分每個項前面都有一個系數(shù),且離散化的公式,很適合編程實現(xiàn)。
/ K. X8 Y; S" \$ G# F& c% p$ ]
講到這里,PID的原理和方法就說完了,剩下的就是實踐了。在真正的工程實踐中,最難的是如果確定三個項的系數(shù),這就需要大量的實驗以及經(jīng)驗來決定了。通過不斷的嘗試和正確的思考,就能選取合適的系數(shù),實現(xiàn)優(yōu)良的控制器。
; w6 m/ d5 s1 e
  b- b9 E% ~2 R4 l
回復(fù)

使用道具 舉報

2#
發(fā)表于 2019-7-18 07:34:42 | 只看該作者
有一本自動控制原理,可以去看看
3#
發(fā)表于 2019-7-18 08:28:22 | 只看該作者
好文章,不多見,頂!
3 a9 K  R* @4 p2 Y最近正想學(xué)這個。* ?, R& ?) L/ r3 G2 t/ S4 Z: q
最好樓主或哪位網(wǎng)友能給個例子,比如通過電加熱管加熱水,控制水箱里水溫,使溫度波動最小。
( s: ?" w" E4 \9 |4 o如果能在貼上一段C代碼,就更好了。
4#
發(fā)表于 2019-7-18 08:59:27 | 只看該作者
感謝大俠分享
5#
發(fā)表于 2019-7-18 10:47:11 | 只看該作者
樓主辛苦了
6#
發(fā)表于 2019-7-18 11:51:39 | 只看該作者
厲害
回復(fù)

使用道具 舉報

7#
發(fā)表于 2019-7-24 19:12:38 | 只看該作者
看到這些公式就頭疼
8#
發(fā)表于 2019-7-26 10:21:27 | 只看該作者
學(xué)習(xí)學(xué)習(xí)!!!!!!!!!
回復(fù)

使用道具 舉報

9#
發(fā)表于 2019-7-26 11:33:40 | 只看該作者
這是錢學(xué)森的控制論嗎?
10#
發(fā)表于 2019-11-21 16:45:35 | 只看該作者
樓主,比例你舉例0.5,這個很好理解,可是積分還是不理解,能舉個例子,例個公式嗎?
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

Archiver|手機版|小黑屋|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2025-7-26 15:05 , Processed in 0.074727 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復(fù) 返回頂部 返回列表