国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PID的增量式與位置式

這篇具有很好參考價(jià)值的文章主要介紹了PID的增量式與位置式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

在剛接觸到PID控制器的時(shí)候,我對(duì)增量式,位置式這些其實(shí)也是很懵的,然后又有什么速度環(huán)啊,位置環(huán)啊,電流環(huán)啊…巴拉巴拉一堆的,但是現(xiàn)在理解起來其實(shí)也就利用一些簡(jiǎn)簡(jiǎn)單單的離散數(shù)據(jù)運(yùn)算出期望罷了。

首先假設(shè)我們已經(jīng)知道了什么是Kp、Ki、Kd了(不知道的話那就看看我上一篇講PID的那個(gè)文章)。

關(guān)于PID的算法可以分為兩大類,一類是位置式,還有一類是增量式,下面就開始說說我對(duì)這兩種算法的理解。

位置式PID

首先是位置式,也是我用得最多的一種算法。位置式PID其實(shí)就是當(dāng)前系統(tǒng)實(shí)際位置,與你期望想要達(dá)到的位置的偏差而進(jìn)行的PID控制。那么一個(gè)用位置式的系統(tǒng)中是什么樣的呢?

看公式來理解:

U k = K p ? e k + K i ∑ j = 0 k e k + K d ( e k ? e k ? 1 ) U_k= K_p*e_k+K_i\sum^k_{j=0}e_k+K_d(e_k-e_{k-1}) Uk?=Kp??ek?+Ki?j=0k?ek?+Kd?(ek??ek?1?)

由上式可以看出,PID的每次運(yùn)算的輸出都與過去的狀態(tài)有關(guān),并且積分項(xiàng)的誤差會(huì)進(jìn)行累加。如果偏差一直都是正的或者是負(fù)的,位置式PID在積分項(xiàng)就會(huì)一直累積,當(dāng)偏差開始反向變化的時(shí)候,位置式PID需要一段時(shí)間才能從最大值減下來,會(huì)造成位置PID控制輸出的滯后。所以我們還需要對(duì)積分項(xiàng)進(jìn)行限幅(做一個(gè)最大值max和最小值min),同時(shí)也要對(duì)輸出進(jìn)行限幅。同時(shí),我們輸出的 U k U_k Uk?對(duì)應(yīng)的是執(zhí)行機(jī)構(gòu)的實(shí)際位置,一旦控制輸出出錯(cuò)了,也就是說我們控制的對(duì)象當(dāng)前的狀態(tài)值出現(xiàn)了問題, U k U_k Uk?的大幅度變化就會(huì)影響到系統(tǒng)的大幅度變化。

所以我們?nèi)绻麊螁问褂梦恢檬絇ID的時(shí)候,一般都是直接使用PD控制的,也正因?yàn)檫@樣,位置式PID是用于執(zhí)行機(jī)構(gòu)不帶積分部件的對(duì)象,像平衡車的直立控制呀、溫控系統(tǒng)呀…等等。

下面是代碼實(shí)現(xiàn):

#define HAVE_PID_INTEGRAL

#define LIMIT(TargetValue, LimitValue) \
if (TargetValue > LimitValue)\
{\
  TargetValue = LimitValue;\
}\
else if (TargetValue < -LimitValue)\
{\
  TargetValue = -LimitValue;\
}\

typedef struct{
  float Kp;
  float Ki;
  float Kd;
#ifdef HAVE_PID_INTEGRAL
  int index;            // 積分分離系數(shù)
  float Integral;       // 積分項(xiàng)
  float I_outputMax;    // 積分限幅
#endif
  float Last_Err;       // 上次誤差
  float Output;         // PID輸出
  float OutputMax;      // 位置式PID輸出限幅
}Position_PID;

void PositionPID_Calculate(Position_PID *pid,const float Target,const float Measure)
{

  if(pid == NULL)
    return;
    
  float Err;
  
  Err = Target - Measure;
  
  pid->Output = pid->Kp * Err + pid->Kd * (Err - pid->Last_Err)
  
#ifdef HAVE_PID_INTEGRAL
    /* 積分分離 */
  if(abs(pid->Err) > Integraldead_zone)
  {
    pid->index=0;
  }else
  {
    pid->index = 1;
  }
  pid->Integral += pid->Ki * Err * pid->index;
  
  LIMIT(pid->Integral,I_outputMax);
  
  pid->Output += pid->Integral;
#endif
  
  LIMIT(Output,OutputMax);
  
  pid->Last_Err = Err;
  
}

優(yōu)點(diǎn):

位置式是一種非遞推式算法,可以直接控制對(duì)象,U(k)的值與對(duì)象的實(shí)際當(dāng)量是一一對(duì)應(yīng)的,所以在不帶積分部件的控制對(duì)象中可以很好應(yīng)用。

缺點(diǎn):文章來源地址http://www.zghlxwxcb.cn/news/detail-849926.html

每次輸出都與之前的狀態(tài)有關(guān),并且還要對(duì)誤差值err進(jìn)行累加,計(jì)算量大。

增量式PID

那么什么是增量式PID呢?增量式PID的輸出只是控制量的增量 Δ U k \Delta U_k ΔUk?。當(dāng)執(zhí)行機(jī)構(gòu)需要的控制量是增量,那么我們就可以采用增量式PID控制算法進(jìn)行控制。(增量式PID的計(jì)算輸出結(jié)果是增量,并不是直接作用到執(zhí)行機(jī)構(gòu))

(增量式PID可以由位置式推導(dǎo)出,感興趣的可以百度,這里就不浪費(fèi)篇幅了。)

看公式來理解:

Δ U k = K p ( e ( k ) ? e ( k ? 1 ) ) + K i e ( k ) + K D [ e ( k ) ? 2 e ( k ? 1 ) + e ( k ? 2 ) ] \Delta U_k=K_p(e(k)-e(k-1))+K_i{e(k)}+K_D[e(k)-2e(k-1)+e(k-2)] ΔUk?=Kp?(e(k)?e(k?1))+Ki?e(k)+KD?[e(k)?2e(k?1)+e(k?2)]

對(duì)于增量式PID來說,給定一個(gè)輸入量,系統(tǒng)反饋回來的量與設(shè)定的量的偏差為Err,系統(tǒng)中保存上一次的偏差Last_Err和上上次的偏差Previous_Err,這三個(gè)輸入量經(jīng)過增量式PID可以計(jì)算得到上述說的控制量增量 Δ U k \Delta U_k ΔUk?。而得出的控制量 Δ U ( k ) \Delta U(k) ΔU(k)對(duì)應(yīng)的是近幾次位置誤差的增量,而不是對(duì)應(yīng)與實(shí)際位置的偏差,也就是說沒有誤差累加。即在上一次的控制量的基礎(chǔ)上需要增加控制量。

以下是代碼實(shí)現(xiàn):

#define LIMIT(TargetValue, LimitValue) \
if (TargetValue > LimitValue)\
{\
  TargetValue = LimitValue;\
}\
else if (TargetValue < -LimitValue)\
{\
  TargetValue = -LimitValue;\
}\

#define Integraldead_zone 100 // 積分死區(qū) 根據(jù)自己的需求定義
typedef struct{
  float Kp;
  float Ki;
  float Kd;
  float p_out;
  float i_out;
  float d_out;
  float Err;
  float Last_Err;       // 上次誤差
  float Previous_Err;   // 上上次誤差
  float Output;
  float OutputMax;      // 增量式式PID輸出限幅
}Incremental_PID;

void IncrementalPID_Calculate(Incremental_PID *pid,const float Target,const float Measure)
{ 
  if(pid == NULL)
    return;
    
  pid->Err = Target - Measure;
  
  pid->p_out = pid->Kp * (Err - Last_Err);
  pid->i_out = pid->Ki * Err;
  pid->d_out = pid->Kd * (Err - 2.0f*Last_Err + Previous_Err);
  
  pid->Output += p_out + i_out + d_out; 
  
  LIMIT(pid->Output, pid->OutputMax); // 限幅
  
  pid->Previous_Err = pid->Last_Err;
  pid->Last_Err = Err;
  
}

優(yōu)點(diǎn):

  1. 系統(tǒng)在誤動(dòng)作時(shí)影響小,并且可以利用邏輯判斷來對(duì)錯(cuò)誤數(shù)據(jù)進(jìn)行去除。
  2. 沖激小,便于實(shí)現(xiàn)無擾動(dòng)切換。
  3. 不需要累加誤差值,并且控制增量的確定只與最近幾次采樣值有關(guān)。

缺點(diǎn):

  1. 積分的階段效應(yīng)大,有穩(wěn)態(tài)誤差。
  2. 溢出的影響大,有的被控對(duì)象用增量式不好。

總結(jié)(增量式與位置式的區(qū)別)

  1. 增量式算法不需要做累加,增量式PID求出來的是系統(tǒng)需要的增量,并且增量的確定僅與最近幾次偏差采樣值有關(guān),計(jì)算的誤差對(duì)控制量計(jì)算的影響比較小。與位置式相比的話,位置式就需要用到偏差的累加值(Ki*err),容易產(chǎn)生累計(jì)誤差。
  2. 增量式PID控制輸出的是控制量增量,沒有積分作用,所以該方法適用于帶積分部件的對(duì)象。而位置式PID適用于執(zhí)行機(jī)構(gòu)不帶積分部件的對(duì)象。
  3. 上面的代碼也很清楚的顯示了,位置式PID需要積分限幅和輸出限幅,而增量式PID只需要輸出限幅。

到了這里,關(guān)于PID的增量式與位置式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 我的PID學(xué)習(xí)歷程---PID位置式和增量式

    我的PID學(xué)習(xí)歷程---PID位置式和增量式

    前一篇文章實(shí)現(xiàn)了使用TB6612驅(qū)動(dòng)電機(jī)及編碼器測(cè)速,但是在實(shí)際測(cè)速的過程中,如果我們 人為給電機(jī)一個(gè)阻力,電機(jī)的速度將會(huì)下降,編碼器接口獲取到的脈沖數(shù)也會(huì)減少 。 但是如果要使電機(jī) 保持一個(gè)恒定的速度 ,即使遇到阻力它的速度也不會(huì)下降。這個(gè)時(shí)候就需要引入

    2023年04月09日
    瀏覽(21)
  • PID控制器(位置式和增量式)

    PID控制:一種調(diào)節(jié)器控制規(guī)律為比例、積分、微分的控制。其中:P:比例(proportion)I:積分(integral)D:微分(derivative) 式子中Kp為比例系數(shù),Ti為積分時(shí)間參數(shù),Td為微分時(shí)間常數(shù)。 各參數(shù)的意義: Kp:比例系數(shù)。一般增大比例系數(shù),將加快系數(shù)的響應(yīng)。 Ti:積分時(shí)間常

    2024年02月16日
    瀏覽(23)
  • 用純C語(yǔ)言分別實(shí)現(xiàn)增量式與位置式的PID自整定算法

    1、對(duì)于增量式PID自整定算法,C語(yǔ)言代碼如下: 2、位置式PID控制是一種常用的控制方法,可以實(shí)現(xiàn)給定值與實(shí)際值之間的閉環(huán)控制。下面是使用C語(yǔ)言編寫的一個(gè)位置式PID自整定算法的代碼,包含詳細(xì)的注釋: 這個(gè)代碼實(shí)現(xiàn)了一個(gè)位置式PID自整定算法,它包括了兩個(gè)函數(shù) pr

    2024年02月15日
    瀏覽(16)
  • 【PID】基于Matlab實(shí)現(xiàn)增量式PID算法

    【PID】基于Matlab實(shí)現(xiàn)增量式PID算法

    ?作者簡(jiǎn)介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進(jìn),matlab項(xiàng)目合作可私信。 ??個(gè)人主頁(yè):Matlab科研工作室 ??個(gè)人信條:格物致知。 增量式PID控制較常規(guī)PID更具優(yōu)勢(shì),但有關(guān)其參數(shù)整定的方法很少,針對(duì)這種問題,介紹了增量式PID算法的原理及特點(diǎn),基于MATLAB平臺(tái)

    2024年02月14日
    瀏覽(21)
  • 博途PLC增量式PID和脈沖軸組合控制閥門開度(算法介紹)

    這篇博客我們以S7-1200PLC平臺(tái)來舉例,介紹我們的PID閉環(huán)控制器如何控制脈沖軸實(shí)現(xiàn)閥門角度控制。SMART PLC PID控制器控制伺服驅(qū)動(dòng)器實(shí)現(xiàn)關(guān)節(jié)角度控制詳細(xì)內(nèi)容請(qǐng)參考下面文章: https://rxxw-control.blog.csdn.net/article/details/129658364 https://rxxw-control.blog.csdn.net/article/details/129658364 增量

    2024年01月21日
    瀏覽(63)
  • STM32之增量式編碼器電機(jī)測(cè)速

    STM32之增量式編碼器電機(jī)測(cè)速

    編碼器,是一種用來測(cè)量機(jī)械旋轉(zhuǎn)或位移的傳感器。它能夠測(cè)量機(jī)械部件在旋轉(zhuǎn)或直線運(yùn)動(dòng)時(shí)的位移位置或速度等信息,并將其轉(zhuǎn)換成一系列電信號(hào)。 . 按監(jiān)測(cè)原理分類 光電編碼器 光電編碼器,是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器

    2024年02月13日
    瀏覽(23)
  • STM32CubeMX 直流電機(jī)串級(jí)PID位置速度控制、HAL庫(kù)、cubemx、PID、串級(jí)PID、位置控制、速度控制、雙環(huán)控制

    STM32CubeMX 直流電機(jī)串級(jí)PID位置速度控制、HAL庫(kù)、cubemx、PID、串級(jí)PID、位置控制、速度控制、雙環(huán)控制

    提示:本文章的串級(jí)PID位置速度控制,是在前兩篇文章速度控制,位置控制的基礎(chǔ)上實(shí)現(xiàn)的,這一章節(jié)中不需要額外的cubemx的配置,只需要寫簡(jiǎn)單的代碼即可,復(fù)雜的地方在于串級(jí)pid的調(diào)試過程。 pid是我們?cè)趯W(xué)習(xí)單片機(jī)中首先要學(xué)會(huì)的控制算法,而串級(jí)pid又是在單pid的基礎(chǔ)上

    2024年02月14日
    瀏覽(31)
  • 霍爾增量式編碼器左右車輪線速度的計(jì)算

    對(duì)于霍爾式編碼器的左右輪線速度計(jì)算: 首先線速度=距離s / 時(shí)間 t 要獲得距離S ,也就是輪子在一段時(shí)間內(nèi)跑過的距離。要先知道一下兩個(gè)參數(shù): 1.輪子的半徑 r 2.輪子轉(zhuǎn)動(dòng)一圈的脈沖數(shù) cnt 輪子轉(zhuǎn)動(dòng)一圈的脈沖數(shù):如電機(jī)我們選用減速比為1:90的TT直流減速電機(jī),編碼器為

    2024年02月15日
    瀏覽(24)
  • 《LIO-SAM閱讀筆記》-為何要引入增量式里程計(jì)?

    前言: LIO-SAM在后端中同時(shí)維護(hù)著兩個(gè)里程計(jì),一個(gè)是增量式里程計(jì),一個(gè)是優(yōu)化后的里程計(jì),其中優(yōu)化后的里程計(jì)是經(jīng)過imu、回環(huán)、gps因子圖聯(lián)合優(yōu)化后的結(jié)果,是整個(gè)系統(tǒng)中最準(zhǔn)確的位姿估計(jì),那么為什么還需要維護(hù)增量式里程計(jì)呢? 以下是我的理解 ,不一定正確,如有

    2024年01月22日
    瀏覽(23)
  • 4 OpenCV實(shí)現(xiàn)多目三維重建(多張圖片增量式生成稀疏點(diǎn)云)【附源碼】

    4 OpenCV實(shí)現(xiàn)多目三維重建(多張圖片增量式生成稀疏點(diǎn)云)【附源碼】

    本文是基于 OpenCV4.80 進(jìn)行的,關(guān)于環(huán)境的配置可能之后會(huì)單獨(dú)說,先提一嘴 vcpkg 真好用 從多張圖片逐步生成稀疏點(diǎn)云,這個(gè)過程通常包括以下步驟: 初始重建: 初始兩張圖片的選擇 十分重要 ,這是整個(gè)流程的基礎(chǔ),后續(xù)的增圖都是在這兩張圖片的基礎(chǔ)上進(jìn)行的 對(duì)于輸入圖

    2024年02月06日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包