久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PID原理介紹及編程的實例化

 lixinhecom 2019-06-04

PID控制器(比例-積分-微分控制器),首先以一個通俗而又經(jīng)典的小故事來介紹它,。

/************************小故事分界線*****************************/ 

小明接到這樣一個任務(wù):
有一個水缸點漏水(而且漏水的速度還不一定固定不變),,
要求水面高度維持在某個位置,
一旦發(fā)現(xiàn)水面高度低于要求位置,,就要往水缸里加水,。

小明接到任務(wù)后就一直守在水缸旁邊,,
時間長就覺得無聊,就跑到房里看小說了,,
30分鐘來檢查一次水面高度,。水漏得太快,
每次小明來檢查時,,水都快漏完了,,離要求的高度相差很遠
,小明改為每3分鐘來檢查一次,,結(jié)果每次來水都沒怎么漏
,,不需要加水,來得太頻繁做的是無用功,。幾次試驗后,,
確定每10分鐘來檢查一次。這個檢查時間就稱為采樣周期,。

開始小明用瓢加水,,水龍頭離水缸有十幾米的距離,
經(jīng)常要跑好幾趟才加夠水,,于是小明又改為用桶加,,
一加就是一桶,跑的次數(shù)少了,,加水的速度也快了,,
但好幾次將缸給加溢出了,不小心弄濕了幾次鞋,,小明又動腦筋,,
我不用瓢也不用桶,老子用盆,,幾次下來,,發(fā)現(xiàn)剛剛好,不用跑太多次,,
也不會讓水溢出,。這個加水工具的大小就稱為比例系數(shù)。

小明又發(fā)現(xiàn)水雖然不會加過量溢出了,,有時會高過要求位置比較多
,,還是有打濕鞋的危險。他又想了個辦法,,在水缸上裝一個漏斗,,
每次加水不直接倒進水缸,而是倒進漏斗讓它慢慢加,。這樣溢出的問題解決了,,
但加水的速度又慢了,有時還趕不上漏水的速度,。
于是他試著變換不同大小口徑的漏斗來控制加水的速度
,,最后終于找到了滿意的漏斗。漏斗的時間就稱為積分時間 ,。

小明終于喘了一口,,但任務(wù)的要求突然嚴了,
水位控制的及時性要求大大提高,,一旦水位過低,,
必須立即將水加到要求位置,而且不能高出太多,,否則不給工錢,。
小明又為難了!于是他又開努腦筋,,終于讓它想到一個辦法,,常放一盆備用水在旁邊,
一發(fā)現(xiàn)水位低了,,不經(jīng)過漏斗就是一盆水下去,,這樣及時性是保證了,但水位有時會高多了,。
他又在要求水面位置上面一點將水鑿一孔,,再接一根管子到下面的備用桶里這樣多出的水會從上面的孔里漏出來。
這個水漏出的快慢就稱為微分時間,。
 

/************************小故事分界線*****************************/

好,,故事看完了,相信大家對PID算法有了初步認識,,接下來就深入一點進行講解:

PID控制器由比例單元(P)單元(I)單元(D),其輸入err(t)與輸出u(t)的關(guān)系為:

①比例P控制

理解:比例控制中控制器的輸出u與輸入誤差信號err成比例關(guān)系,。假如某一刻t你的預(yù)期值是E,而實際值為A,,那么誤差值就為errt=E-A,,這時候控制器輸出就為u(t)=Kp*err(t)

*:假設(shè)你有一個加減計算器,,由于某種原因你每次只能加或減u(t)并且比例系數(shù)Kp=0.4,,讓你從0開始去逼近100

*解:顯然,,這時候你的預(yù)期值E100,,而實際值為0,那么誤差值就為err(t1)=100-0,進行第一次加減運算(你按計算器加的值為u(t1)=0.4*100=40),,好了,,第一次計算器從0加到了40

第二次,,預(yù)期100,,實際40,誤差60,,進行加減運算(你按計算機加的值為u(t2)=0.4*60=24),,第二次計算器從40加到了64

第三次,,預(yù)期100,,實際64,誤差36,,進行加減運算(你按計算器加的值為u(t3)=0.4*36=14.4),,第三次計算器從64加到了78.4

第四次從78.4加到87.04,;

第五次87.04加到92.224

.

.

. 

剩下的就不打了,,貼圖吧(data0

由于比例系數(shù)較低,大家可以看到數(shù)據(jù)是慢慢地逼近100,,實際上加減運算到第23次時,,實際值A=99.999,顯然比例控制已經(jīng)到達一個比較可觀的精度了,。如果比例系數(shù)Kp設(shè)為1則可以一次運算到達100,。

②積分I控制

理解:在積分控制中控制器的輸出與輸入誤差信號的積分成正比關(guān)系。如果系統(tǒng)進入穩(wěn)態(tài)后存在穩(wěn)態(tài)誤差,,必須引入積分環(huán)節(jié)以消除誤差,。積分項為誤差對時間的積分,即便誤差很小,,隨著時間的增加積分項也會增大,,引導(dǎo)控制器增大輸出使穩(wěn)態(tài)誤差減小,直至穩(wěn)態(tài)誤差為0,。如下圖所示(圖中紅色為穩(wěn)態(tài)誤差,,積分控制下逐漸消除)

③微分D控制

理解:在微分控制中,控制器的輸出與輸入誤差信號的微分(即誤差的變化率)成正比關(guān)系,。誤差變化越快,,其微分絕對值越大。誤差增大時,,其微分為正,;誤差減小時,其微分為負;只有誤差為常數(shù)時,,微分才為0,。總體來講微分環(huán)節(jié)能預(yù)測變化的趨勢來提前抑制誤差直至微分為0,。如上圖所示(曲線的斜率為微分值,,當誤差為常數(shù)或者為0時,微分值即曲線的斜率為0

/*****************************總結(jié)********************************/

對于上述3種控制環(huán)節(jié):

比例(P+積分(I)控制器可以使系統(tǒng)在進入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差,;

比例(P+微分(D)控制器能改善系統(tǒng)在調(diào)節(jié)過程中的動態(tài)特性;

總的來說,,PID控制其實是對反饋的誤差進行控制的過程,,如果誤差為0,則比例環(huán)節(jié)不起作用,,只有誤差存在才進行比例調(diào)節(jié),;積分環(huán)節(jié)是用來消除穩(wěn)態(tài)誤差;微分環(huán)節(jié)根據(jù)誤差信號的變化趨勢進行超前調(diào)節(jié),。

/**************************************************************************/

PID基本原理講解到此結(jié)束,,接下來講講編程實現(xiàn)。

原始公式是連續(xù)狀態(tài)的,,為了方便在處理器上實現(xiàn),,通常對PID連續(xù)系統(tǒng)離散化。

假設(shè)采樣周期間隔為T,,則在KT時刻:

偏差err(K)=E(k)-A(k),;

積分環(huán)節(jié)用加和形式表示:err(k)+err(K-1)+…err(0);

微分環(huán)節(jié)用斜率形式表示:[err(k)-err(k-1)]/T

比例系數(shù):Kp,;

積分系數(shù):Ki=Kp*T/Ti;

微分系數(shù):Kd=Kp*Td/T;

從而得到PID離散表示形式:

上式也是位置式PID的表達形式,。

我們求出u(k-1),然后求出△u(k)=u(k)-u(k-1),就得到增量式PID的表達形式:

既然表達式都有了,,那現(xiàn)在就用C語言來實例化PID控制器:

  1. struct _pid
  2. {
  3. float ExpectedValue;//定義設(shè)定值
  4. float ActualValue;//定義實際值
  5. float err;//定義偏差值
  6. float err_last;//定義上一個偏差值
  7. float err_prev;//定義前一個的偏差值
  8. float Kp, Ki, Kd;//定義比例,、積分、微分系數(shù)
  9. }pid;
  10. void PID_Init()
  11. {
  12. pid.ExpectedValue = 0.0;
  13. pid.ActualValue = 0.0;
  14. pid.err = 0.0;
  15. pid.err_prev = 0.0;
  16. pid.err_last = 0.0;
  17. pid.Kp = 0.4;
  18. pid.Ki = 0.2;
  19. pid.Kd = 0.0;
  20. }
  21. float PID_Realize(float speed) {
  22. float index;
  23. pid.ExpectedValue = speed;
  24. pid.err = pid.ExpectedValue - pid.ActualValue;
  25. //增量式pid公式
  26. float incrementValue = pid.Kp*(pid.err - pid.err_last) + pid.Ki*pid.err + pid.Kd*(pid.err - 2 * pid.err_last + pid.err_prev);
  27. pid.ActualValue += incrementValue;
  28. pid.err_prev = pid.err_last;
  29. pid.err_last = pid.err;
  30. return pid.ActualValue;
  31. }

曲線1:設(shè)初始值為0,,期望值ExpectedValue為100,,比例系數(shù)Kp0.5,積分系數(shù)Ki0.2,微分系數(shù)kd0.1,,采樣周期為20ms,PID進行200次調(diào)節(jié),,得到如下曲線(data1):

設(shè)當實際值ActualValue達到199.999時認為穩(wěn)態(tài),通過查看數(shù)據(jù)得第84次運算時達到條件,,所用時間為84*20(ms)=1680ms=1.68(s)

曲線2:設(shè)初始值為0,,期望值ExpectedValue100,比例系數(shù)Kp0.5,積分系數(shù)Ki0.3,微分系數(shù)kd0.0,,采樣周期為20ms,PID進行200次調(diào)節(jié),,得到如下曲線:

設(shè)當ActualValue達到199.999時認為穩(wěn)態(tài),通過查看數(shù)據(jù)得第56次運算時達到條件,,所用時間為56*20(ms)=1120ms=1.12(s),,可見調(diào)參之后系統(tǒng)達到穩(wěn)態(tài)時間縮減33.3%,并且調(diào)節(jié)過程更為穩(wěn)定,。

*注:上面用反應(yīng)曲線法進行粗略地參數(shù)整定,,但PID控制器的參數(shù)整定往往需要實際工程操作進行調(diào)整修改才能得出最優(yōu)解,這就要求大家要多動手實操了,。

下一篇文章將淺談PID算法的改進(PS:本來想一次性寫完的,,奈何時間太久了,眼睛難受/(ㄒoㄒ)/溜了溜了~~),。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多