上一節(jié)我們知道了什么是位式控制,這節(jié)就正式進(jìn)入PID的學(xué)習(xí)。 簡(jiǎn)單畫了一個(gè)系統(tǒng)的控制流程圖: 
系統(tǒng)說(shuō)明:
假設(shè)該系統(tǒng)是一個(gè)溫控系統(tǒng),用戶可設(shè)定目標(biāo)值Sv,單片機(jī)檢測(cè)了用戶輸入的值之后,通過(guò)PID算法進(jìn)行計(jì)算,得出一個(gè)值去輸出PWM,PWM去控制加熱絲的電源,加熱絲就是被控對(duì)象。加熱絲旁邊有個(gè)溫度傳感器,可以實(shí)時(shí)監(jiān)測(cè)加熱絲的溫度,并反饋給單片機(jī)一個(gè)當(dāng)前的溫度值Pv。之后單片機(jī)將Sv和Pv進(jìn)行PID運(yùn)算,根據(jù)計(jì)算結(jié)果再次改變PWM的值,就這樣以此循環(huán)下去。
第一個(gè)時(shí)間點(diǎn)采樣值為X1,第二個(gè)時(shí)間點(diǎn)采樣值為X2,以此類推第k-1個(gè)采樣點(diǎn)采樣值為Xk-1,第k個(gè)采樣點(diǎn)采樣值為Xk。那么將從第一個(gè)時(shí)間點(diǎn)采樣的值到第k個(gè)采樣值排成一個(gè)序列如下:
X1 、 X2 、 X3 、、、 Xk-2 、 Xk-1 、Xk P 比例P,大家都知道是比例運(yùn)算。比例運(yùn)算是根據(jù)當(dāng)前傳感器采集的值Pv和用戶設(shè)定的目標(biāo)值Sv進(jìn)行比較之后,做一個(gè)比例輸出,假設(shè)當(dāng)前誤差Ek = Sv - Xk,那么在單獨(dú)使用P運(yùn)算時(shí),會(huì)輸出:
07.png (897 Bytes, 下載次數(shù): 40)
下載附件
2021-9-28 13:55 上傳
這就會(huì)產(chǎn)生三種運(yùn)算結(jié)果:
1.
當(dāng)Ek > 0; => 系統(tǒng)沒(méi)有達(dá)到目標(biāo)值 => 差值為正,當(dāng)差值較大時(shí),也就是當(dāng)前測(cè)量值和目標(biāo)值相差甚遠(yuǎn)的時(shí)候,這就會(huì)使得OUTp的值變大,OUTp的值是控制PWM的占空比的。OUTp的值越大,占空比越大,平均電壓值越高,加熱絲加熱越快,使得當(dāng)前值以最快的速度接近目標(biāo)值,當(dāng)差值較小時(shí)則相反;
2.
當(dāng)Ek = 0; => 系統(tǒng)已經(jīng)達(dá)到目標(biāo)值 => 差值為0,也就是當(dāng)前測(cè)量值和目標(biāo)值相差為0的時(shí)候,這就會(huì)使得OUTp的值為0,OUTp的值是控制PWM的占空比的。OUTp的值為0,占空比為0,平均電壓值越也就為0,加熱絲不在進(jìn)行加熱,此時(shí)加熱絲已經(jīng)不受控制,不受控制就容易受外界影響而改變溫度;
3.
當(dāng)Ek < 0; => 系統(tǒng)超過(guò)目標(biāo)值 => 差值為負(fù),也就是當(dāng)前測(cè)量值已經(jīng)超過(guò)目標(biāo)值,PWM不可能輸出負(fù)的,因此只能不在輸出PWM,加熱絲也會(huì)處于不受控的狀態(tài)。 從運(yùn)算結(jié)果可得出以下幾個(gè)結(jié)論:
1.只有當(dāng)系統(tǒng)存在誤差了,我才控制你,如果沒(méi)有誤差我就不控制了,也就是說(shuō)單獨(dú)的P運(yùn)算是個(gè)一直有誤差的運(yùn)算,也就是靜態(tài)誤差
2.當(dāng)前值和目標(biāo)值相差越大,我輸出就越大,相差越小,我輸出就小,也就是說(shuō)P可以加快被控對(duì)象達(dá)到目標(biāo)設(shè)定值
3.P運(yùn)算只和當(dāng)前值作比較,也就說(shuō)P控制的是當(dāng)前的狀態(tài) 以上就是P的特點(diǎn)。 優(yōu)化:
在沒(méi)有誤差的情況下為了還能控制被控對(duì)象,往往會(huì)在后面加一個(gè)常量OUT0:
f8d43f90334b90894efd6efb46be18f6.png (1.24 KB, 下載次數(shù): 41)
下載附件
2021-9-28 13:58 上傳
也就是說(shuō)當(dāng)沒(méi)有誤差時(shí),K*Ek=0,但我最后的輸出OUTp = OUT0,還能控制被控對(duì)象,但是OUT0該設(shè)置多少就要看實(shí)際情況了,只能說(shuō)有改善,但是很雞肋。如果環(huán)境變化很大,OUT0形同虛設(shè)。 I 積分將每個(gè)采樣時(shí)間點(diǎn)的值和目標(biāo)設(shè)定值做一個(gè)差值,就能得出每次采樣的誤差值。第一個(gè)采樣時(shí)間點(diǎn)的差值E1 = Sv - X1,第二個(gè)時(shí)間點(diǎn)的差值E2 = Sv - X2,以此循環(huán),第k-1個(gè)時(shí)間點(diǎn)的差值Ek-1 = Sv - Xk-1,第k個(gè)時(shí)間點(diǎn)的差值Ek = Sv - Xk,排成序列如下: E1 、 E2 、 E3 、、、 Ek-2 、 Ek-1 、Ek 那么我們來(lái)看看將這些歷史誤差加到一起會(huì)有什么結(jié)論 Sk = E1 + E2 + E3 +++ Ek-2 + Ek-1 + Ek Sk的值也會(huì)產(chǎn)生三種運(yùn)算結(jié)果:
1.
當(dāng)Sk > 0; => 所有正數(shù)的和的絕對(duì)值比所有負(fù)數(shù)的和的絕對(duì)值要大 => 從E1到Ek這么多數(shù)中,為正的個(gè)數(shù)多于為負(fù)的個(gè)數(shù) => 也就是說(shuō)在歷史采樣k次中,大多數(shù)是采樣到系統(tǒng)沒(méi)有達(dá)到目標(biāo)值的。因?yàn)镋k >
0說(shuō)明Sv > Xk , 說(shuō)明系統(tǒng)沒(méi)有達(dá)到目標(biāo)值
2.
當(dāng)Sk = 0; => 所有正數(shù)的和的絕對(duì)值等于所有負(fù)數(shù)的和的絕對(duì)值 => 從E1到Ek這么多數(shù)中,為正的個(gè)數(shù)等于為負(fù)的個(gè)數(shù) => 也就是說(shuō)在歷史采樣k次中,剛好沒(méi)有達(dá)到目標(biāo)值的次數(shù)和達(dá)到目標(biāo)值的次數(shù)相等
3.
當(dāng)Sk < 0; => 所有正數(shù)的和的絕對(duì)值比所有負(fù)數(shù)的和的絕對(duì)值要小 => 從E1到Ek這么多數(shù)中,為正的個(gè)數(shù)少于為負(fù)的個(gè)數(shù) => 也就是說(shuō)在歷史采樣k次中,大多數(shù)是采樣到系統(tǒng)都達(dá)到目標(biāo)值的。因?yàn)镋k <
0說(shuō)明Sv < Xk , 說(shuō)明系統(tǒng)達(dá)到目標(biāo)值 現(xiàn)在我們想讓這個(gè)Sk單獨(dú)加到我們的運(yùn)算當(dāng)中,并且做一定的放大,這里說(shuō)的是放大,其實(shí)是根據(jù)系數(shù)大不大于1而定的。那么我們可以得出一個(gè)公式:
09.png (1.1 KB, 下載次數(shù): 31)
下載附件
2021-9-28 14:01 上傳
那么我們來(lái)想想,I運(yùn)算會(huì)不會(huì)有不受控的時(shí)候。答案是肯定有的。當(dāng)Sk等于0時(shí),系統(tǒng)是不受控制的,也就說(shuō)在K次的采樣結(jié)果中,達(dá)到設(shè)定目標(biāo)的次數(shù)等于沒(méi)有達(dá)到目標(biāo)的次數(shù)時(shí),系統(tǒng)是不受控制的。 從運(yùn)算結(jié)果可得出以下幾個(gè)結(jié)論: 1.只有當(dāng)系統(tǒng)存在歷史誤差了,注意是歷史誤差,我才控制你,如果沒(méi)有歷史誤差我就不控制了,也就是說(shuō)單獨(dú)的I運(yùn)算也是一個(gè)有誤差的運(yùn)算
2.I運(yùn)算參考的是歷史數(shù)據(jù),是對(duì)系統(tǒng)歷史狀態(tài)做出一個(gè)整體評(píng)估,當(dāng)歷史狀態(tài)大多數(shù)都沒(méi)達(dá)到設(shè)定值時(shí)我就輸出一個(gè)大一點(diǎn)的信號(hào),讓系統(tǒng)在之后的運(yùn)行中打到目標(biāo)值,當(dāng)歷史狀態(tài)大多數(shù)都達(dá)到設(shè)定值的時(shí)候則相反。 以上就是I的特點(diǎn),和P有點(diǎn)類似只不過(guò)一個(gè)是將當(dāng)前值作為參考,一個(gè)是將過(guò)去值最為參考。 優(yōu)化:
在沒(méi)有歷史誤差的情況下為了還能控制被控對(duì)象,往往會(huì)在后面加一個(gè)常量OUT0,雖然用處不大:
11.png (1.24 KB, 下載次數(shù): 32)
下載附件
2021-9-28 14:02 上傳
D 微分我們將積分中在k次采樣的誤差值Ek和k-1次采樣的誤差值Ek-1做差值會(huì)得到什么結(jié)論呢?
10.png (1.14 KB, 下載次數(shù): 51)
下載附件
2021-9-28 14:02 上傳
首先我們要理解Dk的含義: Dk是這次采樣的誤差和上次采樣的誤差的差值,假如采樣時(shí)間很小,我們是不是可以把Dk看做是誤差的斜率,也就是Dk的值反映了單位時(shí)間內(nèi)誤差的變化快慢。Dk越大,說(shuō)明誤差變化率越大,Dk越小,則誤差的變化率越小。 再舉個(gè)例子:
S = VT ( 路程=速度*時(shí)間) 我們又知道路程的倒數(shù)是速度,導(dǎo)數(shù)可以理解為變化率,也就是變化的快慢。在一段時(shí)間內(nèi)走了一段路,那么在任意時(shí)刻路程的導(dǎo)數(shù)就表示該單位時(shí)間內(nèi)走過(guò)的路程,也就是速度了。 再看看上面說(shuō)的Dk,假設(shè)采樣時(shí)間很短,Dk是不是就可以理解為在單位時(shí)間內(nèi)誤差從Ek-1變成了Ek,相當(dāng)于路程在單位時(shí)間內(nèi)從S1變成了S2,那么S2-S1是單位時(shí)間內(nèi)走的路程,在對(duì)單位時(shí)間求導(dǎo)是不是就是速度了,Ek- Ek-1是單位時(shí)間內(nèi)誤差的變化值,在對(duì)單位時(shí)間求導(dǎo)是不是就是誤差的變化率了。 在理解了Dk的含義之后我們就可以運(yùn)用I運(yùn)算了,同樣的給D一個(gè)比例,放大一定倍數(shù)進(jìn)行輸出:
1d6b46a1652edeea80758f79364b2734.png (1.14 KB, 下載次數(shù): 28)
下載附件
2021-9-28 14:04 上傳
由于OUTd和Dk只是倍數(shù)關(guān)系,因此只看Dk的變化就能知道OUTd的變化,:
1.
當(dāng)Dk > 0; => 這次的誤差值比上一次的誤差值大 => 說(shuō)明本次相比上次更加遠(yuǎn)離目標(biāo)值了 => 偏差越來(lái)越大
2.
當(dāng)Dk = 0; => 這次的誤差值等于上一次的誤差值 => 說(shuō)明本次相比上次誤差沒(méi)有變化 => 偏差不變
3.
當(dāng)Dk < 0; => 這次的誤差值小于上一次的誤差值 => 說(shuō)明本次相比上次更加接近目標(biāo)值了 => 偏差越來(lái)越小 由于變化率本身反映的就是一種趨勢(shì),什么是趨勢(shì)?趨勢(shì)就是根據(jù)當(dāng)前的環(huán)境去預(yù)測(cè)以后會(huì)發(fā)生的事情。因此D微分運(yùn)算最大的一個(gè)作用就是通過(guò)誤差的變化率去預(yù)判在下一個(gè)采樣時(shí)刻系統(tǒng)會(huì)有什么樣的變化,這樣就能提前做出相應(yīng)的動(dòng)作,而不是等待溫度達(dá)到目標(biāo)值再去關(guān)閉PWM 從運(yùn)算結(jié)果可得出以下幾個(gè)結(jié)論:
1.當(dāng)誤差的變化率為0時(shí),系統(tǒng)會(huì)不受控制
2.不能單獨(dú)存在,為什么這樣說(shuō)呢。因?yàn)槲⒎质强凑`差的變化率而不是誤差本身。
舉個(gè)例子,比如下圖,目標(biāo)值假設(shè)為100

4次采樣,每次采樣的偏差值都在變化,而偏差的變化率卻一直是2,也就是說(shuō)Dk=2,微分有輸出。那么假設(shè)溫度就這樣很有規(guī)律的往上加呢,那是不是當(dāng)溫度到達(dá)了100度,微分還會(huì)有輸出,因?yàn)槲⒎挚刹还苣闶嵌嗌俣,只要Ek-Ek-1不等于0我就一直輸出。那如果沒(méi)有P和I的加入,只有微分是不是就會(huì)一直加熱。因此微分不能單獨(dú)存在。 3.還有一點(diǎn)很重要,就是微分輸出具有超前預(yù)判的功能
這一點(diǎn)也很好理解,剛才已經(jīng)說(shuō)過(guò)Dk是誤差的變化率,變化率反映的是一種趨勢(shì),那么當(dāng)Dk > 0時(shí),Dk越大,OUTd就越大,也就是說(shuō)Dk越遠(yuǎn)離目標(biāo)值,我輸出就越大,輸出越大加熱越快,加熱越快就會(huì)讓你越接近目標(biāo)值,也就是說(shuō)你上一次里目標(biāo)越遠(yuǎn),我就在下一次輸出越大,讓你離目標(biāo)值越近,這就是D微分運(yùn)算的預(yù)判特點(diǎn)。 總結(jié)上面所講的都是在離散型的系統(tǒng)中才能實(shí)現(xiàn)的。就像我們的單片機(jī)定時(shí)采樣一樣,他不可能無(wú)時(shí)無(wú)刻的去采樣傳感器的值,只能定時(shí)去采樣,但如果這個(gè)采樣時(shí)間很短呢,是不是就可以無(wú)限接近連續(xù)型系統(tǒng)了。 P與當(dāng)前誤差有關(guān),當(dāng)前誤差大我就輸出大,誤差小輸出小,主要是根據(jù)系統(tǒng)當(dāng)前的狀態(tài)做出響應(yīng);I與系統(tǒng)的累積誤差有關(guān),系統(tǒng)過(guò)去的總體表現(xiàn)影響現(xiàn)在的輸出;D與系統(tǒng)上一時(shí)刻的誤差變化率有關(guān),根據(jù)上一時(shí)刻的變化率判斷系統(tǒng)下一個(gè)采樣時(shí)刻可能會(huì)發(fā)生的變化。 P可以提高系統(tǒng)響應(yīng)時(shí)間,I可以消除靜態(tài)誤差,D可以預(yù)判系統(tǒng)的變化。
|