91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PID參數整定實際調參

麥辣雞腿堡 ? 來源:古月居 ? 作者:行走的皮卡丘 ? 2023-11-14 17:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

實際調參

從實際的 PID 系統曲線來理解 PID 各個系數的調節效果。

① 先調整比例系數,積分、微分系數設置為 0,此時的系統只有比例環節參與控制,此時系統的曲線出現大幅振蕩。

圖片

圖片

首先確定硬件上是否出現了故障,例如電壓不穩定、電機堵轉等,排除了這些之后,那就說明比例系數調節的過大了,這個時候我們可以把比例系數慢慢地減小,并同時觀察曲線的變化。

② 當我們調小比例系數之后,曲線的大幅度振蕩現象消失,但是曲線依舊存在小幅度的超調現象,并且此時通過調節比例系數已經無法優化曲線。

圖片

此時,我們可以慢慢地增大微分系數,并同時觀察曲線的變化,從而找到最合適的參數。

增大微分系數之后,如果系統的曲線已經較為理想,則說明這個系統只需要比例和微分環節的控制。

③ 如果在純比例環節的控制下,系統的實際值始終達不到目標值,存在靜態誤差。

圖片

圖片

此時,可以逐漸增大積分系數,并同時觀察曲線的變化,如果消除靜差的時間過長,則可以再適當增大積分系數,但是需要注意兼顧系統的超調量。

經過調整之后,如果系統的曲線已經較為理想,則說明這個系統只需要比例和積分環節的控制。

④ 如果系統在比例和積分環節的控制下出現小幅度的超調現象,可以慢慢地增大微分系數,并同時觀察曲線的變化,從而找到最合適的參數。

以上就是在實際調參中經常遇到的一些問題以及解決方法。在實際應用中,控制系統是多樣且復雜的,這一些方法只能作為參考,并不是通用的,因此在 PID 調參過程中,要注意經驗的積累。

參考Code

PID初始化代碼

定義一個新的PID參數時,就是建立一個新的結構體,運算和初始化時直接調用對應的成員變量就行,十分方便簡潔,具體定義的結構體如下:

typedef struct{
    //PID運算模式
    uint8_t mode;
    //PID 三個基本參數
    __IO float Kp;
    __IO float Ki;
    __IO float Kd;


    __IO float max_out;  //PID最大輸出
    __IO float max_iout; //PID最大積分輸出


    __IO float2 set;      //PID目標值
    __IO float2 fdb;      //PID當前值


    __IO float out;        //三項疊加輸出
    __IO float Pout;        //比例項輸出
    __IO float Iout;        //積分項輸出
    __IO float Dout;        //微分項輸出
    //微分項最近三個值 0最新 1上一次 2上上次
    __IO float Dbuf[3];  
    //誤差項最近三個值 0最新 1上一次 2上上次
    __IO float error[3];  


} pid_type_def;

初始運行時調用一次,初始化各個參數

void Own_PID_init(pid_type_def *pid, uint8_t mode, const __IO float PID[3], __IO float max_out, __IO float max_iout){
    if (pid == NULL || PID == NULL){
        return;
    }
    pid- >mode = mode;
    pid- >Kp = PID[0];
    pid- >Ki = PID[1];
    pid- >Kd = PID[2];
    pid- >max_out = max_out;
    pid- >max_iout = max_iout;
    pid- >Dbuf[0] = pid- >Dbuf[1] = pid- >Dbuf[2] = 0.0f;
    pid- >error[0] = pid- >error[1] = pid- >error[2] = pid- >Pout = pid- >Iout = pid- >Dout = pid- >out = 0.0f;
}

圖片

PID運算代碼

__IO float PID_calc(pid_type_def *pid, __IO float ref, __IO float set)
{
    //判斷傳入的PID指針不為空
    if (pid == NULL){
        return 0.0f;
    }
    //存放過去兩次計算的誤差值
    pid- >error[2] = pid- >error[1];
    pid- >error[1] = pid- >error[0];
    //設定目標值和當前值到結構體成員
    pid- >set = set;
    pid- >fdb = ref;
    //計算最新的誤差值
    pid- >error[0] = set - ref;
    //判斷PID設置的模式
    if (pid- >mode == PID_POSITION)
    {
        //位置式PID
        //比例項計算輸出
        pid- >Pout = pid- >Kp * pid- >error[0];
        //積分項計算輸出
        pid- >Iout += pid- >Ki * pid- >error[0];
        //存放過去兩次計算的微分誤差值
        pid- >Dbuf[2] = pid- >Dbuf[1];
        pid- >Dbuf[1] = pid- >Dbuf[0];
        //當前誤差的微分用本次誤差減去上一次誤差來計算
        pid- >Dbuf[0] = (pid- >error[0] - pid- >error[1]);
        //微分項輸出
        pid- >Dout = pid- >Kd * pid- >Dbuf[0];
        //對積分項進行限幅
        LimitMax(pid- >Iout, pid- >max_iout);
        //疊加三個輸出到總輸出
        pid- >out = pid- >Pout + pid- >Iout + pid- >Dout;
        //對總輸出進行限幅
        LimitMax(pid- >out, pid- >max_out);
    }
    else if (pid- >mode == PID_DELTA)
    {
        //增量式PID
        //以本次誤差與上次誤差的差值作為比例項的輸入帶入計算
        pid- >Pout = pid- >Kp * (pid- >error[0] - pid- >error[1]);
        //以本次誤差作為積分項帶入計算
        pid- >Iout = pid- >Ki * pid- >error[0];
        //迭代微分項的數組
        pid- >Dbuf[2] = pid- >Dbuf[1];
        pid- >Dbuf[1] = pid- >Dbuf[0];
        //以本次誤差與上次誤差的差值減去上次誤差與上上次誤差的差值作為微分項的輸入帶入計算
        pid- >Dbuf[0] = (pid- >error[0] - 2.0f * pid- >error[1] + pid- >error[2]);
        pid- >Dout = pid- >Kd * pid- >Dbuf[0];
        //疊加三個項的輸出作為總輸出
        pid- >out += pid- >Pout + pid- >Iout + pid- >Dout;
        //對總輸出做一個先限幅
        LimitMax(pid- >out, pid- >max_out);
    }
    return pid- >out;
}
#define LimitMax(input, max)   
{                          
    if (input > max)       
    {                      
        input = max;       
    }                      
    else if (input < -max) 
    {                      
        input = -max;      
    }                      
}

PID數據清空代碼

有時候需要清除中間變量,例如目標值和中間變量清零。

void PID_clear(pid_type_def *pid)
{
    if (pid == NULL)
    {
        return;
    }
    //當前誤差清零
    pid- >error[0] = pid- >error[1] = pid- >error[2] = 0.0f;
    //微分項清零
    pid- >Dbuf[0] = pid- >Dbuf[1] = pid- >Dbuf[2] = 0.0f;
    //輸出清零
    pid- >out = pid- >Pout = pid- >Iout = pid- >Dout = 0.0f;
    //目標值和當前值清零
    pid- >fdb = pid- >set = 0.0f;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制系統
    +關注

    關注

    41

    文章

    6781

    瀏覽量

    112196
  • 硬件
    +關注

    關注

    11

    文章

    3484

    瀏覽量

    67524
  • PID
    PID
    +關注

    關注

    37

    文章

    1482

    瀏覽量

    88101
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    關于溫度控制的PID參數問題

    這種情況是怎么回事;求教下相關PID參數方法,涉及到溫度控制方面的。另外通過Autotunning PID
    發表于 05-05 16:20

    干貨|最經典的PID參數教程

    調節器YR-GFD和人工智能調節器YR-GND具有先進的PID控制算法和自功能,使用者啟動儀表自功能后,不需要人工干預就可以自動算出
    發表于 12-26 21:40

    PID參數的方法

    時Dout會有非常尖的尖峰,這時就要對delError進行限幅。在PID調節中,不允許出現很大的尖峰。  調好D后,NowVal會很好的跟隨TargetVal的變化而變化。  三、看圖參數
    發表于 06-23 14:54

    STM32電機的PID參數

    如何去實現STM32電機的PID參數?如何去編寫STM32電機的PID參數
    發表于 09-23 08:07

    PID調的相關資料分享

    說明:本文章適用于STM32初學者,想完成一個好玩且有深度的項目但不知道從何下手的同學。PID調是平衡車的精髓所在,參數
    發表于 01-14 09:14

    PID參數方法的研究

    PID參數方法的研究-2009,下來看看。
    發表于 03-31 17:01 ?20次下載

    基于MATLAB_SimuIink的PID參數

    基于MATLABSimuIink的PID參數-2009
    發表于 03-31 17:46 ?13次下載

    PID參數方法及其應用研究

    PID教程之PID參數方法及其應用研究
    發表于 09-01 15:01 ?0次下載

    PID控制最通俗的解釋與PID參數方法

    PID控制最通俗的解釋與PID參數方法
    發表于 01-04 14:47 ?43次下載

    增量式pid分析及參數

    PID算法是工程控制領域常用的一種算法,其有著技術成熟,不需要建立數學模型,參數靈活,適用性強,魯棒性強,控制效果好等優點,得到了廣泛的應用,其
    發表于 11-24 16:27 ?1.7w次閱讀
    增量式<b class='flag-5'>pid</b>分析及<b class='flag-5'>參數</b><b class='flag-5'>整</b><b class='flag-5'>定</b>

    基于MATLAB的PID\PID參數方法概述

    PID控制是最早發展起來的控制策略之一,因為它所涉及的設計算法和控制結構都很簡單,因此,被廣泛應用于過程控制和運動控制中。但在實際系統設計過程中,設計師經常受到參數
    發表于 11-24 16:42 ?3.9w次閱讀
    基于MATLAB的<b class='flag-5'>PID</b>\<b class='flag-5'>PID</b><b class='flag-5'>參數</b>自<b class='flag-5'>整</b><b class='flag-5'>定</b>方法概述

    PID控制參數的原理和的的計算方法PID參數的方法和概述

    PID是比例、積分、微分的簡稱,PID控制的難點不是編程,而是控制器的參數參數
    發表于 05-31 08:40 ?45次下載
    <b class='flag-5'>PID</b>控制<b class='flag-5'>參數</b>的原理和<b class='flag-5'>整</b><b class='flag-5'>定</b>的的計算方法<b class='flag-5'>整</b><b class='flag-5'>定</b><b class='flag-5'>PID</b><b class='flag-5'>參數</b>的方法和概述

    數字PID及其參數方法

    數字PID及其參數方法介紹。
    發表于 05-31 16:34 ?27次下載

    PID參數簡介

    PID參數資料免費下載。
    發表于 06-01 10:36 ?33次下載

    PID參數試湊法介紹

    。 工程定法:依靠工程經驗,直接在控制系統的試驗中進行,此方法易于掌握,在實際調中被廣泛
    的頭像 發表于 11-14 17:21 ?2876次閱讀
    <b class='flag-5'>PID</b><b class='flag-5'>參數</b><b class='flag-5'>整</b><b class='flag-5'>定</b>試湊法介紹
    主站蜘蛛池模板: 中国一级特黄特色真人毛片 | 国产综合视频在线观看 | 51精品视频免费国产专区 | 久久新视频 | 韩国精品videosex性韩国 | cijilu刺激 国产 | 5g影院天天| 亚洲成人资源 | 国产午夜爽爽窝窝在线观看 | 亚洲综合精品一区二区三区中文 | 精品少妇一区二区三区视频 | 成人性生活免费视频 | 四虎成人欧美精品在永久在线 | 欧美黑人三级 | 欧美午夜色大片在线观看免费 | 久久福利免费视频 | 最新色站 | 极品美女写真菠萝蜜视频 | 色偷偷资源 | 在线麻豆国产传媒60在线观看 | 精品三级内地国产在线观看 | 午夜dy888理论在线播放 | 日韩a毛片 | 亚洲bbb| a成人毛片免费观看 | 黄视频在线观看免费 | 四虎精品成在线播放 | 永久免费影视在线观看 | 午夜嘿嘿嘿| 美女视频黄的免费视频网页 | 免费我看视频在线观看 | 国产免费小视频 | 让她爽的喷水叫爽乱 | 美女视频很黄很暴黄是免费的 | 亚洲天堂电影在线观看 | 国产伦一区二区三区免费 | 色综合社区 | 韩国免费人成在线观看网站 | 久青草视频免费视频播放线路1 | 久久精品国产精品亚洲毛片 | 婷婷99视频精品全部在线观看 |