PID算法的C語言實現
積分飽和通俗講就是系統在一個偏差方向上的飽和,下面一起來跟着小編學習一下PID算法的C語言實現方法吧,希望可以幫助到大家!
比如一個系統設定了輸出不會超過100,但因為出現一個方向上的偏差積分使得輸出超過了100,此時達到了飽和狀態,如果繼續在這個方向上積分會導致PID控制超過100系統卻運行在100,相當於積分調節對系統輸出沒有作用,就出現失控的.狀態,這是系統不能接受的,而且飽和積分越深,退出飽和就越久。上面是在正向的飽和,負向的飽和類似!
為了解決這個問題,我們採用抗積分飽和算法,其思路就是:如果上一次的輸出控制量超過了飽和值,飽和值為正,則這一次只積分負的偏差,飽和值為負,則這一次只積分正的偏差,從而避免系統長期留在飽和區!
下面我以 位置型+抗積分飽和+積分分離的PID控制算法C語言來觀察調節結果:(相對應的代碼可以參考以往的文章)
//位置型+抗積分飽和+積分分離 PID控制算法
struct _pid{
float SetSpeed;
float ActualSpeed;
float Err;
float Err_Last;
float Kp,Ki,Kd;
float Voltage;
float Integral;
float Umax; //最大正飽和上限值
float Umin; //最大負飽和下限值
}pid;
void PID_Init(void)
{
printf("PID_Init begin!");
peed = 0;
alSpeed = 0;
= 0;
_Last = 0;
= 0.2;
= 0.1; //增大了積分環節的值
= 0.2;
age = 0;
gral = 0;
= 400; //正飽和值為400
= -200; //負飽和值為-200
printf("PID_Init end!");
}
float PID_Cal(float Speed)
{
unsigned char index;
peed = Speed;
= peed - alSpeed;
if(alSpeed>) //如果上一次輸出變量出現正向的飽和
{
if(abs()>200)
{
index = 0;
}
else
{
index = 1;
if(<0)
{
gral += ; //正飽和只積分負偏差
}
}
}
else if(alSpeed {
if(abs()>200)
{
index = 0;
}
else
{
index = 1;
if(>0)
{
gral += ; //負飽和只積分正偏差
}
}
}
else
{
if(abs()>200) //積分分離的PID優化,可參考以往的文章
{
index = 0;
}
else
{
index = 1;
gral += ;
}
}
age = * +index**gral + *( - _Last);
_Last = ;
alSpeed = age*1.0;
return alSpeed;
}
int main(void)
{
int count = 0 ;
printf("SYSTEM BEGIN!");
PID_Init();
while(count<1000)
{
float speed = PID_Cal(200.0);
printf("-%d-%f-",count,speed);
count++;
}
return 0;
}
最後運行結果:
我們發現,相對以往的算法,還算法大大提高了調節的速度和穩定!
-
C++中四種加密算法之DES源代碼
DES算法是一種最通用的對稱密鑰算法,因為算法本身是公開的,所以其安全性在於密鑰的安全性。基於密鑰的算法通常有兩類:對稱算法和公開密鑰算法。對稱算法的對稱性體現在加密密鑰能夠從解密密鑰推算出來,反之亦然。下面梳理了C++中四種加密算法之DES源代碼,供大家參...
-
2017年計算機C語言試題
2017年計算機C語言試題1應當隨時學習,學習一切;應該集中全力,以求知道得更多,知道一切。以下是小編為大家搜索整理的計算機C語言試題,希望對大家有所幫助!更多精彩內容請及時關注我們應屆畢業生考試網!1、下列數據結構中,屬於非線性結構的是A、雙向鏈表B、循環鏈表C...
-
2017年計算機C語言考試編程練習題及答案
江山代有才人出,各領風騷數百年。以下是小編為大家搜索整理的`2017年計算機C語言考試編程練習題及答案,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!1.從鍵盤上輸入8個浮點數,編程求出其和以及平均值。要求寫出求和以及平均值的函數。答:編...
-
C語言學習攻略
導語:C語言作為最流行的程序設計語言,是任何一個計算機專業及其愛好者們都必須掌握的一門編程語言。下面就由小編為大家介紹一下C語言學習攻略,歡迎大家閲讀!一、C語言學習中存在的問題(一)基礎薄弱,無法適應C語言學習的課程通常安排在大一,這個時候,學生們剛剛進入...