PID算法中比例項(xiàng)(P)的作用和比例參數(shù)的選擇
1.1 P的作用
在上一個(gè)實(shí)驗(yàn)中,我們?cè)O(shè)定的PWM的每個(gè)周期的加熱時(shí)間是固定的,可以看到溫度一直在上升,如圖1所示。

如果我們?cè)O(shè)定某個(gè)目標(biāo)溫度,比如60°,然后使用一個(gè)固定占空比的PWM信號(hào)去加熱加熱塊,要想讓加熱塊的溫度能夠固定在60°是非常困難的。有效時(shí)間短,加熱抵不住散熱,這樣溫度到不了60°,加熱超過散熱,溫度又會(huì)一直上升,超過60°。
那有沒有辦法讓溫度固定在60°呢?有的。那就是測(cè)量溫度距離目標(biāo)溫度比較遠(yuǎn)的時(shí)候全速加熱,在接近目標(biāo)溫度時(shí),降低PWM信號(hào)的每個(gè)周期的有效時(shí)間(當(dāng)然,這個(gè)有效時(shí)間增加的熱量要超過散掉的熱量),超過目標(biāo)溫度后不再加熱。具體實(shí)現(xiàn)時(shí),我們可以這樣操作:
1.?溫度小于目標(biāo)溫度時(shí),我們讓PWM的有效加熱時(shí)間與目標(biāo)溫度-測(cè)量溫度的差值正相關(guān)。
也即兩者具有以下關(guān)系:
out = Kp*(Sv - Pv)?????? (1)
其中,out代表有效加熱時(shí)間。對(duì)于前面實(shí)驗(yàn)的設(shè)置,它就是裝入定時(shí)器的捕獲/比較寄存器的值。Kp是比例系數(shù),Sv代表目標(biāo)溫度,Pv代表測(cè)量溫度。
?
比如,我們?cè)O(shè)定Kp =20,Sv = 60, PWM的周期為500ms(對(duì)應(yīng)的計(jì)數(shù)器次數(shù)為1000次)則
①當(dāng)Pv = 30時(shí), out = 20 * (60 - 30) = 600,此時(shí)一個(gè)PWM周期內(nèi)有60%的時(shí)間是有效加熱時(shí)間。
②當(dāng)Pv = 40時(shí),out = 20 * (60 - 40) = 400,此時(shí)一個(gè)PWM周期內(nèi)有40%的時(shí)間是有效加熱時(shí)間。
③當(dāng)Pv = 50時(shí),out = 20*(60 - 50) = 200,此時(shí)一個(gè)PWM周期內(nèi)有20%的時(shí)間是有效加熱時(shí)間。
可以看到,隨著加熱時(shí)溫度的增加,目標(biāo)溫度和測(cè)量溫度的差值變小,造成每個(gè)PWM的有效加熱時(shí)間逐漸減小,這樣升溫慢慢變慢,溫度就可以穩(wěn)定在60°了。
在上面的討論中,我們還看到,如果目標(biāo)溫度比測(cè)量溫度大太多,比如目標(biāo)溫度-測(cè)量溫度 = 55°,則此時(shí)out的值超過1000。由于一個(gè)計(jì)數(shù)周期最多1000,所以此時(shí)最多取1000的值裝入TIM->CCRx即可。
2.測(cè)量溫度大于目標(biāo)溫度。此時(shí)應(yīng)該將PWM的有效加熱時(shí)間設(shè)置為0,停止加熱。
下面我們來看這樣一個(gè)實(shí)驗(yàn)。實(shí)驗(yàn)參數(shù)為:
PWM周期為500ms,目標(biāo)溫度 = 60°(當(dāng)前環(huán)境溫度約為18°C)。為了增加測(cè)量精度,我們將溫度值增加10倍來考慮,相應(yīng)的,Kp的值要減小10倍?,F(xiàn)在我們?nèi)?/span>Kp = 2。以下是實(shí)驗(yàn)結(jié)果。
實(shí)驗(yàn)1

由圖2可以看到,穩(wěn)定后,實(shí)際溫度在目標(biāo)溫度附近震蕩。
為了方便觀看Kp的作用,我們給出了不同Kp時(shí)的實(shí)驗(yàn)結(jié)果圖
實(shí)驗(yàn)2? Kp = 1

實(shí)驗(yàn)3 Kp = 5(超調(diào)嚴(yán)重)

????????????
實(shí)驗(yàn)4 Kp = 0.5(超調(diào)少,但是穩(wěn)定后沒有到達(dá)目標(biāo)位置)

可以看到,Kp的值比較小時(shí),加熱不足以抵掉散熱,所以穩(wěn)定后的溫度比目標(biāo)溫度小。而在Kp較大時(shí),由于P的調(diào)節(jié)作用比較遲,加熱時(shí)間相對(duì)較長(zhǎng),而溫度具有很大的滯后性,停止加熱后溫度會(huì)繼續(xù)飆升,所以會(huì)有超調(diào)現(xiàn)象(實(shí)際溫度超過目標(biāo)溫度),而且Kp的值越大,超調(diào)就越嚴(yán)重。
1.2 Kp的選擇
在實(shí)際的溫度控制中,我們可能直接使用目標(biāo)溫度-測(cè)量溫度來計(jì)算輸出,也有可能增加10倍或者100倍來計(jì)算輸出。那此時(shí)比例系數(shù)Kp的值如何取呢?
?
這個(gè)要看你想在測(cè)量溫度達(dá)到什么溫度時(shí)使能比例控制而定。下面我們舉常見的2種情況來說明。
1.將目標(biāo)溫度和測(cè)量溫度放大10倍來考慮。
?
①你想在距離目標(biāo)溫度有30°時(shí)使能比例控制。距離目標(biāo)溫度為30°才控制,意味著(Sv - 30°)是一個(gè)臨界點(diǎn),在這個(gè)臨界點(diǎn),out剛好等于1000---即還在全速加熱。而當(dāng)測(cè)量溫度超過這個(gè)距離后,out就小于1000了,它的值將隨著溫度的升高越來越小。所以,在臨界點(diǎn)有:
out = Kp * (Sv*10 - Pv*10)? ->? 1000? = Kp * (Sv*10 - (Sv * 10 - 30*10 ))? -> Kp = 3.33
?
②你想在距離目標(biāo)溫度有40°時(shí)使能比例控制。距離目標(biāo)溫度為40°才控制,意味著(Sv -40°)是一個(gè)臨界點(diǎn),在這個(gè)臨界點(diǎn),out剛好等于1000---即還在全速加熱。而當(dāng)測(cè)量溫度超過這個(gè)距離后,out就小于1000了,它的值將隨著溫度的升高越來越小。所以,在臨界點(diǎn)有:
out = Kp * (Sv*10 - Pv*10)? ->? 1000? = Kp * (Sv*10 - (Sv * 10 - 40*10 ))? -> Kp = 2.5
?
其它同理。
?
2.將目標(biāo)溫度和測(cè)量溫度放大100倍來考慮。
①你想在距離目標(biāo)溫度有30°時(shí)使能比例控制。距離目標(biāo)溫度為30°才控制,意味著(Sv - 30°)是一個(gè)臨界點(diǎn),在這個(gè)臨界點(diǎn),out剛好等于1000---即還在全速加熱。而當(dāng)測(cè)量溫度超過這個(gè)距離后,out就小于1000了,它的值將隨著溫度的升高越來越小。所以,在臨界點(diǎn)有:
out = Kp * (Sv*100 -Pv*100) -> 1000 = Kp * (Sv*100 - (Sv * 100- 30*100 ))? -> Kp = 0.333
?
②你想在距離目標(biāo)溫度有40°時(shí)使能比例控制。距離目標(biāo)溫度為40°才控制,意味著(Sv -40°)是一個(gè)臨界點(diǎn),在這個(gè)臨界點(diǎn),out剛好等于1000---即還在全速加熱。而當(dāng)測(cè)量溫度超過這個(gè)距離后,out就小于1000了,它的值將隨著溫度的升高越來越小。所以,在臨界點(diǎn)有:
out = Kp * (Sv*100 - Pv*100)->1000? = Kp * (Sv*100 - (Sv * 100 - 40*100 ))? -> Kp = 0.25
其它同理。
由于溫度具有很大的滯后性,所以距離目標(biāo)溫度為40°的點(diǎn)是一個(gè)關(guān)鍵點(diǎn),我們可以先在這個(gè)點(diǎn)計(jì)算出Kp的值代入PID的公式去計(jì)算PID的輸出,并觀察結(jié)果,然后再根據(jù)具體結(jié)果來調(diào)節(jié)Kp。
關(guān)于PID介紹的更多內(nèi)容,我們將在近期正點(diǎn)原子平臺(tái)的第三期教學(xué)給大家分享。在這一期的教學(xué)中,我們將推出自整定方法和PID模糊控制,關(guān)于PID的模糊控制,應(yīng)該是全網(wǎng)第一個(gè)實(shí)戰(zhàn)的項(xiàng)目,結(jié)果精度非常非常高。
?
如果大家有興趣,可以關(guān)注公眾號(hào):?? O老師講32?
或者直接掃碼添加
