久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: PID算法原理,調(diào)整規(guī)律及代碼 [打印本頁(yè)]

作者: liuyy    時(shí)間: 2015-1-12 14:29
標(biāo)題: PID算法原理,調(diào)整規(guī)律及代碼
一、PID算法簡(jiǎn)介
在智能車競(jìng)賽中,要想讓智能車根據(jù)賽道的不斷變化靈活的行進(jìn),PID算法的采用很有意義。
    首先必須明確PID算法是基于反饋的。一般情況下,這個(gè)反饋就是速度傳感器返回給單片機(jī)當(dāng)前電機(jī)的轉(zhuǎn)速。簡(jiǎn)單的說(shuō),就是用這個(gè)反饋跟預(yù)設(shè)值進(jìn)行比較,如果轉(zhuǎn)速偏大,就減小電機(jī)兩端的電壓;相反,則增加電機(jī)兩端的電壓。

控制器公式 為:
  
 式中  
     顧名思義,P指是比例(Proportion),I指是積分(Integral),D指微分(Differential)。在電機(jī)調(diào)速系統(tǒng)中,輸入信號(hào)為正,要求電機(jī)正轉(zhuǎn)時(shí),反饋信號(hào)也為正(PID算法時(shí),誤差=輸入-反饋),同時(shí)電機(jī)轉(zhuǎn)速越高,反饋信號(hào)越大。要想搞懂PID算法的原理,首先必須先明白P,I,D各自的含義及控制規(guī)律:
比例P比例項(xiàng)部分其實(shí)就是對(duì)預(yù)設(shè)值和反饋值差值的發(fā)大倍數(shù)。舉個(gè)例子,假如原來(lái)電機(jī)兩端的電壓為U0,比例P為0.2,輸入值是800,而反饋值是1000,那么輸出到電機(jī)兩端的電壓應(yīng)變?yōu)閁0+0.2*(800-1000)。從而達(dá)到了調(diào)節(jié)速度的目的。顯然比例P越大時(shí),電機(jī)轉(zhuǎn)速回歸到輸入值的速度將更快,及調(diào)節(jié)靈敏度就越高。從而,加大P值,可以減少?gòu)姆欠(wěn)態(tài)到穩(wěn)態(tài)的時(shí)間。但是同時(shí)也可能造成電機(jī)轉(zhuǎn)速在預(yù)設(shè)值附近振蕩的情形,所以又引入積分I解決此問題。
積分I顧名思義,積分項(xiàng)部分其實(shí)就是對(duì)預(yù)設(shè)值和反饋值之間的差值在時(shí)間上進(jìn)行累加。當(dāng)差值不是很大時(shí),為了不引起振蕩。可以先讓電機(jī)按原轉(zhuǎn)速繼續(xù)運(yùn)行。當(dāng)時(shí)要將這個(gè)差值用積分項(xiàng)累加。當(dāng)這個(gè)和累加到一定值時(shí),再一次性進(jìn)行處理。從而避免了振蕩現(xiàn)象的發(fā)生。可見,積分項(xiàng)的調(diào)節(jié)存在明顯的滯后。而且I值越大,滯后效果越明顯。
微分D微分項(xiàng)部分其實(shí)就是求電機(jī)轉(zhuǎn)速的變化率。也就是前后兩次差值的差而已。也就是說(shuō),微分項(xiàng)是根據(jù)差值變化的速率,提前給出一個(gè)相應(yīng)的調(diào)節(jié)動(dòng)作。可見微分項(xiàng)的調(diào)節(jié)是超前的。并且D值越大,超前作用越明顯。可以在一定程度上緩沖振蕩。比例項(xiàng)的作用僅是放大誤差的幅值,而目前需要增加的是“微分項(xiàng)”,它能預(yù)測(cè)誤差變化的趨勢(shì),這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負(fù)值,從而避免了被控量的嚴(yán)重超調(diào)。
二、參數(shù)調(diào)整一般規(guī)則
由各個(gè)參數(shù)的控制規(guī)律可知,比例P使反應(yīng)變快,微分D使反應(yīng)提前,積分I使反應(yīng)滯后。在一定范圍內(nèi),P,D值越大,調(diào)節(jié)的效果越好。各個(gè)參數(shù)的調(diào)節(jié)原則如下:
PID調(diào)試一般原則
a.       在輸出不振蕩時(shí),增大比例增益P。
b.       在輸出不振蕩時(shí),減小積分時(shí)間常數(shù)Ti。
c.       輸出不振蕩時(shí),增大微分時(shí)間常數(shù)Td。
三、參數(shù)調(diào)整一般步驟
a.確定比例增益P
確定比例增益P 時(shí),首先去掉PID的積分項(xiàng)和微分項(xiàng),一般是令Ti=0、Td=0,PID為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許的最大值的60%~70%,由0逐漸加大比例增益P,直至系統(tǒng)出現(xiàn)振蕩;再反過來(lái),從此時(shí)的比例增益P逐漸減小,直至系統(tǒng)振蕩消失,記錄此時(shí)的比例增益P,設(shè)定PID的比例增益P為當(dāng)前值的60%~70%。比例增益P調(diào)試完成。

b.確定積分時(shí)間常數(shù)Ti
比例增益P確定后,設(shè)定一個(gè)較大的積分時(shí)間常數(shù)Ti的初值,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,之后在反過來(lái),逐漸加大Ti,直至系統(tǒng)振蕩消失。記錄此時(shí)的Ti,設(shè)定PID的積分時(shí)間常數(shù)Ti為當(dāng)前值的150%~180%。積分時(shí)間常數(shù)Ti調(diào)試完成。

c.確定積分時(shí)間常數(shù)Td

積分時(shí)間常數(shù)Td一般不用設(shè)定,為0即可。若要設(shè)定,與確定 P和Ti的方法相同,取不振蕩時(shí)的30%。

d.系統(tǒng)空載、帶載聯(lián)調(diào),再對(duì)PID參數(shù)進(jìn)行微調(diào),直至滿足要求
四、參數(shù)調(diào)整
PID控制器參數(shù)選擇的方法很多,例如試湊法、臨界比例度法、擴(kuò)充臨界比例度法等。但是,對(duì)于PID控制而言,參數(shù)的選擇始終是一件非常煩雜的工作,需要經(jīng)過不斷的調(diào)整才能得到較為滿意的控制效果。依據(jù)經(jīng)驗(yàn),一般PID參數(shù)確定的步驟如下:
(1)確定比例系數(shù)Kp
確定比例系數(shù)Kp時(shí),首先去掉PID的積分項(xiàng)和微分項(xiàng),可以令Ti=0、Td=0,使之成為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許輸出最大值的60%~70%,比例系數(shù)Kp由0開始逐漸增大,直至系統(tǒng)出現(xiàn)振蕩;再反過來(lái),從此時(shí)的比例系數(shù)Kp逐漸減小,直至系統(tǒng)振蕩消失。記錄此時(shí)的比例系數(shù)Kp,設(shè)定PID的比例系數(shù)Kp為當(dāng)前值的60%~70%。
(2)確定積分時(shí)間常數(shù)Ti
比例系數(shù)Kp確定之后,設(shè)定一個(gè)較大的積分時(shí)間常數(shù)Ti,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,然后再反過來(lái),逐漸增大Ti,直至系統(tǒng)振蕩消失。記錄此時(shí)的Ti,設(shè)定PID的積分時(shí)間常數(shù)Ti為當(dāng)前值的150%~180%。
(3) 確定微分時(shí)間常數(shù)Td
微分時(shí)間常數(shù)Td一般不用設(shè)定,為0即可,此時(shí)PID調(diào)節(jié)轉(zhuǎn)換為PI調(diào)節(jié)。如果需要設(shè)定,則與確定Kp的方法相同,取不振蕩時(shí)其值的30%。
(4) 系統(tǒng)空載、帶載聯(lián)調(diào)
對(duì)PID參數(shù)進(jìn)行微調(diào),直到滿足性能要求。
PID代碼如下:
#include<string.h>
#include<stdio.h>
typedef struct PID {

double SetPoint; // 設(shè)定目標(biāo)Desired value
double Proportion; // 比例常數(shù)Proportional Const
double Integral; // 積分常數(shù)Integral Const
double Derivative; // 微分常數(shù)Derivative Const
double LastError; // Error[-1]

double PrevError; // Error[-2]
double SumError; // Sums of Errors
} PID;

/*====================================================================================================
PID計(jì)算函數(shù)
=====================================================================================================*/
double PIDCalc( PID *pp, double NextPoint )
{
    double dError, Error;
    Error = pp->SetPoint - NextPoint; // 偏差
    pp->SumError += Error; // 積分
    dError = pp->LastError - pp->PrevError; // 當(dāng)前微分
    pp->PrevError = pp->LastError;
    pp->LastError = Error;
    return (pp->Proportion * Error // 比例項(xiàng)
    + pp->Integral * pp->SumError // 積分項(xiàng)
    + pp->Derivative * dError // 微分項(xiàng) );
}

/*====================================================================================================
PID結(jié)構(gòu)體變量初始化函數(shù)
=====================================================================================================*/
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}

/*====================================================================================================
讀取輸入變量函數(shù)(在此設(shè)定為固定值100)
======================================================================================================*/
double sensor (void)  
{
return 100.0;
}

/*====================================================================================================
輸出變量控制函數(shù)
======================================================================================================*/

void actuator(double rDelta)  
{
}

//主函數(shù)

void main(void)
{
    PID sPID; // PID Control Structure
    double rOut; // PID Response (Output)
    double rIn; // PID Feedback (Input)
    PIDInit ( &sPID ); // 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 ); // Effect Needed Changes
    }

}

作者: heros    時(shí)間: 2015-1-20 10:26
學(xué)習(xí)了,51黑有你更精彩!!
作者: lingshi1029    時(shí)間: 2015-1-22 10:32
講得太棒了,這是我見過的把智能小車 PID講解的最透徹的文章。

作者: 蒲公英lhl    時(shí)間: 2015-2-2 14:43
終于在手機(jī)上看完了,解決了我一直以來(lái)關(guān)于pid的疑惑 謝謝樓主.

作者: cainiaoPNR    時(shí)間: 2016-4-12 11:08
贊一個(gè)
作者: gqpj    時(shí)間: 2016-4-12 22:41
終于了解pid
作者: 最美ATY    時(shí)間: 2016-4-15 22:05
只能給你刷波666
作者: 小女子    時(shí)間: 2016-4-30 13:56
看完了,卻沒看懂
作者: ssli    時(shí)間: 2016-8-5 00:40
寫的清楚明白
作者: zhuozz    時(shí)間: 2016-11-5 10:21
在實(shí)際的工程例如溫控,速度控制中。也是只用PI控制就可以嗎?
作者: yanhongqiuhe    時(shí)間: 2016-12-17 15:27
很好,謝謝樓主
作者: 925302604    時(shí)間: 2017-4-23 11:11
贊一個(gè),慢慢理解
作者: DX1319003641    時(shí)間: 2017-5-19 10:41
為什么上面說(shuō)微分越大越好,但是下面的微分直接設(shè)置為零????
作者: Daoist    時(shí)間: 2017-7-19 16:14
講的很清楚贊一個(gè)
作者: 啟暖愛人    時(shí)間: 2017-7-27 17:41
講的很清楚贊一個(gè),解決了我一直以來(lái)關(guān)于pid的疑惑 謝謝樓主.
作者: 安茲烏爾恭    時(shí)間: 2017-7-31 15:37
多謝分享經(jīng)驗(yàn)
作者: linnyshow    時(shí)間: 2017-8-4 13:41
參考一下。。。
作者: 零度時(shí)空    時(shí)間: 2017-8-5 21:59
好帖!
作者: TIMEKILLER    時(shí)間: 2017-8-5 22:26
學(xué)習(xí)了,謝謝樓主!
作者: huangjiekaiming    時(shí)間: 2017-8-7 04:32
編程還是不會(huì),傷心
作者: 中國(guó)紅    時(shí)間: 2017-9-12 10:31
怎么進(jìn)行參數(shù)的整定?對(duì)于實(shí)際工程項(xiàng)目來(lái)說(shuō)也是這樣的嗎?
作者: yeyuaihaozhe    時(shí)間: 2017-9-25 11:18
慢滿消化,謝謝
作者: 斬月1124    時(shí)間: 2017-11-2 13:49
看看能不能結(jié)合到我的安卓里面
作者: jian731019    時(shí)間: 2017-11-2 14:25
學(xué)習(xí)了,不光是在智能小車上,在溫度控制上PID也是 一樣的道理!
作者: JACKLI    時(shí)間: 2018-3-31 17:41
學(xué)習(xí)了,51黑有你更精彩!!
作者: owlandauk    時(shí)間: 2018-8-10 10:33
謝謝啦
作者: 在跑道揮灑汗水    時(shí)間: 2018-9-21 13:32
贊一個(gè)
作者: 小楓z    時(shí)間: 2018-9-25 16:33
插個(gè)眼,下來(lái)慢慢理解
作者: haizeiwang123    時(shí)間: 2018-10-29 14:51
贊一個(gè)
作者: hf6    時(shí)間: 2018-12-18 09:30
這是我見過的把PID講解的最透徹,我要好好理解和學(xué)習(xí)

作者: mamahuhu121    時(shí)間: 2018-12-18 13:18
這就是理論與軟件的結(jié)合
作者: QWERTY19    時(shí)間: 2018-12-18 15:09

這就是理論與軟件的結(jié)合

作者: adada_x_w_x_    時(shí)間: 2019-12-23 16:40
學(xué)習(xí)了,很有幫助
作者: weilexuexi12    時(shí)間: 2020-3-28 17:45
學(xué)習(xí)了,棒棒噠
作者: 3078    時(shí)間: 2020-7-23 11:24
講的清楚明白,謝謝,學(xué)到了
作者: 溫存723    時(shí)間: 2020-8-6 14:44
受益匪淺!!  感謝分享  51黑有你更精彩
作者: 溫存723    時(shí)間: 2020-8-6 14:46
這個(gè)屬于增量式還是位置式呢

作者: daiya    時(shí)間: 2022-3-16 12:11
樓主好人一生平安!
作者: daiya    時(shí)間: 2022-3-16 12:11
溫存723 發(fā)表于 2020-8-6 14:46
這個(gè)屬于增量式還是位置式呢

當(dāng)然是增量式
作者: ceil    時(shí)間: 2022-5-6 23:09
這個(gè)文章太透徹了謝謝
作者: second_chan    時(shí)間: 2022-5-9 11:11

終于了解pid
作者: katv0718    時(shí)間: 2022-8-24 14:11
學(xué)習(xí)了,謝謝!PID很實(shí)用。
作者: dyx811    時(shí)間: 2022-8-27 13:48
學(xué)習(xí)了,很精湛!
作者: lihui2558    時(shí)間: 2022-8-29 08:50
輸出到電機(jī)兩端的電壓應(yīng)變?yōu)閁0+0.2*(800-1000)。從而達(dá)到了調(diào)節(jié)速度的目的。顯然比例P越大時(shí),電機(jī)轉(zhuǎn)速回歸到輸入值的速度將更快,及調(diào)節(jié)靈敏度就越高。
作者: lihui2558    時(shí)間: 2022-8-29 08:52
輸出到電機(jī)兩端的電壓應(yīng)變?yōu)閁0+0.2*(800-1000)。從而達(dá)到了調(diào)節(jié)速度的目的。顯然比例P越大時(shí),電機(jī)轉(zhuǎn)速回歸到輸入值的速度將更快,及調(diào)節(jié)靈敏度就越高。
p越大的話,電機(jī)兩端電壓變化越大,電機(jī)轉(zhuǎn)速回歸到輸入值的速度將更快?不太懂
作者: Curiosity..    時(shí)間: 2022-10-9 13:44
學(xué)到了,可惜沒有早點(diǎn)刷到

作者: 紫色的云    時(shí)間: 2024-10-12 10:59

講的很清楚贊一個(gè),謝謝分享
作者: cy009    時(shí)間: 2024-10-13 12:14
PID的理論學(xué)了很多,希望有更多的實(shí)際應(yīng)用案例。
作者: j1ason    時(shí)間: 2025-3-4 13:51
很好,記錄一下
作者: 木子走走    時(shí)間: 2025-4-7 08:32
我看不懂都覺得很牛逼




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 午夜三级视频 | 久久久人成影片一区二区三区 | 日韩在线免费 | 久久99精品久久久久蜜桃tv | 欧美激情一区二区 | 国产精品国产自产拍高清 | 日韩av免费在线电影 | 久久精品亚洲精品国产欧美kt∨ | 成人亚洲网| 欧美一区中文字幕 | 欧美男人天堂 | 91国内外精品自在线播放 | 午夜激情免费 | 日韩精品一区二区三区 | 欧美成人精品激情在线观看 | 亚洲aⅴ| 午夜久久久久久久久久一区二区 | 国产精品福利在线 | 欧美一级片在线播放 | 欧美日韩高清 | 91高清在线观看 | 欧美精品久久久久 | 成人小视频在线观看 | 四虎免费视频 | 成人午夜在线 | 天天天天天天操 | 91网站视频在线观看 | 亚洲一二三区不卡 | 精品亚洲一区二区 | 国产黄色在线观看 | 欧区一欧区二欧区三免费 | 天天看天天操 | 久久一区二区三区电影 | 久久国色| 99re视频在线 | 亚洲在线看 | 一区二区三区在线免费观看 | 久久精品男人的天堂 | 99影视| 中文字幕1区 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 |