1.簡介
PID控制算法作爲自動控制系統中廣泛應用的一種控制算法,小到控制一個元件的溫度,大到控制無人機的飛行姿態和飛行速度等等,都可以使用PID控制。控制器問世至今已有近 70 年曆史,它以其結構簡單、穩定性好、工作可靠、調整方便而成爲工業控制的主要技術之一。
經過幾十年的發展,PID 控制及其控制器或智能 PID 控制器(儀表)已經很多,產品已在工程實際中得到了廣泛的應用,有各種各樣的 PID 控制器產品,各大公司均開發了具有 PID 參數自整定功能的智能調節器(intelligent regulator),其中 PID 控制器參數的自動調整是通過智能化調整或自校正、自適應算法來實現。
2.PID控制原理及特點
PID,就是“比例(proportional)、積分(integral)、微分(derivative)”三個調節參數的縮寫,而將偏差的比例(Proportion)、積分(Integral)和微分(Differential)通過線性組合構成控制量,用這一控制量對被控對象進行控制,這樣的控制器便稱 PID 控制器。
PID調節器是一種線性調節器,它將給定值r(t)與實際輸出值c(t)的偏差的比例§、積分(I)、微分(D)通過線性組合構成控制量,對控制對象進行控制。
(1)PID控制器的微分方程
(2)PID調節器的傳遞函數
(3)PID調節器各校正環節的作用
1.比例環節:即時成比例地反應控制系統的偏差信號e(t),偏差一旦產生,調節器立即產生控制作用以減小偏差。
數學表達式:
2.積分環節:主要用於消除靜差,提高系統的無差度。積分作用的強弱取決於積分時間常數TI,TI越大,積分作用越弱,反之則越強。
數學表達式:
3.微分環節:能反應偏差信號的變化趨勢(變化速率),並能在偏差信號的值變得太大之前,在系統中引入一個有效的早期修正信號,從而加快系統的動作速度,減小調節時間。
數學表達式:
3.數字PID控制器
在計算機控制系統中,由於控制是使用採樣控制,它只能根據採樣時刻的偏差計算控制量,而不能像模擬控制那樣連續輸出控制量量,進行連續控制。所以數字PID控制也屬於離散型控制系統。數字型PID控制算法可分爲位置式PID和增量式PID控制算法。
- 位置式PID:位置式PID控制的輸出與整個過去的狀態有關,用到了誤差的累加值;
- 增量式PID:而增量式PID的輸出只與當前拍和前兩拍的誤差有關,
(1) 位置式PID
由於是離散型控制系統,積分項和微分項不能直接使用,必須進行離散化處理。離散化處理的方法爲:以 T 作爲採樣週期,k 作爲採樣序號,則離散採樣時間 kT 對應着連續時間t,用矩形法數值積分近似代替積分,用一階後向差分近似代替微分,可作如下近似變換:
根據以上公式的轉換,便可得到離散的PID表達式
位置式PID算法的特點:
由於全量輸出,所以每次輸出均與過去狀態有關,計算時要對ek進行累加,工作量大;並且,因爲計算機輸出的uk 對應的是執行機構的實際位置,如果計算機出現故障,輸出的 uk將大幅度變化,會引起執行機構的大幅度變化,有可能因此造成嚴重的生產事故,這在實生產際中是不允許的。
(2) 增量式PID
所謂增量式 PID 是指數字控制器的輸出只是控制量的增量∆uk。當執行機構
需要的控制量是增量,而不是位置量的絕對數值時,可以使用增量式PID控制算法進行控制。
增量式 PID 控制算法可以通過位置式PID公式推導出。由位置式PID公式可以得到控制器的第 k-1 個採樣時刻的輸出值爲:
增量式PID算法的特點:
增量式 PID 控制算法與位置式 PID 算法公式相比,如果計算機控制系統採用恆定的採樣週期 T,一旦確定Kp、Ti、Td參數,只要使用前後三次測量的偏差值,就可以由增量式PID公式求出控制量。計算量小的多,因此在實際中得到廣泛的應用。
4.實例講解
下面列舉一個溫度控制實例來講解增量式PID控制算法的應用。
要使用 PID 算法控制的系統某個參數,必須有該參數的相關反饋變量。比如,現在要控制水箱的溫度,那我們就得通過溫度傳感器採集得到的反饋數據。通過設定水箱的目標溫度,採用增量式 PID控制算法,控制水箱的加溫元件,使得水箱在不同的外界溫度下還是保持在目標速度附近波動。
(1)設置PID參數及變量
首先,我們定義溫度的目標溫度、PID是比例、積分、微分常數,及前後三次偏差值
int16 High_temp = 50; //預設溫度上限
int16 Low_temp = 30; //預設溫度下限
int16 Set_temp = 45; //設置目標溫度
int16 Proportion = 64; // 比例常數 Proportional Const
int16 Integral = 0; // 積分常數 Integral Const
int16 Derivative = 54; // 微分常數 Derivative Const
float LastError; // Error[-1]
float PrevError; // Error[-2]
float SumError; // Sums of Errors
(2)PID運算函數
在實際運算時,由於水具有很大的熱慣性,而且PID 運算中的I(積分項)具有非常明顯的延遲效應,積分項常數不宜過大或者可直接省略積分環節,下面C 代碼所示爲PD 控制的實現過程:
float PID_Calc(float NextPoint ,float SetPoint)
{
//增量法計算公式:
//Pdt=Kp*[E(t)-E(t-1)]+Ki*E(t)+Kd*[E(t)-2*E(t-1)+E(t-2)]
float D_Error,Error;
float II;
Error = SetPoint-NextPoint; //偏差
SumError+=Error; // 積分
D_Error =LastError-PrevError; // 當前微分
PrevError = LastError;
LastError = Error;
II = Integral*SumError/10000.0; //積分縮小10000倍
if(II>30) //積分飽和限制
{
II=30;
}
return (Proportion*Error+II+Derivative*D_Error);
}
(3)水箱實際溫度控制
水箱的水溫加熱棒控制採用PWM的控制,PWM佔空比越大,加熱速度越快。以下函數爲當目標溫度大於實際溫度時,PID控制器工作,對加溫進行控制;當目標溫度小於實際溫度時,PWM佔空比爲0,停止加熱。
void Control_Temp(void)
{
Now_temp = Temp_numbe;
Target_temp = Set_temp;
if(Now_temp>High_temp)
{
PWM_duty = 0;
}
else
{
Temp_Out = PID_Calc(Now_temp,Target_temp);
if(Temp_Out >= 100) Temp_Out = 100;
else if(Temp_Out <=0) Temp_Out = 0;
//不同的溫度設置不同的比例補償熱量損失
//Temp_Out = Temp_Out+Target_temp/80.0*20;
PWM_duty = (int)Temp_Out;
}
}
通過以上三個步驟,然後設定適當的採樣時間,便完成了PID控制算法的實現。然後我們便可根據實際的控制環境,對比例、積分、微分參數逐一進行整定。
如果您喜歡,可關注個人公衆號“電子應用學習館”,獲取更多的資料例程。