什么是PIDPID算法代碼實(shí)現(xiàn)_第1頁(yè)
什么是PIDPID算法代碼實(shí)現(xiàn)_第2頁(yè)
什么是PIDPID算法代碼實(shí)現(xiàn)_第3頁(yè)
什么是PIDPID算法代碼實(shí)現(xiàn)_第4頁(yè)
什么是PIDPID算法代碼實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第第頁(yè)什么是PID,PID算法代碼實(shí)現(xiàn)(PI)D(算法)可以用于溫度控制、水位控制、飛行姿態(tài)控制等領(lǐng)域。

后面我們通過(guò)PID控制電機(jī)進(jìn)行說(shuō)明。

自動(dòng)控制系統(tǒng)

在直流有刷(電機(jī))的基礎(chǔ)驅(qū)動(dòng)中,如果電機(jī)負(fù)載不變,我們只要設(shè)置固定的占空比(電壓),電機(jī)的速度就會(huì)穩(wěn)定在目標(biāo)范圍。

然而,在實(shí)際的應(yīng)用中,負(fù)載可能會(huì)發(fā)生變化,此時(shí)如果還是輸出固定的電壓,電機(jī)的速度就偏離目標(biāo)范圍了,為了解決這個(gè)問(wèn)題,我們需要引入自動(dòng)(控制系統(tǒng))中的閉環(huán)控制。接下來(lái)我們開(kāi)始學(xué)習(xí)自動(dòng)控制系統(tǒng)的內(nèi)容。

概念:用自動(dòng)控制裝置,對(duì)關(guān)鍵參數(shù)進(jìn)行自動(dòng)控制,使它在受到外界干擾而偏離正常狀態(tài)時(shí),能夠被自動(dòng)地調(diào)節(jié)回到目標(biāo)范圍內(nèi)。

應(yīng)用場(chǎng)景:電水壺保溫系統(tǒng)

、大棚溫控系統(tǒng)、水位控制系統(tǒng),等等。

分類:自動(dòng)控制系統(tǒng)分為開(kāi)環(huán)控制系統(tǒng)和閉環(huán)控制系統(tǒng)

。

①開(kāi)環(huán)控制系統(tǒng)

在開(kāi)環(huán)控制系統(tǒng)中,系統(tǒng)輸出只受輸入的控制,沒(méi)有反饋回路,控制精度和抑制干擾的特性都比較差。

電風(fēng)扇風(fēng)力控制系統(tǒng)就是一個(gè)開(kāi)環(huán)控制的系統(tǒng),我們?cè)O(shè)置好目標(biāo)風(fēng)力之后,(控制電路)就輸出相應(yīng)的電壓(假設(shè)是電壓控制),此時(shí)電機(jī)的扇葉轉(zhuǎn)速就被控制在目標(biāo)范圍了。

理想狀態(tài)下,風(fēng)扇的輸出風(fēng)力確實(shí)可以穩(wěn)定在目標(biāo)值附近,然而,在實(shí)際的使用中,電機(jī)會(huì)逐漸老化,扇葉上的灰塵也會(huì)讓負(fù)載增大,此時(shí)我們所設(shè)定目標(biāo)風(fēng)力和實(shí)際風(fēng)力可能就存在偏差了。

②閉環(huán)控制系統(tǒng)

在閉環(huán)控制系統(tǒng)中,引入了反饋回路,利用輸出(實(shí)際值)和輸入(目標(biāo)值)的偏差,對(duì)系統(tǒng)進(jìn)行控制,避免偏離預(yù)定目標(biāo)。

大棚溫控系統(tǒng)就是一個(gè)閉環(huán)控制的系統(tǒng),我們?cè)O(shè)置好目標(biāo)溫度之后,(溫度傳感器)會(huì)采集棚內(nèi)的實(shí)際溫度,然后將目標(biāo)溫度和實(shí)際溫度進(jìn)行偏差的計(jì)算,計(jì)算后的結(jié)果輸入到控制電路中,控制電路進(jìn)一步控制溫控設(shè)備進(jìn)行升溫和降溫,此時(shí)棚內(nèi)的實(shí)際溫度就被控制在目標(biāo)范圍了。

當(dāng)實(shí)際溫度因外部影響偏離目標(biāo)值時(shí),溫度傳感器(反饋電路)就能及時(shí)的反饋偏差,讓系統(tǒng)自動(dòng)調(diào)節(jié)溫控設(shè)備,使得實(shí)際溫度逐漸回到目標(biāo)范圍。

PID算法

PID算法是閉環(huán)控制系統(tǒng)中常用的算法,PID分別是Propor(ti)on(比例)、Integral(積分)、Differential(微分)的首字母縮寫。它是一種結(jié)合比例、積分和微分三個(gè)環(huán)節(jié)于一體的閉環(huán)控制算法。

我們將輸入目標(biāo)值和實(shí)際輸出值進(jìn)行偏差的計(jì)算,然后把計(jì)算結(jié)果輸入到PID控制算法中,經(jīng)過(guò)比例、積分和微分三個(gè)環(huán)節(jié)的運(yùn)算,運(yùn)算后的輸出作用于執(zhí)行器,從而讓系統(tǒng)的實(shí)際值逐漸靠近目標(biāo)值。

以大棚溫控系統(tǒng)為例,來(lái)理解PID算法中三個(gè)環(huán)節(jié)的作用。

比例環(huán)節(jié)(Proportion)

比例環(huán)節(jié)可以成比例地反應(yīng)控制系統(tǒng)的偏差(信號(hào)),即輸出與輸入偏差成正比,可以用來(lái)減小系統(tǒng)的偏差。公式如下:

u—輸出

Kp—比例系數(shù)

e—偏差

我們可以通過(guò)大棚溫控去理解PID公式。例如需要調(diào)節(jié)棚內(nèi)溫度為30℃,而實(shí)際溫度為10℃,此時(shí)的偏差e=20,由比例環(huán)節(jié)的公式可知

當(dāng)e確定時(shí),Kp越大則輸出u越大,也就是溫控系統(tǒng)的調(diào)節(jié)力度越大,這樣就可以更快地達(dá)到目標(biāo)溫度;而當(dāng)Kp確定時(shí),偏差e越大則輸出u越大。

由此可見(jiàn),在比例環(huán)節(jié)中,比例系數(shù)Kp和偏差e越大則系統(tǒng)消除偏差的時(shí)間越短

當(dāng)Kp的值越大時(shí),其對(duì)應(yīng)的橙色曲線達(dá)到目標(biāo)值的時(shí)間就越短,與此同時(shí),橙色曲線出現(xiàn)了一定幅度的超調(diào)和振蕩,這會(huì)使得系統(tǒng)的穩(wěn)定性下降。

所以我們?cè)谠O(shè)置比例系數(shù)的時(shí)候,并不是越大越好,而是要兼顧消除偏差的時(shí)間以及整個(gè)系統(tǒng)的穩(wěn)定性。

在實(shí)際的應(yīng)用中,如果僅有比例環(huán)節(jié)的控制,可能會(huì)給系統(tǒng)帶來(lái)一個(gè)問(wèn)題:靜態(tài)誤差。

靜態(tài)誤差是指系統(tǒng)控制過(guò)程趨于穩(wěn)定時(shí),目標(biāo)值與實(shí)測(cè)值之間的偏差。

如果我們?cè)谛枰{(diào)節(jié)棚內(nèi)溫度為30℃,而實(shí)際溫度為25℃,此時(shí)偏差e=5,Kp為固定值,那么此時(shí)的輸出可以讓大棚在半個(gè)小時(shí)之內(nèi)升溫5℃,而外部的溫差可以讓大棚在半個(gè)小時(shí)之內(nèi)降溫5℃,也就是說(shuō),輸出u的作用剛好被外部影響抵消了,這就使得偏差會(huì)一直存在。

我們可以通過(guò)增大Kp來(lái)增大輸出,以此消除偏差。在實(shí)際應(yīng)用中,此方法的局限性很大,因?yàn)槲覀儾荒艽_定偏差的大小,它是在實(shí)時(shí)變化的,如果我們把Kp設(shè)置得太大,就會(huì)引入超調(diào)和振蕩,讓整個(gè)系統(tǒng)的穩(wěn)定性變差。因此,為了消除靜態(tài)誤差,我們引入了積分環(huán)節(jié)。

積分環(huán)節(jié)(Integral)

積分環(huán)節(jié)可以對(duì)偏差e進(jìn)行積分,只要存在偏差,積分環(huán)節(jié)就會(huì)不斷起作用,主要用于消除靜態(tài)誤差,提高系統(tǒng)的無(wú)差度。

引入積分環(huán)節(jié)后,比例+積分環(huán)節(jié)的公式如下:

u—輸出

e—

偏差

∑e—累計(jì)偏差

Kp—

比例系數(shù)

Ki—積分系數(shù)

通過(guò)以大棚溫控分析可以知道,如果溫控系統(tǒng)的比例環(huán)節(jié)作用被抵消,存在靜態(tài)誤差5℃,此時(shí)偏差存在,積分環(huán)節(jié)會(huì)一直累計(jì)偏差,以此增大輸出,從而消除靜態(tài)誤差。

從上述公式中可以得知,當(dāng)積分系數(shù)Ki或者累計(jì)偏差越大時(shí),輸出就越大,系統(tǒng)消除靜態(tài)誤差的時(shí)間就越短。

當(dāng)

Ki

的值越大時(shí),其對(duì)應(yīng)的橙色曲線達(dá)到目標(biāo)值的時(shí)間就越短,與此同時(shí),橙色曲線出現(xiàn)了一定幅度的超調(diào)和振蕩,這會(huì)使得系統(tǒng)的穩(wěn)定性下降

因此,我們?cè)谠O(shè)置積分系數(shù)的時(shí)候,并不是越大越好,而是要兼顧消除靜態(tài)誤差的時(shí)間以及整個(gè)系統(tǒng)的穩(wěn)定性。

只要系統(tǒng)還存在偏差,積分環(huán)節(jié)就會(huì)不斷地累計(jì)偏差。當(dāng)系統(tǒng)偏差為0的時(shí)候,說(shuō)明已經(jīng)達(dá)到目標(biāo)值,此時(shí)的累計(jì)偏差不再變化,但是積分環(huán)節(jié)依舊在發(fā)揮作用(此時(shí)往往作用最大),這就很容易產(chǎn)生超調(diào)的現(xiàn)象了。

因此,我們需要引入微分環(huán)節(jié),提前減弱輸出,抑制超調(diào)的發(fā)生。

微分環(huán)節(jié)(Differential)

微分環(huán)節(jié)可以反應(yīng)偏差量的變化趨勢(shì),根據(jù)偏差的變化量提前作出相應(yīng)控制,減小超調(diào),克服振蕩。引入微分環(huán)節(jié)后,比例+積分+微分環(huán)節(jié)的公式如下:

我們繼續(xù)使用大棚溫控去分析微分環(huán)節(jié)的作用。如果溫控系統(tǒng)目標(biāo)溫度為30℃,在上午八點(diǎn)的時(shí)候存在偏差15℃,經(jīng)過(guò)一段時(shí)間的調(diào)節(jié),到了上午九點(diǎn),此時(shí)偏差已經(jīng)縮小到5℃,偏差的變化量=九點(diǎn)的偏差(第k次)-八點(diǎn)的偏差(第k-1次)=-10,結(jié)合上述公式可知,此時(shí)微分環(huán)節(jié)會(huì)削弱比例和積分環(huán)節(jié)的作用,減小輸出以抑制超調(diào)。

最終得到了一個(gè)PID算法公式:

這個(gè)公式是PID離散公式之一,除了離散公式之外,PID還有連續(xù)的公式,但是因?yàn)檫B續(xù)的公式不利于機(jī)器計(jì)算,我們一般不研究。每一個(gè)系統(tǒng)的PID系數(shù)并不是通用的,這需要根據(jù)實(shí)際的情況去設(shè)置。

PID算法離散公式

位置式PID公式

這個(gè)公式的計(jì)算需要全部控制量參與,它的每一次輸出都和過(guò)去的狀態(tài)有關(guān)。

增量式PID公式

通過(guò)位置式的PID公式,可推導(dǎo)出增量式PID公式

將k=k-1代入位置式PID公式

增量式PID可以看出,增量式PID的計(jì)算并不需要一直累計(jì)偏差,它的輸出與近三次的偏差有很大關(guān)系。

注意:增量式PID公式輸出的只是控制量的增量。假設(shè)電機(jī)實(shí)際轉(zhuǎn)速為50RPM,現(xiàn)在我們要讓它加速到60RPM,如果采用的是位置式PID,系統(tǒng)將直接輸出60RPM對(duì)應(yīng)的控制量(占空比);

如果采用的是增量式PID,系統(tǒng)將輸出提速10RPM對(duì)應(yīng)的控制量(占空比),此時(shí)我們還需要加上上次(50RPM)的輸出。

兩個(gè)PID公式的不同點(diǎn)

兩種

PID

公式的優(yōu)缺點(diǎn)

①位置式:

優(yōu)點(diǎn):位置式PID是一種非遞推式算法,帶有積分作用,適用于不帶積分部件的對(duì)象。

缺點(diǎn):全量計(jì)算,計(jì)算錯(cuò)誤影響很大;需要對(duì)偏差進(jìn)行累加,運(yùn)算量大。

②增量式:

優(yōu)點(diǎn):只輸出增量,計(jì)算錯(cuò)誤影響??;不需要累計(jì)偏差,運(yùn)算量少,實(shí)時(shí)性相對(duì)較好。

缺點(diǎn):積分截?cái)嘈?yīng)大,有穩(wěn)態(tài)誤差。

積分飽和問(wèn)題

在位置式PID中,如果系統(tǒng)長(zhǎng)時(shí)間無(wú)法達(dá)到目標(biāo)值,累計(jì)偏差(積分)就會(huì)變得很大,此時(shí)系統(tǒng)的響應(yīng)就很慢了。

例如某個(gè)電機(jī)能達(dá)到的最大速度為300RPM,而我們?cè)O(shè)置了目標(biāo)速度為350RPM,這明顯是一個(gè)不合理的目

由于系統(tǒng)長(zhǎng)時(shí)間無(wú)法達(dá)到目標(biāo)值,累計(jì)偏差(積分)會(huì)變得越來(lái)越大,逐漸達(dá)到深度飽和的狀態(tài),此時(shí)我們?cè)僭O(shè)置一個(gè)合理范圍的目標(biāo)速度(例如200RPM),系統(tǒng)就沒(méi)有辦法在短時(shí)間內(nèi)響應(yīng)了。

為了避免位置式PID中可能出現(xiàn)的積分飽和問(wèn)題,可以考慮下面解決方法:

優(yōu)化PID曲線,系統(tǒng)越快達(dá)到目標(biāo)值,累計(jì)的偏差就越??;

限制目標(biāo)值調(diào)節(jié)范圍,規(guī)避可以預(yù)見(jiàn)的偏差;

進(jìn)行積分限幅,在調(diào)整好PID系數(shù)之后,根據(jù)實(shí)際系統(tǒng)來(lái)選擇限幅范圍。

PID

算法代碼實(shí)現(xiàn)

控制量相關(guān)的結(jié)構(gòu)體

我們知道PID的離散化公式后,實(shí)現(xiàn)PID算法的代碼是非常簡(jiǎn)單。

定義結(jié)構(gòu)體來(lái)管理這些控制量

typedefstruct{__IOfloatSetPoint;/*目標(biāo)值*/__IOfloatActualValue;/*期望輸出值*/__IOfloatSumError;/*偏差累計(jì)*/__IOfloatProportion;/*比例系數(shù)P*/__IOfloatIntegral;/*積分系數(shù)I*/__IOfloatDerivative;/*微分系數(shù)D*/__IOfloatError;/*Error[1],第k次偏差*/__IOfloatLastError;/*Error[-1],第k-1次偏差*/__IOfloatPrevError;/*Error[-2],第k-2次偏差*/}PID_TypeDef;PID算法代碼

位置式PID代碼

/**@briefpid閉環(huán)控制*@pa(ram)*PID:PID結(jié)構(gòu)體變量地址*@paramFeedback_value:當(dāng)前實(shí)際值*@retval期望輸出值*/int32_town_pid_ctrl(PID_TypeDef*PID,floatFeedback_value){

PID->Error=(float)(PID->SetPoint-Feedback_value);/*計(jì)算偏差*/

PID->SumError+=PID->Error;/*累計(jì)偏差*/

PID->ActualValue=(PID->Proportion*PID->Error)/*比例環(huán)節(jié)*/

+(PID->Integral*PID->SumError)/*積分環(huán)節(jié)*/

+(PID->Derivative*(PID->Error-PID->LastError));/*微分環(huán)節(jié)*/

PID->LastError=PID->Error;/*存儲(chǔ)偏差,用于下次計(jì)算*/

return((int32_t)(PID->ActualValue));/*返回計(jì)算后輸出的數(shù)值*/}own_pid_ctrl函數(shù)用來(lái)進(jìn)行位置式PID的控制,該函數(shù)的2個(gè)形參:PID傳入PID控制量相關(guān)的結(jié)構(gòu)體地址;Feedback_value傳入當(dāng)前系統(tǒng)的實(shí)際值,用于計(jì)算偏差。

在函數(shù)中,我們先計(jì)算本次偏差Error,然后把偏差累計(jì),存入SumError成員當(dāng)中,接著根據(jù)位置式的公式進(jìn)行三個(gè)環(huán)節(jié)的計(jì)算,計(jì)算后的期望輸出存入ActualValue成員當(dāng)中,然后存儲(chǔ)本次偏差,最后返回期望輸出值。

增量式PID代碼

/**@briefpid閉環(huán)控制*@param*PID:PID結(jié)構(gòu)體變量地址*@paramFeedback_value:當(dāng)前實(shí)際值*@retval期望輸出值*/int32_town_pid_ctrl(PID_TypeDef*PID,floatFeedback_value){PID->Error=(float)(PID->SetPoint-Feedback_value);/*計(jì)算偏差*/PID

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論