PID控制器改进笔记之五:改进PID控制器之串级设定
前面我們發(fā)布了一系列PID控制器相關(guān)的文章,包括經(jīng)典PID控制器以及參數(shù)自適應(yīng)的PID控制器。這一系列PID控制器雖說(shuō)實(shí)現(xiàn)了主要功能,也在實(shí)際使用中取得了良好效果,但還有很多的細(xì)節(jié)部分可以改進(jìn)以提高性能和靈活性。所以在這篇中我們來(lái)討論改進(jìn)PID控制器以串級(jí)調(diào)節(jié)等復(fù)雜控制方式。
1、提出問(wèn)題
我們前面提到的PID控制器其實(shí)都是基于單回路來(lái)考慮的。但有些時(shí)候同一個(gè)被控對(duì)象可能會(huì)受到2個(gè)控制變量的影響,或者說(shuō)為了實(shí)現(xiàn)一個(gè)被控對(duì)象更精確的控制需要同時(shí)引入兩個(gè)控制變量才能得到更好的效果。這個(gè)時(shí)候我們可以將對(duì)被控對(duì)象起主要作用的控制變量定義為主變量,相應(yīng)的控制器作為主控制器;而將對(duì)被控對(duì)象起次要作用的控制變量定義為從變量,相應(yīng)的控制器作為從控制器。于是一個(gè)串級(jí)調(diào)節(jié)系統(tǒng)就建立起來(lái)了。
由以上的控制方框圖我們可以知道,如果將副回路看作一個(gè)整體的執(zhí)行單元的話(huà),主控制回路就是一個(gè)單回路的PID控制。同樣只考慮副回路的話(huà)也只是一個(gè)單回路的PID控制。但有所不同的是副回路的設(shè)定值并非由我們輸入給它的,而是由主控制器的輸出施加給它的。所以,我們想解決PID控制器的串聯(lián)問(wèn)題,需要考慮的就是處理如何將主控制器輸出施加給副控制器作為設(shè)定的問(wèn)題。
2、分析設(shè)計(jì)
我們已經(jīng)提出了實(shí)現(xiàn)PID控制器串級(jí)需要考慮的主要問(wèn)題。接下里我們需要分析采用什么辦法解決這一問(wèn)題并將其數(shù)字化。在此,我們先來(lái)考慮一下幾個(gè)方面的問(wèn)題。
第一個(gè)問(wèn)題是主控制器的輸出方式。一般來(lái)說(shuō),PID算法輸出的是實(shí)際物理量值的大小。在我們的PID控制器中我們輸出了實(shí)際物理量值和百分比。
第二個(gè)問(wèn)題是副控制器的輸入方式。對(duì)于PID控制器設(shè)定值輸入肯定是與控制變量的物理量相對(duì)應(yīng)的。很顯然以主控制器的物理量值作為副控制器的設(shè)定輸入肯定是不合適的。所以我們只有以百分比的方式作為副控制器設(shè)定值的輸入。
第三個(gè)問(wèn)題是主副控制器的結(jié)合問(wèn)題。既然以主控制器百分比輸出作為副控制器的設(shè)定輸入。而副控制器的設(shè)定值為物理量,我們需要根據(jù)百分比和副控制變量的量程來(lái)獲得副控制器的真正設(shè)定值。
第四個(gè)問(wèn)題是PID算法該如何調(diào)整。對(duì)PID算法的調(diào)整并不復(fù)雜,事實(shí)上我們只需要根據(jù)是否是串級(jí)來(lái)處理設(shè)定值就好了。如果不是串級(jí)就正常處理;如果是串級(jí)就需要根據(jù)輸入和量程來(lái)計(jì)算設(shè)定值。我們可以用如下的流程圖來(lái)說(shuō)明:
為了保持PID控制器算法的嚴(yán)謹(jǐn)性,我們并不需要將這段處理設(shè)定值的操作添加到PID控制算法內(nèi)部,而只需要獨(dú)立處理完設(shè)定值的計(jì)算并賦值就可以了。
3、軟件實(shí)現(xiàn)
我們已經(jīng)設(shè)計(jì)了如何實(shí)現(xiàn)PID控制器串級(jí)的方式。我們還需要將其算法以軟件的方式實(shí)現(xiàn)才能真正獲得我們想要的結(jié)果。
首先,我們?cè)赑ID對(duì)象類(lèi)型中添加標(biāo)識(shí)是否為串級(jí)的屬性。這一屬性用于標(biāo)識(shí)這一PID控制器是否處于串級(jí)控制狀態(tài)。只有副控制器需要設(shè)定為串級(jí)狀態(tài)。
其次,我們?cè)赑ID控制器中添加針對(duì)串級(jí)副控制器設(shè)定值輸入的代碼。其實(shí)很簡(jiǎn)單,就是在串級(jí)狀態(tài)下,將輸入的設(shè)定值百分比在物理量量程下計(jì)算為設(shè)定值的最終值。
/* 通用PID控制器,采用增量型算法,具有變積分,梯形積分和抗積分飽和功能,微分項(xiàng)采用不完全微分,一階濾波,alpha值越大濾波作用越強(qiáng)??????????????????? */ void PIDRegulator(CLASSICPID *vPID) {float thisError;float result;float factor;float increment;float pError,dError,iError;if(*vPID->pMA<1)????? //手動(dòng)模式{vPID->output=*vPID->pMV;//設(shè)置無(wú)擾動(dòng)切換vPID->result=(vPID->maximum-vPID->minimum)*vPID->output/100.0+-vPID->minimum;*vPID->pSV=*vPID->pPV;vPID->setpoint=*vPID->pSV;}else????????????????? //自動(dòng)模式{if(vPID->sm==SMOOTH_ENABLE) //設(shè)定值平滑變化{SmoothSetpoint(vPID);}else{if(vPID->cas==CASCADE)??? //串級(jí)處理{vPID->setpoint=(vPID->maximum-vPID->minimum)*(*vPID->pSV)/100.0+vPID->minimum;}else{vPID->setpoint=*vPID->pSV;}}thisError=vPID->setpoint-(*vPID->pPV); //得到偏差值result=vPID->result;if (fabs(thisError)>vPID->deadband){pError=thisError-vPID->lasterror;iError=(thisError+vPID->lasterror)/2.0;dError=thisError-2*(vPID->lasterror)+vPID->preerror;//變積分系數(shù)獲取factor=VariableIntegralCoefficient(thisError,vPID->errorabsmax,vPID->errorabsmin);//計(jì)算微分項(xiàng)增量帶不完全微分vPID->deltadiff=(*vPID->pKd)*(1-vPID->alpha)*dError+vPID->alpha*vPID->deltadiff;increment=(*vPID->pKp)*pError+(*vPID->pKi)*factor*iError+vPID->deltadiff;?? //增量計(jì)算}else{if((fabs(vPID->setpoint-vPID->minimum)<vPID->deadband)&&(fabs((*vPID->pPV)-vPID->minimum)<vPID->deadband)){result=vPID->minimum;}increment=0.0;}//正反作用設(shè)定if(vPID->direct==DIRECT){result=result+increment;}else{result=result-increment;}/*對(duì)輸出限值,避免超調(diào)和積分飽和問(wèn)題*/if(result>=vPID->maximum){result=vPID->maximum;}if(result<=vPID->minimum){result=vPID->minimum;}?vPID->preerror=vPID->lasterror;? //存放偏差用于下次運(yùn)算vPID->lasterror=thisError;vPID->result=result;vPID->output=(vPID->result-vPID->minimum)/(vPID->maximum-vPID->minimum)*100.0;*vPID->pMV=vPID->output;} }4、總結(jié)
這里我們對(duì)PID控制器添加了串級(jí)控制的配置參數(shù)。當(dāng)一個(gè)PID控制器作為串級(jí)調(diào)節(jié)的副控制器時(shí),我們將串級(jí)配置參數(shù)使能,這樣將主調(diào)節(jié)器的輸出給副調(diào)節(jié)器的設(shè)定時(shí)就可實(shí)現(xiàn)串級(jí)。而此時(shí)主控制器的串級(jí)配置參數(shù)并不需要使能,其設(shè)定值由操作者給予。
嚴(yán)格來(lái)講串級(jí)控制并不是一種單獨(dú)的控制算法,而是一種控制方式。但為了實(shí)現(xiàn)串級(jí)控制方式,我們需要對(duì)PID控制算法做必要的適應(yīng)性修改。
歡迎關(guān)注:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的PID控制器改进笔记之五:改进PID控制器之串级设定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WinSock I/O 模型 -- IO
- 下一篇: c++创建虚拟串口_linux虚拟串口控