當前位置:首頁 » 操作系統 » pid演算法的實現

pid演算法的實現

發布時間: 2022-11-14 05:16:31

① 一文搞懂PID控制演算法

PID演算法是工業應用中最廣泛演算法之一,在閉環系統的控制中,可自動對控制系統進行准確且迅速的校正。PID演算法已經有100多年歷史,在四軸飛行器,平衡小車、汽車定速巡航、溫度控制器等場景均有應用。

之前做過循跡車項目,簡單循跡搖擺幅度較大,效果如下所示:

PID演算法優化後,循跡穩定性能較大提升,效果如下所示:

PID演算法:就是「比例(proportional)、積分(integral)、微分(derivative)」,是一種常見的「保持穩定」控制演算法。

常規的模擬PID控制系統原理框圖如下所示:

因此可以得出e(t)和u(t)的關系:

其中:

Kp:比例增益,是調適參數;

Ki:積分增益,也是調適參數;

Kd:微分增益,也是調適參數;

e:誤差=設定值(SP)- 回授值(PV);

t:目前時間。

數學公式可能比較枯燥,通過以下例子,了解PID演算法的應用。

例如,使用控制器使一鍋水的溫度保持在50℃,小於50℃就讓它加熱,大於50度就斷電不就行了?

沒錯,在要求不高的情況下,確實可以這么干,如果換一種說法,你就知道問題出在哪裡了。

如果控制對象是一輛汽車呢?要是希望汽車的車速保持在50km/h不動,這種方法就存在問題了。

設想一下,假如汽車的定速巡航電腦在某一時間測到車速是45km/h,它立刻命令發動機:加速!

結果,發動機那邊突然來了個100%全油門,嗡的一下汽車急加速到了60km/h,這時電腦又發出命令:剎車!結果乘客吐......

所以,在大多數場合中,用「開關量」來控制一個物理量就顯得比較簡單粗暴了,有時候是無法保持穩定的,因為單片機、感測器不是無限快的,採集、控制需要時間。

而且,控制對象具有慣性,比如將熱水控制器拔掉,它的「余熱」即熱慣性可能還會使水溫繼續升高一小會。

此時就需要使用PID控制演算法了。

接著咱再來詳細了解PID控制演算法的三個最基本的參數:Kp比例增益、Ki積分增益、Kd微分增益。

1、Kp比例增益

Kp比例控制考慮當前誤差,誤差值和一個正值的常數Kp(表示比例)相乘。需要控制的量,比如水溫,有它現在的 當前值 ,也有我們期望的 目標值 。

當兩者差距不大時,就讓加熱器「輕輕地」加熱一下。

要是因為某些原因,溫度降低了很多,就讓加熱器「稍稍用力」加熱一下。

要是當前溫度比目標溫度低得多,就讓加熱器「開足馬力」加熱,盡快讓水溫到達目標附近。

這就是P的作用,跟開關控制方法相比,是不是「溫文爾雅」了很多。

實際寫程序時,就讓偏差(目標減去當前)與調節裝置的「調節力度」,建立一個一次函數的關系,就可以實現最基本的「比例」控制了~

Kp越大,調節作用越激進,Kp調小會讓調節作用更保守。

若你正在製作一個平衡車,有了P的作用,你會發現,平衡車在平衡角度附近來回「狂抖」,比較難穩住。

2、Kd微分增益

Kd微分控制考慮將來誤差,計算誤差的一階導,並和一個正值的常數Kd相乘。

有了P的作用,不難發現,只有P好像不能讓平衡車站起來,水溫也控製得晃晃悠悠,好像整個系統不是特別穩定,總是在「抖動」。

設想有一個彈簧:現在在平衡位置上,拉它一下,然後鬆手,這時它會震盪起來,因為阻力很小,它可能會震盪很長時間,才會重新停在平衡位置。

請想像一下:要是把上圖所示的系統浸沒在水裡,同樣拉它一下 :這種情況下,重新停在平衡位置的時間就短得多。

此時需要一個控製作用,讓被控制的物理量的「變化速度」趨於0,即類似於「阻尼」的作用。

因為,當比較接近目標時,P的控製作用就比較小了,越接近目標,P的作用越溫柔,有很多內在的或者外部的因素,使控制量發生小范圍的擺動。

D的作用就是讓物理量的速度趨於0,只要什麼時候,這個量具有了速度,D就向相反的方向用力,盡力剎住這個變化。

Kd參數越大,向速度相反方向剎車的力道就越強,如果是平衡小車,加上P和D兩種控製作用,如果參數調節合適,它應該可以站起來了。

3、Ki積分增益

Ki積分控制考慮過去誤差,將誤差值過去一段時間和(誤差和)乘以一個正值的常數Ki。

還是以熱水為例,假如有個人把加熱裝置帶到了非常冷的地方,開始燒水了,需要燒到50℃。

在P的作用下,水溫慢慢升高,直到升高到45℃時,他發現了一個不好的事情:天氣太冷,水散熱的速度,和P控制的加熱的速度相等了。

這可怎麼辦?

P兄這樣想:我和目標已經很近了,只需要輕輕加熱就可以了。

D兄這樣想:加熱和散熱相等,溫度沒有波動,我好像不用調整什麼。

於是,水溫永遠地停留在45℃,永遠到不了50℃。

根據常識,我們知道,應該進一步增加加熱的功率,可是增加多少該如何計算呢?

前輩科學家們想到的方法是真的巧妙,設置一個積分量,只要偏差存在,就不斷地對偏差進行積分(累加),並反應在調節力度上。

這樣一來,即使45℃和50℃相差不是太大,但是隨著時間的推移,只要沒達到目標溫度,這個積分量就不斷增加,系統就會慢慢意識到:還沒有到達目標溫度,該增加功率啦!

到了目標溫度後,假設溫度沒有波動,積分值就不會再變動,這時,加熱功率仍然等於散熱功率,但是,溫度是穩穩的50℃。

Ki的值越大,積分時乘的系數就越大,積分效果越明顯,所以,I的作用就是,減小靜態情況下的誤差,讓受控物理量盡可能接近目標值。

I在使用時還有個問題:需要設定積分限制,防止在剛開始加熱時,就把積分量積得太大,難以控制。

PID演算法的參數調試是指通過調整控制參數(比例增益、積分增益/時間、微分增益/時間) 讓系統達到最佳的控制效果 。

調試中穩定性(不會有發散性的震盪)是首要條件,此外,不同系統有不同的行為,不同的應用其需求也不同,而且這些需求還可能會互相沖突。

PID演算法只有三個參數,在原理上容易說明,但PID演算法參數調試是一個困難的工作,因為要符合一些特別的判據,而且PID控制有其限制存在。

1、穩定性

若PID演算法控制器的參數未挑選妥當,其控制器輸出可能是不穩定的,也就是其輸出發散,過程中可能有震盪,也可能沒有震盪,且其輸出只受飽和或是機械損壞等原因所限制。不穩定一般是因為過大增益造成,特別是針對延遲時間很長的系統。

2、最佳性能

PID控制器的最佳性能可能和針對過程變化或是設定值變化有關,也會隨應用而不同。

兩個基本的需求是調整能力(regulation,干擾拒絕,使系統維持在設定值)及命令追隨 (設定值變化下,控制器輸出追隨設定值的反應速度)。有關命令追隨的一些判據包括有上升時間及整定時間。有些應用可能因為安全考量,不允許輸出超過設定值,也有些應用要求在到達設定值過程中的能量可以最小化。

3、各調試方法對比

4、調整PID參數對系統的影響

② PID控制器是如何實現的

In the conventional PID control algorithm, the proportional, integral and derivative parts are implemented in the forward loop, thus acting on the error between the set-point and closed-loop response. This PID controller implementation may lead to an undesirable phenomenon, namely the derivative kick. Also, by moving the PD part into an inner feedback loop, an unstable or integrating process can be stabilized and then controlled more effectively by the PI controller in the forward path. 在傳統的 PID 控制演算法中將因此根據之間設置點和閉環響應錯誤的正向循環中實現比例、 積分和衍生金融工具的部件。 此 PID 控制器實現可能會導致一個不良的現象就是衍生的踢。 同時,通過將局部放電的一部分移動到一個內部反饋循環,一個不穩定的或將集成過程可以穩定,然後向前路徑中的 PI 控制器通過更有效地控制。
Therefore, the control structure shown in Fig. 1, which is known as a PI-PD control structure, has been proposed. In this structure, G(s) is the plant transfer function因此,提出控制結構,稱為 PI-PD 控制結構的圖 1 所示。 在這種結構 G(s) 是植物傳遞函數
and GPI(s) and GPD(s) are the PI and PD controller transfer functions, respectively, which have the following ideal forms: 與 GPI(s) 和 GPD(s) PI 和 PD 控制器傳輸功能,分別是,哪有以下的理想形式:

This structure, which uses an inner feedback loop, is not a totally new concept. Benouarets [11] was the first to mention the PI-PD controller structure. Unfortunately, its true potential was not recognized there as it was used to control plants with simple stable real pole transfer functions where its advantages are relatively minor. Later, Kwak et al. [6] and Park et al. [2] used a PID-P control structure for controlling integrating and unstable processes, respectively. However, as they still use the derivative term, D, in the forward path, the structure這種結構,使用一個內反饋循環,不是一種全新的概念。 Benouarets [11] 率先提 PI-PD 控制器結構。 不幸的是,它的真正潛力未被識別存在,它用來控制植物與真正的簡單穩定桿傳遞函數,其優點是相對較小。 稍後,郭 et al.[6] 和 [2] 公園 et al.,分別控制集成和不穩定的進程使用-P PID 控制結構。 但是,作為他們仍使用該結構正向的路徑中的衍生金融工具的術語 D,
may result in a derivative kick. Also, they use a gain only controller to alter the open-loop unstable or integrating processes to open-loop stable processes and then可能會導致衍生的踢。 他們還,改變開環穩定進程的開環不穩定或集成過程使用增益唯一控制器,然後
use the PID controller for an effective control of the overall system. It is better to use an inner feedback loop with a PD controller rather than a P-only controller, as this not only converts the open-loop unstable or integrating processes to open-loop stable processes but also guarantees more suitable pole locations. To clarify this better, consider the PD controller of the form given by
Eq. 2 and a general plant transfer function of 使用一個有效的控制整個系統的 PID 控制器。 最好 PD 控制器,而不是一個只 P 的控制器使用一個內反饋循環,因為這不僅能將開環不穩定或集成流程轉換為開環穩定進程,也保證了更適合桿位置。 若要更好地闡明這,考慮給予式 2 和一個總廠傳遞函數的窗體的 PD 控制器The closed-loop transfer function for the inner loop, 在內部的循環的閉環傳遞函數
with G(s) given by Eq. 3, is獲式 3 G(s),是

provided that n>m+2. The modification in the last two erms of the denominator of Eq. 4, e to the insertion f the PD controller used in the feedback loop, is clear. 提供該 n > m + 2。 由於到使用反饋及時插入 f 規劃署控制器的式 4,分母的最後兩個條款的修改是清晰
Let us assume that the coefficients a0 and a1 take suitable alues to make the plant transfer function given in Eq. 3 unstable, integrating or a resonant plant transfer讓我們假定您與系數 a0 a1 採取適當 alues 進行傳遞函數方程 3 不穩定,集成中給出的植物或共振的植物傳輸
function. The PD controller used in the inner feedback loop can be used to convert it to an open-loop stable plant transfer function for the PI controller used in the函數。 內反饋循環中使用的 PD 控制器可用來將其轉換為一個開環穩定植物傳遞函數中使用的 PI 控制器,
forward loop, which can then be used for a more satisfactory closed-loop performance. Another point, which should be pointed out, is that the use of the PI-PD controller gives more flexibility than a PID-P controller to locate the poles of open-loop plant transfer function Gil(s) in more desired locations, with the simultaneous轉發,然後可用於更令人滿意的閉環性能的循環。 應該指出,另一點是 PI-PD 控制器的使用提供更大的靈活性,比在更多所需的位置,同時與找到的開環植物傳遞函數 Gil(s) 桿將-P PID 控制器
use of Kf and Td rather than a gain-only parameter Kf. 使用的 Kf 和 Td 而不是只增益參數 Kf
呵呵,在線翻譯的。

③ pid控制演算法的DSP程序設計與實現

typedef struct PID {

int SetPoint; // 設定目標 Desired value

int Proportion; // 比例常數 Proportional Const
int Integral; // 積分常數 Integral Const
int Derivative; // 微分常數 Derivative Const

unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
unsigned int SumError; // Sums of Errors

// double Lastout; //上次輸出
unsigned int E1; // e1>e2
unsigned int E2; //

int Pmax;//上限
int Pmin;//下限

} PID;

/*====================================================================================================
PID計算部分,遇限消弱積分PID防飽和,積分分離演算法實現
=====================================================================================================*/

int PIDCalc( PID *pp, unsigned int NextPoint )
{
int dError,
Error;

Error = pp->SetPoint - NextPoint; //偏差
if (Error<=-pp->E1) return (pp->Pmin); //飽和
else if (Error>=pp->E1)
return (pp->Pmax);
else
{
dError = pp->LastError - pp->PrevError; // 當前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
if (Error>=pp->E2||Error<=-pp->E2) //分離
return (pp->Proportion * Error // 比例項
+ pp->Derivative * dError );//PD,考慮限幅
else //位置式
{
pp->SumError += Error; // 積分
return (pp->Proportion * Error // 比例項
+ pp->Integral * pp->SumError // 積分項
+ pp->Derivative * dError // 微分項 //PID
);
}
}
}

④ 什麼是pid演算法,難學嗎,用C語言,plc怎麼實現

一、什麼是PID:

PID即:Proportional(比例)、Integral(積分)、Differential(微分)的縮寫。顧名思義,PID控制演算法是結合比例、積分和微分三種環節於一體的控制演算法,它是連續系統中技術最為成熟、應用最為廣泛的一種控制演算法,該控制演算法出現於20世紀30至40年代,適用於對被控對象模型了解不清楚的場合。 ---網路

二、PID是否難學:

在工業應用中PID及其衍生演算法是應用最廣泛的演算法之一,是當之無愧的萬能演算法,如果能夠熟練掌握PID演算法的設計與實現過程,對於一般的研發人員來講,應該是足夠應對一般研發問題了,而難能可貴的是,在我所接觸的控制演算法當中,PID控制演算法又是最簡單,最能體現反饋思想的控制演算法,可謂經典中的經典。經典的未必是復雜的,經典的東西常常是簡單的,而且是最簡單的,想想牛頓的力學三大定律吧,想想愛因斯坦的質能方程吧,何等的簡單!簡單的不是原始的,簡單的也不是落後的,簡單到了美的程度。 ---【1】

三、PID演算法的C語言源碼

PID 控制演算法可以分為位置式 PID和增量式 PID控制演算法

詳細見參考【1】【2】


參考:

【1】PID演算法

【2】簡易PID演算法的快速掃盲(超詳細+過程推導+C語言程序)

⑤ 關於Android系統實現PID演算法控制溫度

第一步:把器件等各種實物連上
第二步:開環,對PWM的控溫信號加階躍(改變PWM的占空比),由輸入輸出的結果大致得出加熱器的數學模型
第三部:由理論公式整定出PID參數
第四部:根據實際結果調節PID以達到你想要的指標

⑥ 用PID演算法實現溫度控制

第一步:把器件等各種實物連上...
第二步:開環,對PWM的控溫信號加階躍(改變PWM的占空比),由輸入輸出的結果大致得出加熱器的數學模型
第三部:由理論公式整定出PID參數
第四部:根據實際結果調節PID以達到你想要的指標

⑦ 積分分離PID演算法如何實現為什麼要引入積分分離PID演算法與常規PID演算法對比

摘要 我們已經講述了PID控制引入積分主要是為了消除靜差,提高控制精度。但在過程的啟動、結束或大幅度增減設定值時,短時間內系統輸出有很大偏差,會造成PID運算的積分累積,引起超調或者振盪。為了解決這一干擾,人們引入了積分分離的思想。其思路是偏差值較大時,取消積分作用,以免於超調量增大;而偏差值較小時,引入積分作用,以便消除靜差,提高控制精度。

⑧ PID演算法的C語言實現

基本流程

積分環節:主要是用來消除 靜差 (系統穩定後輸出值和設定值之間的差值,積分環節實際上就是偏差累積的過程,把累積的誤差加到原來系統上以抵消系統造成的靜差)

微分環節:反映了偏差信號的變化規律,根據偏差信號的變化規律來進行超前調節,從而增加系統的快速性

對上述公式進行離散化(采樣):兩個公式

增量型PID:

通過增量型PID公式可以看出,最終表達結果和最近三次的偏差有關,最終輸出結果應該為:

首先定義結構變數體:

然後初始化變數

最後編寫控制演算法

基本演算法,沒有考慮死區問題,沒有設定上下限

在啟動、結束或大幅度增減設定時,短時間內系統輸出有很大的偏差,會造成PID運算的積分積累,導致控制量超過執行機構可能允許的最大動作范圍對應的極限控制量,從而引起較大的超調,甚至是振盪。

為了克服這個問題,引入積分分離的概念,即當被控量和設定值偏差較大時,取消積分作用;當被控量接近設定值時,引入積分控制,以消除靜差,提高精度。

abs :絕對值

令index=0使積分環節失效

積分飽和現象:如果系統存在一個方向的偏差,PID控制器的輸出由於積分作用的不斷累加而加大,從而導致執行機構達到極限位置。此時計算器輸出量超出正常運行范圍而進入飽和區,一旦系統出現反向偏差,輸出量將逐漸從飽和區退出,進入飽和區越深則退出飽和區時間越長,在這段時間里,執行機構仍然停留在極限位置而不隨偏差反向而立即做出相應改變,造成性能惡化。

採用梯形積分能夠減小余差,提高精度

改變積分系數,若偏差大,積分作用減弱,系數減小;若偏差小,積分作用增強,系數增大。

變積分PID的基本思想是設法改變積分項的累加速度,使其與偏差大小對應。

使整個系統的穩定速度非常快

比例系數Kp的作用是加快系統的響應速度提高系統的調節精度

積分系數Ki的作用是消除系統的穩態誤差

微分系數Kd的作用是改善系統的動態特性

反應系統性能的兩個參數是系統誤差和誤差變化律

⑨ PID演算法實現該系統控制

增量式PID控製程序:
%Increment PID Controller
clear all
close all
ts=0.005;
sys=tf([0.1,10],[0.0004,0.0454,0.555,1.51,11],'inputdelay',0.2);
dsys=c2d(sys,ts,'z');
[num den]=tfdata(dsys,'v');
for k=1:44
yout(k)=0;
end
u_1=0;u_2=0;u_3=0;u_4=0;
y_1=0.0;y_2=0.0;y_3=0.0;y_4=0.0;
x=[0,0,0];error_1=0,error_2=0;
kp=0.016;ki=0.056;kd=1
for k=45:1000
time(k)=k*ts;
kp=0.55,ki=0,kd=0;
rin(k)=1.0;
(k)=kp*x(1)+kd*x(2)+ki*x(3);
u(k)=u_1+(k);
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3-den(5)*y_4+num(1)*u_1+num(2)*u_2+num(3)*u_3+num(4)*u_4
error=rin(k)-yout(k);
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_4=y_3;y_3=y_2;y_2=y_1;y_1=yout(k);
x(1)=error-error_1; %calculating p
x(2)=error-2*error_1+error_2; %calculating d
x(3)=error; %calculating i
error_2=error_1;error_1=error;
end
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)'),ylabel('rin,yout');
title('單位階躍響應曲線')

Z-N法整定:
clear all
close all
ts=0.005;
sys=tf([0.1,10],[0.0004,0.0454,0.555,1.51,11],'inputdelay',0.2);
dsys=c2d(sys,ts,'z');
rlocus(dsys)

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372