偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用Excel教會你PID算法

開發(fā) 前端 算法
PID算法基本原理 PID算法是控制行業(yè)最經(jīng)典、最簡單、而又最能體現(xiàn)反饋控制思想的算法。對于一般的研發(fā)人員來說,設(shè)計和實現(xiàn)PID算法是完成自動控制系統(tǒng)的基本要求。

1、引入PID

電機控制

這樣是沒有反饋的,也就是說我們完全相信輸入的數(shù)字,且是理想化的模型,比如輸入占空比為50%的25Kz的PWM,車輪速度為1m/s,實際產(chǎn)品中會受到各種這樣的影響,比如地面阻力,風阻等等,同樣輸入占空比為50%的25Kz的PWM,車輪的速度并不是1m/s。

這時候我們就引入測量單元,也就是反饋系統(tǒng)。

這個時候,最常見的反饋就是:直接使用反饋值。簡單的例子,屬于數(shù)值X和輸出數(shù)值y的數(shù)學公式是:y=2x,這是這最見的關(guān)系。假設(shè)我們輸入7,測量結(jié)果是5,那么我們就直接將輸入修改為7+2*(7-5)=11。也就是我們一次直接調(diào)整到位。這樣調(diào)節(jié)過于簡單粗暴,因為我們直接將輸入修改為11,有可能輸出直接變成6,超過預(yù)期值了。這時候就自然而然的想到多次調(diào)節(jié),每次只增加一點,然后測量速度,看一下是否達標。

這就是比例調(diào)節(jié)Kp。

2、比例調(diào)節(jié)

舉例說明,當前小車速度為0.2,目標速度是1。輸出y和輸入x的關(guān)系是y=1*x。比例系數(shù)Kp=0.5。隨著時間的增大,輸出和輸入關(guān)系如下。

直觀折線圖顯示如下:

我們發(fā)現(xiàn)這太完美了,那么比例環(huán)節(jié)就能夠完美的解決問題了,可是等等,在下這個結(jié)論前,我們忽略一個特因素:噪聲誤差。

在很多系統(tǒng)中都是有噪聲的,這我們舉例小車中,噪聲誤差可能來自于電機的誤差,外部因素風阻等誤差,且是波動的。我們將問題簡化,假設(shè)外部因素恒定,外部因素是的小車實際輸出速度減去1。

還是上面的例子,當前小車速度為0.2,目標速度是1。輸出y和輸入x的關(guān)系是y=1*x。比例系數(shù)Kp=0.5,恒定的誤差為-0.1,隨著時間的增大,輸出和輸入關(guān)系如下。

直觀折線圖顯示如下:

最終輸出穩(wěn)定在0.8,因為我們初始值為0.2,到最后和目標差值是0.2,補償是0.1,誤差正好是-0.1,也就是說等于我們沒有補償。

如果我們需要速度達到1呢???辦法就是增大比例系數(shù)Kp。

誤差為0.8時

誤差為1.9時

誤差為2時,已經(jīng)完全震蕩

結(jié)論:比例控制引入了穩(wěn)態(tài)誤差,且無法消除。比例常數(shù)增大可以減小穩(wěn)態(tài)誤差,但如果太大則引起系統(tǒng)震蕩,不穩(wěn)定。

3、積分調(diào)節(jié)

為了消除穩(wěn)態(tài)誤差,第二次加入積分,使用PI(比例積分控制),積分控制就是將歷史誤差全部加起來乘以積分常數(shù)。公式如下:

u(t) -------------輸出曲線,pid輸出值隨時間的變化曲線

Kp --------------比例系數(shù)

e(t)--------------偏差曲線,設(shè)定值與實際值的偏差隨時間的變化曲線

t-----------------時間

關(guān)于定積分,如果你上過高數(shù),且沒有睡覺的話。

需要將數(shù)學公式離散化,才能用到計算機系統(tǒng)來。

①表示在時間點t,輸出的值

②表示在時間點t,輸出的誤差

③表示從時間0到t,累計誤差。

添加Ki參數(shù)之后的折線圖如下

結(jié)論:

只要存在偏差,積分就不停的累計,直到誤差為0,積分項不再累加,變成一個常數(shù),可以抵消穩(wěn)態(tài)誤差.

4、微分調(diào)節(jié)

引入積分可以消除穩(wěn)態(tài)誤差,但會增加超調(diào),且Ki增大,超調(diào)量也增大.

為了消除超調(diào),我們引入微分作用

積分就是e(t)曲線的斜率。

將公式離散化為

ek是當前誤差,ek-1是上一次誤差,所以①就是誤差曲線的斜率。

關(guān)于PID公式還有其他寫法,本質(zhì)是一樣的

離散化后是

u(t) -------------輸出曲線,pid輸出值隨時間的變化曲線

Kp --------------比例系數(shù)

e(t)------------- 偏差曲線,設(shè)定值與實際值的偏差隨時間的變化曲線

Ti--------------- 積分時間

Td--------------微分時間

T----------------調(diào)節(jié)周期

那么PID的參數(shù)如下

將前面的示例,加入微分項,Ki=0.3。

折線圖如下

結(jié)論:微分能夠減弱超調(diào)趨勢。

5、總結(jié)

PID調(diào)節(jié)示意圖如下:

可以發(fā)現(xiàn):

比例項是糾正偏差的主力,越遠離偏差絕對值就越大,快速把偏差糾正回來。

積分項和以往的狀態(tài)有關(guān),面積的絕對值越大它的絕對值就越大,它的作用是消除累計偏差。

微分項跟斜率有關(guān),比較難解釋,總的來說它的作用是:當目標靠近設(shè)定值時加速它靠近,當目標遠離設(shè)定值時阻止它遠離。因此微分可以增加系統(tǒng)穩(wěn)定性,因為到達目的之后,離開會受到阻礙。

6、增量PID

上面我們講解的是位置PID,還有一種增量PID,輸出的不是目標值,而是與上次值的差值。直觀上將就是u(t)-u(t-1)。

那么u(t)-u(t-1)的公式是

位置型PID控制器的基本特點:

  1. 位置型PID控制的輸出與整個過去的狀態(tài)有關(guān),用到了偏差的累加值,容易產(chǎn)生累積偏差。
  2. 位置型PID適用于執(zhí)行機構(gòu)不帶積分部件的對象。
  3. 位置型的輸出直接對應(yīng)對象的輸出,對系統(tǒng)的影響比較大。

增量型PID控制器的基本特點:

  • 增量型PID算法不需要做累加,控制量增量的確定僅與最近幾次偏差值有關(guān),計算偏差的影響較小。
  • 增量型PID算法得出的是控制量的增量,對系統(tǒng)的影響相對較小。
  • 采用增量型PID算法易于實現(xiàn)手動到自動的無擾動切換。

7、代碼編程

位置PID

  1. /******************************************************************* 
  2. 位置式pid     
  3. ********************************************************************/ 
  4. double PID(double Actual,double SET
  5. {      
  6.   static double E_sum,Error_last;          //上一次誤差   
  7.  
  8.   double  kp=20.767,ki=1.867,kd=115.55; 
  9.  
  10.   double pid_out; 
  11.   double Error_now;          //當前誤差   
  12.    Error_now = SET-Actual;               //當前誤差     
  13. //  if(Error_now>-0.9&&Error_now<0.9)    //防靜態(tài)誤差   
  14. //  { 
  15. //       Error_now=0; 
  16. //         Error_last=0; 
  17. //  }   
  18.     E_sum +=  Error_now;                       //誤差累計      
  19. //  if(E_sum>484)E_sum=484;          //積分限幅度,防止積分飽和 
  20. //  if(E_sum<-484)E_sum=-484;   
  21.  
  22.   pid_out= kp * Error_now + ki * E_sum + kd * (Error_now-Error_last);            //pid計算公式       
  23.   Error_last=Error_now; 
  24.  
  25. //  if(pid>900)  pid=900;             //輸出限幅 
  26. //  if(pid<-900)pid=-900;     
  27.      return -pid_out;           

增量PID

  1. error = target_speed - current_speed; 
  2. P_error = error; 
  3. I_error = error - left_motor.L_error; 
  4. D_error = error - 2*left_motor.L_error + left_motor.LL_error; 
  5.  
  6. add = (s16)(KP * P_error + KI * I_error + KD * D_error); 
  7. left_motor.ESC_output_PWM += add
  8.  
  9. left_motor.LL_error = left_motor.L_error; 
  10. left_motor.L_error = error; 

 本文轉(zhuǎn)載自微信公眾號「知曉編程」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系知曉編程公眾號。

 

責任編輯:姜華 來源: 知曉編程
相關(guān)推薦

2009-11-26 14:06:43

Suse安裝Oracl

2009-12-10 17:00:15

XMMS享受APE

2022-04-07 09:18:18

JettyServlet服務(wù)器

2009-12-15 17:10:39

優(yōu)化Linux

2009-12-17 13:40:42

Linux網(wǎng)卡安裝

2009-12-10 10:40:21

Linux ldd

2009-12-15 14:29:04

2018-05-21 08:44:48

領(lǐng)域服務(wù)領(lǐng)域行為編碼

2010-01-07 15:00:39

Redhat Ente

2009-12-14 17:13:04

Linux系統(tǒng)修改共享

2009-12-14 16:31:00

Linux安裝支付寶

2009-12-11 10:55:16

Linux啟動腳本

2009-12-25 17:35:39

Linux安裝real

2009-12-09 14:56:54

Linux查看目錄文件

2009-12-10 10:18:44

Apache安裝

2009-12-03 17:50:04

Linux Samba

2009-12-14 18:04:38

Linux命令創(chuàng)建快照

2009-12-16 11:11:10

硬盤讀寫速度

2009-12-21 14:44:06

2010-01-06 16:32:45

Linux操作系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號