


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、(完整word版)PID算法通俗講解編輯整理:尊敬的讀者朋友們:這里是精品文檔編輯中心,本文檔內(nèi)容是由我和我的同事精心編輯整理后發(fā)布 的,發(fā)布之前我們對(duì)文中內(nèi)容進(jìn)行仔細(xì)校對(duì),但是難免會(huì)有疏漏的地方,但是 任然希望(完整word版)PID算法通俗講解)的內(nèi)容能夠給您的工作和學(xué)習(xí)帶 來便利。同時(shí)也真誠(chéng)的希望收到您的建議和反饋,這將是我們進(jìn)步的源泉,前 進(jìn)的動(dòng)力。本文可編輯可修改,如果覺得對(duì)您有幫助請(qǐng)收藏以便隨時(shí)查閱,最后祝您生活 愉快業(yè)績(jī)進(jìn)步,以下為(完整word版)PID算法通俗講解的全部?jī)?nèi)容。# include <reg52o h typedef uns i gned char type
2、def uns i gned int typedef unsigned longsb i t ConOut 二 P1"1;uChar8;ulnt16;ulnt32;/加熱絲接到typedef struct PID Valueulnt32 I iEkVa I3;uChar8 uEkFlag 3;uChar8 uKPCoe;uChar8 uKI Coe;uChar8 uKD Coe;ulnt16 iPriVal;ulnt16 iSetVaI;ulnt16 iCurVaI; PID_ValueStr;差值保存,給定和反饋的差值/符號(hào),1則對(duì)應(yīng)的為負(fù)數(shù),0為對(duì)應(yīng)的為正數(shù) /比例系數(shù)積分常數(shù)微
3、分常數(shù)/上一時(shí)刻值/設(shè)定值/實(shí)際值PID_ValueStr PID; 各新數(shù)據(jù)bit g bPIDRunFlag = 0; 隔一宗時(shí)間,算一次。/定義一個(gè)結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體用來存算法中要用到的/PID運(yùn)行標(biāo)志位,PID算法不是一直在運(yùn)算。而是每/* * * * * * * * * * * * * */* 函數(shù)名稱:PID_Operation()/*函數(shù)功能:PID運(yùn)算/*入口參數(shù):無(隱形輸入,系數(shù)、設(shè)定值等)/*出口參數(shù):無(隱形輸出.U(k)/* 函數(shù)說明:U(k) +KP* E(k) E (k-1) +KI*E (k) +KD* E(k) -2E (k-1)+E(k2)* * * * *
4、 * * * * * * * * * * * * / void PID Operation(void) 一ulnt32 Temp 3 = 0 ;/中間臨時(shí)變量ulnt32 PostSum = 0;/正數(shù)和/設(shè)定值大于實(shí)際值否?/偏差大于10否?偏差大于10為上限幅值輸出(全/否則慢慢來ulnt32 NegSum = 0;/負(fù)數(shù)和if (PIDo iSetVal > PID. iCurVal)(if (PIDo iSetVaI PID. iCurVal > 10) PIDo iPriVal = 100;速加熱)e I seTemp0 = PID. iSetVaI - PID。PID.
5、 uEkFlag1 = 0;i CurVaI;/偏差C=0,計(jì)算E (k)/E(k)為正數(shù),因?yàn)樵O(shè)定值大于實(shí)際值/*數(shù)值進(jìn)行移位,注意順序,否則會(huì)覆蓋掉前面的數(shù)值*/PIDo IiEkVal 2 = PID. IiEkVal1;PIDo I i EkVa I 1二 PID. I iEkVal 0;PIDo IiEkVal0 = Temp0;/*if (PIDo I i EkVa I 0 > PIDO I iEkVal 1 )/E (k) >E (k1)否?Temp0 = PID. I iEkVal 0 PID. I iEkVal 1;/E (k) > E(k1)PIDo uE
6、kFlag0 = 0;/E(k)-E (k1)為正數(shù)e I seTemp0 = PID. I iEkVal 1 PIDO I iEkVal 0:/E(k)<E(k-1)PIDo uEkFlag 0 = 1;/E(k) E (k-1)為負(fù)數(shù)*/Temp2 = PID. IiEkVal 1 * 2;/2E(k-1)if ( (PIDo I i EkVa I 0 + PID. I iEkVal 2 )> Temp 2 ) /E (k2) +E(k)> 2E (k1)否?Temp2 = (PID. I iEkVal 0 + PID。I iEkVal 2)- Temp2;PIDo uE
7、kFlag2 =0;/E(k2) +E(k)-2E (k-1)為正數(shù)else/E(k2) +E (k) <2E(k-1)(Temp2 = Temp2 - (PIDo IiEkVa I 0 + PID。Ii EkVa I2);PID. uEkFlag 2 =1;/E(k-2)+E(k)2E(k-1) 為負(fù)數(shù)/* 去/Temp 0 = (ulnt32) PID. uKP Coe * Temp0 ;/KP* E (k)E (k-1)Temp1 = (ulnt32) PID。uKI_ Coe * PID. I iEkVal 0 ; /KI*E (k)Temp2 = (ulnt32)PID0 uK
8、D Coe * Temp2 ;/KD * E (k-2) +E(k)2E (k-1)/*以下部分代碼是講所有的正數(shù)項(xiàng)疊加,負(fù)數(shù)項(xiàng)疊加*/* =計(jì)算 KP*E (k)E (k1)的值=二二二 */if(PIDo uEkFlag0 = 0)PostSum += Temp 0;/正數(shù)和e I seNegSum + 二 Temp0 ;/負(fù)數(shù)和/* =計(jì)算 KI*E(k)的值= */if (PID. uEkFlag1 = 0)PostSum += Temp1 ;/正數(shù)和e I se;/* 空操作.就是因?yàn)?PID. iSetVal > PID. iCurVal (即 E (K) > 0)才
9、進(jìn)入if的,那么就沒可能為負(fù),所以打個(gè)轉(zhuǎn)回去就是了 */* =:計(jì)算 KD*E(k2)+E (k)-2E (k-1)的值=*/ if (PIDo uEkFlag 2二二0)PostSum + 二 Temp 2 ;/正數(shù)和e I seNegSum += Temp 2 ;/負(fù)數(shù)和/ * =計(jì)算 U (k) = */PostSum += (ulnt32)PIDo iPr i VaI;if (PostSum > NegSum)/是否控制量為正數(shù)Temp0 = PostSum - NegSum;if (TempO < 100 )小于上限幅值則為計(jì)算值輸出PI Do i Pr iVaI 二(u
10、lnt16) Temp0;else PID. iPriVal = 100;/否則為上限幅值輸出else/控制量輸出為負(fù)數(shù),則輸出0 (下限幅值輸出)PIDo iPriVal 二 0;else PIDo iPriVal 二 0;/同上,嘿嘿1/* * * * *夫*夫* * * * * * */* 函數(shù)名稱:PI D.Output 0/*函數(shù)功能:PID輸岀控制/*入口參數(shù):無(隱形輸入,U (k)/*出口參數(shù):無(控制端)* * * * 夫 * * 夫 * 夫 * * * * * 夫 * * * * * * * * *void PID_0utput(void)static ulnt16 iTe
11、mp;static uChar8 uCounter; iTemp = PID。iPr iVaI;i f (iTemp 0)ConOut = 1; eIse ConOut 二 0; if(g.bPIDRunFlag)/不加熱/加熱/定時(shí)中斷為100ms (0o 1S),加熱周期10S (100份*0.1S)g bPIDRunFlag = 0;i f (i Temp) i Temp;/只有 iTemp>0,才有必要減"1"uCounter+;if (100 = uCounter)PID_0peration () ;/每過 0.1*100S 調(diào)用一次 PID 運(yùn)算.uCou
12、nter 二 0;/* * * * * * * 頭夫* * /* 函數(shù)名稱:PID.OutputO/*函數(shù)功能:PID輪岀控制/*入口參數(shù):無(隱形輸入,U (k)/夫出口參數(shù):無(控制端)* * * * * * * 未 未 * * * */void TimerOlnit (void)TMOD|二 0x01;/設(shè)置定時(shí)器0工作在模式1下THOOxDC;TLO0x00;/賦初始值TRO1;/開定時(shí)器0EA 二1;/開總中斷ETO =:1;/開定時(shí)器中斷void main (void)TimerOInit ();whi le(1)(PID-Output ();void TimerO一ISR (vo
13、id) interrupt 1 "static ulnt16 uiCounter 二 0;THO = OxDC;TLO = 0x00;uiCounter+;if(100 二二 uiCounter)gbPIDRunFlag 二 1;總所周知,PID算法是個(gè)很經(jīng)典的東西。而做自平衡小車,飛行器PID是一 個(gè)必須翻過的坎。因此本節(jié)我們來好好講解一下PID,根據(jù)我在學(xué)習(xí)中的體 會(huì),力求通俗易懂并舉出PID的形象例子來幫助理解PID。一、首先介紹一下PID名字的由來:P: Proport io n (比例),就是輸入偏差乘以一個(gè)常數(shù)。I : Integral (積分),就是對(duì)輸入偏差進(jìn)行積分運(yùn)
14、算。D: Derivative (微分),對(duì)輸入偏差進(jìn)行微分運(yùn)算。注:輸入偏差二讀出的被控制對(duì)象的值-設(shè)定值。比如說我要把溫度控制在 26度,但是現(xiàn)在我從溫度傳感器上讀出溫度為28度.則這個(gè)26度就是”設(shè) 定值28度就是“讀出的被控制對(duì)象的值”。然后來看一下,這三個(gè)元素 對(duì)PID算法的作用,了解一下即可,不懂不用勉強(qiáng)。P,打個(gè)比方,如果現(xiàn)在的輸出是1,目標(biāo)輸出是100,那么P的作用是以最 快的速度達(dá)到100,把P理解為一個(gè)系數(shù)即可;而I呢?大家學(xué)過高數(shù)的,0 的積分才能是一個(gè)常數(shù),I就是使誤差為0而起調(diào)和作用;D呢?大家都知 道微分是求導(dǎo)數(shù),導(dǎo)數(shù)代表切線是吧,切線的方向就是最快到至高點(diǎn)的方 向
15、。這樣理解,最快獲得最優(yōu)解,那么微分就是加快調(diào)節(jié)過程的作用了。二、然后要知道PID算法具體分兩種:一種是位置式的,一種是增量式的。 在小車?yán)镆话阌迷隽渴?,為什么呢?位置式PID的輸出與過去的所有狀態(tài) 有關(guān),計(jì)算時(shí)要對(duì)e (每一次的控制誤差)進(jìn)行累加,這個(gè)計(jì)算量非常大,而 明顯沒有必要。而且小車的PID控制器的輸出并不是絕對(duì)數(shù)值,而是一個(gè) ,代表增多少,減多少。換句話說,通過增量PID算法,每次輸出是PWM 要增加多少或者減小多少,而不是PWM的實(shí)際值。所以明白增量式PID就 行了.三、接著講PID參數(shù)的整定,也就是PID公式中,那幾個(gè)常數(shù)系數(shù)Kp, Ti,Td等是怎么被確定下來然后帶入PID算
16、法中的。如果要運(yùn)用PID,則 PID參數(shù)是必須由自己調(diào)出來適合自己的項(xiàng)目的通常四旋翼,自平衡車的 參數(shù)都是由自己一個(gè)調(diào)節(jié)出來的,這是一個(gè)繁瑣的過程。本次我們可以不 管,關(guān)于PID參數(shù)怎么確定的,網(wǎng)上有很多經(jīng)驗(yàn)可以借鑒.比如那個(gè)經(jīng)典的 經(jīng)驗(yàn)試湊口訣:參數(shù)整定找最佳,從小到 大順序查.先是比例后積分,最后再把微分加。曲線振蕩很頻繁,比例度盤要放大.曲線漂浮繞大彎,比例度盤往小扳。間往下降。曲線偏離回復(fù)慢,積分時(shí)間再加長(zhǎng)。曲線波動(dòng)周期長(zhǎng),積分時(shí)降下來。曲線振蕩頻率快,先把微分間應(yīng)加長(zhǎng)。動(dòng)差大來波動(dòng)慢,微分時(shí)低四比一。理想曲線兩個(gè)波,前咼后量不會(huì)低。一看二調(diào)多分析,調(diào)節(jié)質(zhì)四、接下來我們用例子來輔助我們
17、把常用的PID模型講解了。(PID控制并 不一定要三者都出現(xiàn),也可以只是PI、PD控制,關(guān)鍵決定于控制的對(duì)象。)(下面的內(nèi)容只是介紹一下PID模型,可以不看,對(duì)理解PID沒什么用) 例子:我們要控制一個(gè)人,讓他一 PID的控制方式來行走"0步后停下來。1) P比例控制,就是讓他按照一定的比例走,然后停下。比如比例系數(shù)為 108,則走一次就走了 108步,然后就不走了。說明:P比例控制是一種最簡(jiǎn)單的控制方式,控制器的輸出與輸入誤差信號(hào) 成比例關(guān)系。但是僅有比例控制時(shí)系統(tǒng)輸出存在穩(wěn)態(tài)誤差。比如上面的只 能走到108,無論怎樣都走不到門0。2) PI積分控制,就是按照一定的步伐走到112步
18、然后回頭接著走,走到 108步位置時(shí),然后又回頭向110步位置走。在門0位置處來回晃蕩幾次, 最后停在門0步的位置。說明:在積分I控制中,控制器的輸出與輸入誤 差信號(hào)的積分成正比關(guān)系對(duì)一個(gè)自動(dòng)控制系統(tǒng)來說,如果在進(jìn)入穩(wěn)態(tài)后存 在穩(wěn)態(tài)誤差,則稱這個(gè)控制系統(tǒng)是有穩(wěn)態(tài)誤差的或簡(jiǎn)稱有差系統(tǒng)為了消除 穩(wěn)態(tài)誤差,在控制器中必須引入“積分項(xiàng)”。積分項(xiàng)對(duì)誤差的影響取決于 時(shí)間的積分,隨著時(shí)間的增加,積分項(xiàng)會(huì)增大。這樣,即便誤差很小,積分項(xiàng) 也會(huì)隨著時(shí)間的增加而加大,它推動(dòng)控制器的輸出增大,從而使穩(wěn)態(tài)誤差 進(jìn)一步減小,直到等于0因此,比例+積分(PI)控制器可以使系統(tǒng)在進(jìn)入 穩(wěn)態(tài)后無穩(wěn)態(tài)誤差。3) PD微分控制
19、,就是按照一定的步伐走到一百零幾步后,再慢慢地走向 門0步的位置靠近,如果最后能精確停在門0步的位置,就是無靜差控制; 如果停在"0步附近(如109步或1門步位置),就是有靜差控制. 說明:在微分控制D中,控制器的輸出與輸入誤差信號(hào)的微分(即誤差的變 化率)成正比關(guān)系.自動(dòng)控制系統(tǒng)在克服誤差的調(diào)節(jié)過程中可能會(huì)出現(xiàn)振蕩甚至失 穩(wěn),原因是存在較大慣性組件(環(huán)節(jié))或滯后組件,具有抑制誤差的作用, 其變化總是落后于誤差的變化。解決的辦法是使抑制誤差作用的變化“超 前”,即在誤差接近于零時(shí),抑制誤差的作用就應(yīng)該是零。這就是說,在 控制器中僅引入“比例P”項(xiàng)往往是不夠的,比例項(xiàng)的作用僅是放大誤差
20、的 幅值,而目前需要增加的是“微分項(xiàng)“,它能預(yù)測(cè)誤差變化的趨勢(shì)。這樣,具 有比例+微分的控制器就能夠提前使抑制誤差的控制作用等于零,甚至為負(fù) 值,從而避免了被控量的嚴(yán)重超調(diào)。所以對(duì)有較大慣性或滯后的被控對(duì)象, 比例P+微分D(PD)控制器能改善系統(tǒng)在調(diào)節(jié)過程中的動(dòng)態(tài)特性.五、用小明來說明PID:小明接到這樣一個(gè)任務(wù):有一個(gè)水缸有點(diǎn)漏水(而且漏水的速 度還不一定固定不變),要求水面高度維持在某個(gè)位置,一旦發(fā)現(xiàn)水面高度 低于要求位置,就要往水缸里加水。小明接到任務(wù)后就一直守在水缸旁邊, 時(shí)間長(zhǎng)就覺得無聊,就跑到房里看小說了,每30分鐘來檢查一次水面高度。 水漏得太快,每次小明來檢查時(shí),水都快漏完了
21、,離要求的高度相差很遠(yuǎn), 小明改為每3分鐘來檢查一次,結(jié)果每次來水都沒怎么漏,不需要加水, 來得太頻繁做的是無用功。幾次試驗(yàn)后,確定每10分鐘來檢查一次.這個(gè) 檢查時(shí)間就稱為采樣周期.開始小明用瓢加水,水龍頭離水缸有十幾米的 距離,經(jīng)常要跑好幾趟才加夠水,于是小明又改為用桶加,一加就是一桶, 跑的次數(shù)少了,加水的速度也快了,但好幾次將缸給加溢出了,不小心弄濕 了幾次鞋,小明又動(dòng)腦筋,我不用瓢也不用桶,老子用盆,幾次下來,發(fā)現(xiàn) 剛剛好,不用跑太多次,也不會(huì)讓水溢出。這個(gè)加水工具的大小就稱為比例 系數(shù)。小明又發(fā)現(xiàn)水雖然不會(huì)加過量溢出了,有時(shí)會(huì)高過要求位置比 較多,還是有打濕鞋的危險(xiǎn)。他又想了個(gè)辦法,在水缸上裝一個(gè)漏斗,每 次加水不直接倒進(jìn)水缸,而是倒進(jìn)漏斗讓它慢慢加。這樣溢出的問題解決 了,但加水的速度又慢了,有時(shí)還趕不上漏水的速度。于是他試著變換不 同大小口徑的漏斗來控制加水的速度,最后終于找到了滿意的漏斗。漏斗的 時(shí)間就稱為積分時(shí)間。小明終于喘了一口,但任務(wù)的要求突然嚴(yán)了,水位控制的及時(shí) 性要求大大提高,一旦水位過低,必須立即將水加到要求位置,而且
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人租房押付三合同
- 廣告設(shè)計(jì)制作合同協(xié)議書
- 客車駕駛員聘用協(xié)議書
- 分期付款設(shè)備買賣合同
- 物資倉庫裝修施工方案
- 下部結(jié)構(gòu)施工方案
- 宿遷住宅防水施工方案
- 安徽省部分學(xué)校2024-2025學(xué)年高三下學(xué)期3月調(diào)研考試歷史試題(原卷版+解析版)
- 暖氣片施工方案
- 泡沫箱和紙箱加工生產(chǎn)線環(huán)評(píng)報(bào)告表
- 幼兒繪本故事:波西和皮普大怪獸
- 譯林版五年級(jí)英語下冊(cè) Unit 5 第2課時(shí) 教學(xué)課件PPT小學(xué)公開課
- 全套電子課件:混凝土結(jié)構(gòu)設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter2 Array
- 新版PEP小學(xué)英語3-6年級(jí)單詞表(共14頁)
- 2022年城市軌道交通行車值班員三級(jí)考試題庫(附答案)
- 入門級(jí)新概念英語青少版A unit8
- 應(yīng)用隨機(jī)過程PPT課件
- 鋁合金門窗檢測(cè)資料
- 腫瘤學(xué)總論ppt課件
評(píng)論
0/150
提交評(píng)論