PID算法搞不懂?看这篇文章就够了。
點(diǎn)擊上方“大魚機(jī)器人”,選擇“置頂/星標(biāo)公眾號(hào)”
福利干貨,第一時(shí)間送達(dá)!
轉(zhuǎn)自知乎:?jason
原文鏈接:https://zhuanlan.zhihu.com/p/74131690
? 1??
目的PID 的重要性應(yīng)該無需多說了,這個(gè)控制領(lǐng)域的應(yīng)用最廣泛的算法了.
本篇文章的目的是希望通過一個(gè)例子展示算法過程,并解釋以下概念:
(1)簡(jiǎn)單描述何為PID, 為何需要PID,PID 能達(dá)到什么作用。
(2)理解P(比例環(huán)節(jié))作用:基礎(chǔ)比例環(huán)節(jié)。
缺點(diǎn):?產(chǎn)生穩(wěn)態(tài)誤差.
疑問: 何為穩(wěn)態(tài)誤差 為什么會(huì)產(chǎn)生穩(wěn)態(tài)誤差.
(3)理解I(積分環(huán)節(jié))作用:消除穩(wěn)態(tài)誤差.
缺點(diǎn): 增加超調(diào)
疑問: 積分為何能消除穩(wěn)態(tài)誤差?
(4) 理解D(微分環(huán)節(jié))作用:加大慣性響應(yīng)速度,減弱超調(diào)趨勢(shì)
疑問: 為何能減弱超調(diào)
(5)理解各個(gè)比例系數(shù)的作用
好的下面就開始進(jìn)入正題吧
一: 何為PID以及為何需要PID
以下即PID 控制的整體框圖,過程描述為:?
設(shè)定一個(gè)輸出目標(biāo),反饋系統(tǒng)傳回輸出值,如與目標(biāo)不一致,則存在一個(gè)誤差,PID 根據(jù)此誤差調(diào)整輸入值,直至輸出達(dá)到設(shè)定值.
疑問:
那么我們?yōu)槭裁葱枰狿ID 呢,比如我控制溫度,我不能監(jiān)控溫度值,溫度值一到就停止嗎?
這里必須要先說下我們的目標(biāo),因?yàn)槲覀兯械目刂茻o非就是想輸出能夠達(dá)到我們的設(shè)定,即如果我們?cè)O(shè)定了一個(gè)目標(biāo)溫度值,那么我們想要一個(gè)什么樣的溫度變化呢.
比如設(shè)定目標(biāo)溫度為30度, 目標(biāo)無非是希望達(dá)到圖1?希望其能夠快速而且沒有抖動(dòng)的達(dá)到30度.
那這樣大家應(yīng)該就明白,如果使用溫度一到就停止的辦法,當(dāng)然如果要求不高可能也行,當(dāng)肯定達(dá)不到圖1 這樣的要求,因?yàn)闇囟鹊搅撕笥鄿匾矔?huì)讓溫度繼續(xù)升高.而且溫度自身也會(huì)通過空氣散熱的.
▲ 圖1 系統(tǒng)輸出的響應(yīng)目標(biāo)
總結(jié):?
我們需要PID 的原因無非就是普通控制手段沒有辦法使輸出快速穩(wěn)定的到達(dá)設(shè)定值.
如果你對(duì)此感到疑問,我們就開始用一個(gè)常用的例子來具體說明吧。
??2??
舉個(gè)例子在開始前,我們需要將我們的公式搬出
咋一看,這個(gè)公式挺唬人的.
其實(shí)你只要知道微分和積分的基本定義就可以理解.
而且最終我們所有的努力也都是能夠理解這個(gè)公式,否則再精妙的比喻也無法使你真正的明白和使用.
這里我們將其離散化.(如果這步驟有些太快的話,后面再加入對(duì)此的解釋)
Kp-------比例常數(shù)
Ki= (Kp*T)/Ti------積分常數(shù)
Kd=(Kp*Td)/T------微風(fēng)常數(shù)
以下我就通過一個(gè)例子具體暫時(shí)這個(gè)方程是如何工作的。
(1) 小明接到一個(gè)任務(wù): 有個(gè)水桶,需要時(shí)刻保持1m 的高度,目前水桶里有0.2m 的水
那么小明采用P(比例) 的方法加水:即每次測(cè)量與1m 的誤差,并加入與誤差成比例的水量
比如設(shè)Kp=0.5.
第一次,誤差是 1-0.2=0.8m,那么加入水量是 Kp*0.8= 0.4mm.
第二次, 誤差是1-0.4 =0.6mm 那么加入水量是 Kp*0.6=0.3mm
我們發(fā)現(xiàn)這太完美了,那么比例環(huán)節(jié)就能夠完美的解決問題了,可是等等,在下這個(gè)結(jié)論前,我們看小明的新任務(wù)。
(2)小明的新任務(wù): 有個(gè)水桶,但桶底漏了個(gè)洞,仍需保持1m 的高度,目前水桶里有0.2m 的水,但每次加水都會(huì)流出0.1m. 這個(gè)例子就接近我們實(shí)際工程的例子了,比如電機(jī)摩擦的阻力,損耗.。
我們還是來給小明解決問題吧,
第一次仍是使用P (比例控制) u= Kp* e
仍然設(shè)Kp=0.5. 則u= 0.5*e
L(最終水位) = 本次輸入u 加上上一次水位
第一次,誤差是 1-0.2=0.8m。
那么加入水量是 Kp*0.8= 0.4mm.最終水位時(shí)是0.4+0.2-0.1=0.5
第二次, 誤差是1-0.5 =0.5mm?
那么加入水量是 Kp*0.5=0.25mm,最終水位是0.5+0.25-0.1=0.65
▲ 表1
我們發(fā)現(xiàn)了問題,水位最終在0.8m 處穩(wěn)定了,這個(gè)也很好理解,當(dāng)誤差是0.2m 時(shí),加水量時(shí)0.1,每次加入的剛好等于漏掉的.
這里就引入了穩(wěn)態(tài)誤差的概念:即當(dāng)系統(tǒng)到達(dá)穩(wěn)態(tài)時(shí)與目標(biāo)的誤差.
那么我們加大Kp呢?
我們發(fā)現(xiàn)誤差變小了,那我們繼續(xù)增大吧
我們發(fā)現(xiàn)系統(tǒng)開始震蕩了.
此處使用excel 折線圖,大家可以調(diào)節(jié)參數(shù)觀察變化
結(jié)論: 比例控制引入了穩(wěn)態(tài)誤差,且無法消除.比例常數(shù)增大可以減小穩(wěn)態(tài)誤差,但如果太大則引起系統(tǒng)震蕩,不穩(wěn)定.
為了消除穩(wěn)態(tài)誤差,第二次加入積分,使用PI(比例積分控制)?
u=?
積分控制就是將歷史誤差全部加起來乘以積分常數(shù).
這個(gè)式子什么意思呢,為啥就能消除穩(wěn)態(tài)誤差呢.
還是先設(shè)Kp=0.5,Ki= 0.3(這個(gè)值我這里是隨意設(shè)置的)
第一次: 誤差為0.8, 比例部分 Kp*0.8=0.4, 積分部分 Ki*(e(1))= 0.24,加入水量u為0.4+0.24=0.64. 最終水位0.2+0.64-0.1= 0.74m
第二次: 誤差為0.26,比例部分Kp0.26=0.13,積分部分Kp*(e(1)+e(2))= 0.318,加入水量u為0.13+0.318=0.448.最終水位 0.74+0.448-0.1=1.088m
▲ 表2
我們發(fā)現(xiàn),雖然過程曲折,但是最終可以穩(wěn)定到設(shè)定值了.
如果 加大Ki 呢
此處使用excel 折線圖,大家可以調(diào)節(jié)參數(shù)觀察變化
??3??
結(jié)論1 、只要存在偏差,積分就不停的累計(jì),直到誤差為0, 積分項(xiàng)不再累加,變成一個(gè)常數(shù),可以抵消穩(wěn)態(tài)誤差.
大家可以看到表2 中系統(tǒng)穩(wěn)定后,積分項(xiàng)約是0.1.
2 、引入積分可以消除穩(wěn)態(tài)誤差,但會(huì)增加超調(diào),且Ki 增大,超調(diào)量也增大.
為了消除超調(diào),我們引入微分作用,現(xiàn)在式子變成了
u=?
還是先設(shè)Kp=0.5,Ki= 0.5,Kd=0.3
第一次: 誤差為0.8, 比例部分 Kp*0.8=0.4, 積分部分 Ki*(e(1))= 0.24,微分部分 =0 (因?yàn)闆]加水前水位差就是0.8) 加入水量u為0.4+0.4=0.8. 最終水位0.2+0.8-0.1= 0.9m
第二次: 誤差為0.1,比例部分Kp*0.1=0.5,積分部分Kp*(e(1)+e(2))= 0.45,微分部分為Kd*(e(2)-e(1))加入水量u為 0.5+0.45-0.21=0.29.最終水位 0.9+0.29-0.1=1.09m
▲ 表3
我們發(fā)現(xiàn)對(duì)比 上面那張Kp= 0.5,Ki=0.5 的圖,這張圖的震蕩減輕了,這正是微分發(fā)生了作用,
大家可以看到表3中 當(dāng)?shù)?次 誤差為0.1 時(shí),上一次誤差為0.8 時(shí),微分是一個(gè)負(fù)數(shù),阻止結(jié)果快速的變化.
結(jié)論: 微分能夠減弱超調(diào)趨勢(shì).
可是,這個(gè)波形還是在震蕩啊,是的,別忘了,這個(gè)值是我隨手設(shè)置的,我們不能指望我們隨便設(shè)一個(gè)值 就能使 PID 完美的工作起來,如果你自己用excel 模擬一下你就會(huì)發(fā)現(xiàn),如果Ki,Kd 設(shè)置大些,這個(gè)系統(tǒng)會(huì)大幅度震蕩起來.
因此我們就需要對(duì)Kp,Ki,Kd 整定,其實(shí)就是試 怎么使輸出達(dá)到圖1 的要求
當(dāng)然這個(gè)例子其實(shí)使用PI 就可以了,我們這里是為了理解其作用的原理.
? 4??
?最后大家好,我是張巧龍,會(huì)寫一些關(guān)于硬件與軟件結(jié)合的技術(shù)文章,若覺得文章對(duì)你有幫助,轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動(dòng)力。
長按識(shí)別圖中二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的PID算法搞不懂?看这篇文章就够了。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派翻车了
- 下一篇: 1749元!小米米家无线洗地机2 Lit