51單片機PID算法程序(三)增量式PID控制算法_第1頁
51單片機PID算法程序(三)增量式PID控制算法_第2頁
51單片機PID算法程序(三)增量式PID控制算法_第3頁
51單片機PID算法程序(三)增量式PID控制算法_第4頁
51單片機PID算法程序(三)增量式PID控制算法_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 . . . 51單片機PID算法程序(一)PID算法(原創(chuàng)文章,請注明出處blog.ednchina./tengjingshu )比例,積分,微分的線性組合,構成控制量u(t),稱為:比例(Proportional)、積分(Integrating)、微分(Differentiation)控制,簡稱PID控制圖1控制器公式在實際應用中,可以根據受控對象的特性和控制的性能要求,靈活地采用不同的控制組合,構成比例(P)控制器  比例+積分(PI)控制器 比例+積分+微分(PID)控制器式中或 式中控制系統中的應用在單回路控制系統中,由于擾動作用使被控參數偏離

2、給定值,從而產生偏差。自動控制系統的調節(jié)單元將來自變送器的測量值與給定值相比較后產生的偏差進行比例、積分、微分(PID)運算,并輸出統一標準信號,去控制執(zhí)行機構的動作,以實現對溫度、壓力、流量、也為與其他工藝參數的自動控制。比例作用P只與偏差成正比;積分作用I是偏差對時間的積累;微分作用D是偏差的變化率;比例(P)控制比例控制能迅速反應誤差,從而減少穩(wěn)態(tài)誤差。除了系統控制輸入為0和系統過程值等于期望值這兩種情況,比例控制都能給出穩(wěn)態(tài)誤差。當期望值有一個變化時,系統過程值將產生一個穩(wěn)態(tài)誤差。但是,比例控制不能消除穩(wěn)態(tài)誤差。比例放大系數的加大,會引起系統的不穩(wěn)定。圖2比例(P)控制階躍響應積分(I

3、)控制在積分控制中,控制器的輸出與輸入誤差信號的積分成正比關系。為了減小穩(wěn)態(tài)誤差,在控制器中加入積分項,積分項對誤差取決于時間的積分,隨著時間的增加,積分項會增大。這樣,即使誤差很小,積分項也會隨著時間的增加而加大,它推動控制器的輸出增大使穩(wěn)態(tài)誤差進一步減少,直到等于零。積分(I)和比例(P)通常一起使用,稱為比例+積分(PI)控制器,可以使系統在進入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差。如果單獨用積分(I)的話,由于積分輸出隨時間積累而逐漸增大,故調節(jié)動作緩慢,這樣會造成調節(jié)不與時,使系統穩(wěn)定裕度下降。圖3積分(I)控制和比例積分(PI)控制階躍相應微分(D)控制在微分控制中,控制器的輸出與輸入誤差信號的微分(

4、即誤差的變化率)成正比關系。由于自動控制系統有較大的慣性組件(環(huán)節(jié))或有滯后(delay)組件,在調節(jié)過程中可能出現過沖甚至振蕩。解決辦法是引入微分(D)控制,即在誤差很大的時候,抑制誤差的作用也很大;在誤差接近零時,抑制誤差的作用也應該是零。圖4微分 (D)控制和比例微分(PD)控制階躍相應總結: PI比P少了穩(wěn)態(tài)誤差,PID比PI反應速度更快并且沒有了過沖。PID比PI有更快的響應和沒有了過沖。 圖5  增益常數(系數)上升時間過沖建立時間穩(wěn)態(tài)誤差Kp減少增大很小變化減小KI減少增大增加消除KD很小變化減小減少很小變化表1注意,這里的 圖6 典型的P

5、ID控制器對于階躍跳變參考輸入的響應參數的調整應用PID控制,必須適當地調整比例放大系數KP,積分時間TI和微分時間TD,使整個控制系統得到良好的性能。最好的尋找PID參數的辦法是從系統的數學模型出發(fā),從想要的反應來計算參數。很多時候一個詳細的數學描述是不存在的,這時候就需要實際地調節(jié)PID的參數.Ziegler-Nichols方法Ziegler-Nichols方法是基于系統穩(wěn)定性分析的PID整定方法在設計過程中無需考慮任何特性要求,整定方法非常簡單,但控制效果卻比較理想。具體整定方法步驟如下:1. 先置I和D的增益為0,逐漸增加KP直到在輸出得到一個持續(xù)的穩(wěn)定的振蕩。2. 記錄下振蕩時的P部

6、分的臨界增益Kc,和振蕩周期Pc,代到下表中計算出KP,Ti, Td。Ziegler-Nichols整定表 表2 Tyreus-Luyben 整定表: 表3Tyreus-Luyben的整定值減少了振蕩的作用和增強了穩(wěn)定性。自動測試方法:為了確定過程的臨界周期Pc和臨界增益Kc,控制器會臨時使它的PID算法失效,取而代之的是一個ON/OFF的繼電器來讓過程變?yōu)檎袷幍?。這兩個參數很好的將過程行為進行了量化以決定PID控制器應該如何整定來得到理想的閉環(huán)回路性能。圖6 參考資料1)Mixed-Signal Control Circuits Use Microco

7、ntroller for Flexibility in Implementing PID Algorithms,By Eamon Neary (圖1,表1) 2)Atmel 8-bit AVR Microcontrollers Application Note:AVR221: Discrete PID controller (圖2,圖3,圖4,圖5,表2)3)使用Ziegler-Nichols方法的自整定控制article.cechinamag./2007-03/5.htm(圖6)4)Ziegler-Nichols M/tbco/cm416/zn.

8、html(表3)5)Ziegler-Nichols方法PID參數整定-隨風的blogblog.eccn./u/4/archives/2007/97.htm6) PID控制原理教程,胡曉若編制51單片機PID算法程序(二)位置式PID控制算法(請注明出處blog.ednchina./tengjingshu )由51單片機組成的數字控制系統控制中,PID控制器是通過PID控制算法實現的。51單片機通過AD對信號進行采集,變成數字信號,再在單片機過算法實現PID運算,再通過DA把控制量反饋回控制源。從而實現對系統的伺服控制。位置式PID控制算法 位置式PID控制算法的簡化示意圖 

9、 上圖的傳遞函數為: (2-1)在時域的傳遞函數表達式 (2-2)對上式中的微分和積分進行近似 (2-3)式中n是離散點的個數。于是傳遞函數可以簡化為: (2-4)其中u(n)第k個采樣時刻的控制;KP 比例放大系數;   Ki 積分放大系數;Kd 微分放大系數;T 采樣周期。如果采樣周期足夠小,則(2-4)的近似計算可以獲得足夠精確的結果,離散控制過程與連續(xù)過程十分接近。(2-4)表示的控制算法直接按(2-1)所給出的PID控制規(guī)律定義進行計算的,所以它給出了全部控制量的大小,因此被稱為全量式或位置式PID控制算

10、法。缺點:1)            由于全量輸出,所以每次輸出均與過去狀態(tài)有關,計算時要對e(k)(k=0,1,n)進行累加,工作量大。2)            因為計算機輸出的u(n)對應的是執(zhí)行機構的實際位置,如果計算機出現故障,輸出u(n)將大幅度變化,會引起執(zhí)行機構的大幅度變化,有可能因此造成嚴重的生產事故,這在實際生產中是不允許的。位置式PID控制算法C51程序具

11、體的PID參數必須由具體對象通過實驗確定。由于單片機的處理速度和ram資源的限制,一般不采用浮點數運算,而將所有參數全部用整數,運算到最后再除以一個2的N次方數據(相當于移位),作類似定點數運算,可大大提高運算速度,根據控制精度的不同要求,當精度要求很高時,注意保留移位引起的“余數”,做好余數補償。這個程序只是一般常用pid算法的基本架構,沒有包含輸入輸出處理部分。=*/#include <reg52.h>#include <string.h> /C語言中memset函數頭文件/*= PID Function The PID (比例、積分、微分) function is

12、 used in mainly control applications. PIDCalc performs one iteration of the PID algorithm. While the PID function works, main is just a dummy program showing a typical usage. =*/typedef struct PID double SetPoint; / 設定目標Desired valuedouble Proportion; / 比例常數Proportional Const double Integral; / 積分常數

13、Integral Const double Derivative; / 微分常數Derivative Const double LastError; / Error-1 double PrevError; / Error-2 double SumError; / Sums of Errors PID; /*= PID計算部分 =*/ double PIDCalc( PID *pp, double NextPoint ) double dError, Error; Error = pp->SetPoint - NextPoint; / 偏差pp->SumError += Error;

14、 / 積分 dError = Error - pp->LastError; / 當前微分 pp->PrevError = pp->LastError; pp->LastError = Error; return (pp->Proportion * Error / 比例項 + pp->Integral * pp->SumError / 積分項 + pp->Derivative * dError / 微分項 ); /*= Initialize PID Structure PID參數初始化=*/ void PIDInit (PID *pp) memse

15、t ( pp,0,sizeof(PID); /*= Main Program 主程序=* double sensor (void) / Dummy Sensor Function return 100.0; void actuator(double rDelta) / Dummy Actuator Function void main(void) PID sPID; / PID Control Structure double rOut; / PID Response (Output) double rIn; / PID Feedback (Input) PIDInit ( &sPID

16、 ); / Initialize Structure sPID.Proportion = 0.5; / Set PID Coefficients sPID.Integral = 0.5; sPID.Derivative = 0.0; sPID.SetPoint = 100.0; / Set PID Setpoint for (;) / Mock Up of PID Processing rIn = sensor (); / Read Input rOut = PIDCalc ( &sPID,rIn ); / Perform PID Interation actuator ( rOut

17、); / Effect Needed Changes 參考資料:1)Atmel 8-bit AVR Microcontrollers Application Note:AVR221: Discrete PID controller2)茶壺 - pid C程序,好東西 - 騰訊博客 Qzoneqzone. ./blog/381627773)  PID 調節(jié)控制做電機速度控制,SUNPLUS凌陽科技51單片機PID算法程序(三)增量式PID控制算法(請注明出處blog.ednchina./tengjingshu )當執(zhí)行機構需要的不是控制量的絕對值,而是控制量的增量(例如去驅動步進電動機

18、)時,需要用PID的“增量算法”。 增量式PID控制算法可以通過(2-4)式推導出。由(2-4)可以得到控制器的第k-1個采樣時刻的輸出值為: (2-5)將(2-4)與(2-5)相減并整理,就可以得到增量式PID控制算法公式為:(2-6)其中 由(2-6)可以看出,如果計算機控制系統采用恒定的采樣周期T,一旦確定A、B、C,只要使用前后三次測量的偏差值,就可以由(2-6)求出控制量。增量式PID控制算法與位置式PID算法(2-4)相比,計算量小得多,因此在實際中得到廣泛的應用。位置式PID控制算法也可以通過增量式控制算法推出遞推計算公式:(2-7)(2-7)就是目前在計算機控制中廣泛

19、應用的數字遞推PID控制算法。增量式PID控制算法C51程序/*= PID Function The PID (比例、積分、微分) function is used in mainly control applications. PIDCalc performs one iteration of the PID algorithm. While the PID function works, main is just a dummy program showing a typical usage. =*/typedef struct PID int SetPoint; /設定目標 Desire

20、d Valuelong SumError; /誤差累計double Proportion; /比例常數 Proportional Constdouble Integral; /積分常數 Integral Constdouble Derivative; /微分常數 Derivative Const int LastError; /Error-1 int PrevError; /Error-2 PID;static PID sPID; static PID *sptr = &sPID; /*= Initialize PID Structure PID參數初始化=*/ void IncPIDInit(void) sptr->SumError = 0; sptr->LastError

溫馨提示

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

評論

0/150

提交評論