跳到主要內容

[PID Controller] 如何利用Ziegler and Nichols (ZN method)調整PID參數


PID 控制器在控制領域是極為常用的控制器設計方法,主要原因在於結構簡單、操作方便、控制性能佳等優點,迄今仍被廣泛地使用於自動化、機器人與工業控制等領域。

  • PID 控制器是由P(Proportional)比例控制、I(Integral)積分控制、D(Derivative)微分控制所組合而成,其控制架構如下圖所示,
  • Yset 和y為期望輸出值與實際系統輸出,系統的誤差經過比例項、積分項、微分項三部份的計算,可以給予相對應的輸出,使系統的誤差消除或在容許的誤差範圍內,同時系統輸出達到所期望表現。 

PID控制器方塊圖 由於PID 控制器的參數之間存在交互影響的現象,因此PID 控制器參數的設計與調整一直為PID控制器設計的議題。(Ziegler and Nichols,1942)兩位工程師發表了一套PID參數設計的調整方法,該設計方法為經由了許多次試驗與實驗而歸納出來的經驗公式。 Z–N參數調整法可以分為:
  • 閉迴路調整法(Closed-loop tuning method)
  • 開迴路調整法(Open-loop tuning method)

1.閉迴路調整法
       閉迴路調整法是在閉迴路系統中給予Yset步階訊號輸入,再調整比例控制器的比例增益(Gain),直到系統輸出訊號產生臨界振盪,如下圖所示之系統響應。
  • 將臨界振盪之週期 Tu及臨界增益Ku代入下表的Z–N 閉迴路調整法公式,可得到控制器的增益K、積分Ti 時間和微分時間Td 後,再代入上式的並聯型PID控制器得到PID參數。
  • 臨界增益Ku為對系統不斷增加比例控制器的比例增益,直到出現臨界振盪Tu後,當下的比例增益




2.開迴路調整法 
       開迴路調整法之系統響應又稱反應程序法(Process Reaction Method),是在開迴路系統中給予Yset步階訊號輸入,並利用系統響應曲線計算對應參數值。
  • 如下圖所示的系統響應輸入與輸出訊號,由系統響應曲線作反曲點之切線,可求得對應之系統落後時間T_delay 以及系統實際響應時間T_0,再將系統輸入量值u_m 與系統響應量值y_m 帶入下式求得臨界增益K_u ,
  • 再將臨界增益代入表 3 10的Z–N 閉迴路調整法公式,最後得到控制器的增益K_c、積分Ti 時間和微分時間Td 後,代入式並聯型PID控制器。  
  • 值得注意的是,該方法只有當系統的輸出響應曲線類似S曲線時,才可以利用反曲點做切線並計算參數,若響應曲線無法相似S曲線,則無法使用此方法計算對應PID控制器參數。




留言

  1. Ku 的表达式是不是错了?我看别处ym和um是反的

    回覆刪除

張貼留言

這個網誌中的熱門文章

[Linux] 利用nano 文字編輯器,在Ubuntu 下的進行Node.JS的撰寫第一支HelloWorld程式

在本文中,介紹如何利用nano來進行nodeJS程式的撰寫 在Ubuntu commend 的介面中,我們可利用文字編輯器進行程式的撰寫,常見的純文字工具如下有vi、vim、nano,都是使用者的需求去做使用。當然也有圖形化介面的文字編輯器,如sublime、nodpad、geany等等 也可以參考作者另外一篇文章 如何在Ubuntu 下安裝 sublime 2/3 文字編輯器 http://techmanalex.blogspot.tw/2015/08/linux-ubuntu-sublime-23.html 利用sublime 3 文字編輯器,在Ubuntu 下的進行Node.JS的撰寫第一支HelloWorld程式 http://techmanalex.blogspot.tw/2015/08/linux-sublime-3-ubuntu-nodejshelloworld.html 純文字編輯器 vi vim nano  圖形化文字編輯器 sublime nodpad geany 首先安裝nano,通常 Ubuntu 都已經內建nano文字編輯器 sudo apt-get install nano 下列共有4個步驟 1.接著利用nano建立文件,直接輸入會在當下目錄產生文件 nano hello.js 2.在nano輸入下列程式碼,執行時利用下面目錄中的node去做執行,同時程式輸出Hello World!。 #!/usr/bin/env node console.log("Hello World!"); nano儲存檔案需要鍵入 ^O,確認文件儲存的名稱是hello.js後,按enter完成,並鍵入 ^X離開 儲存檔案 :  ^O = Ctrl + O  離開 : ^X = Ctrl + X 3.鍵入dir,可以看到當下目錄的所有文件名稱,可以看到nano產生的hello.js 4.利用Node執行hello.js,就可以看到輸出Hello World! node hello.js  

[C#] 如何建立MDI子表單 (匯入其他現存表單)

C#時常有需要整合多個表單的問題,當我們想要整合多個已經製作完畢的表單時,常常卡在不知道如何整合,在此就由筆者的範例來為大家解答: 1.建立MDI的主表單(用來整合其他子表單) 建立 frmMain專案,並將form的name命名為frmMain 將isMdiContainer屬性改為true成為MDI表單,並將WindowsState改為Maximized 加入menuscriptm於待會撰寫用於切換表單的功能  2.建立MDI的子表單(欲匯入之表單) 建立 frmSub專案,並將form的name命名為frmSub、專案管理員中的form.cs名稱改為Form2.cs,以利後面與母表單作區別。 3.匯入子表單於MDI專案中 於母表單專案中,加入子表單進入母表單中: project -> add existing item  選擇子表單Form2.cs    將表單匯入後,點擊專案管理員中的Form2.cs,並修改namesapce從原先專案名稱FrmSub為FrmMain    還要將Form2.designer.cs的Namespace由FrmSub改為FrmMain(下圖誤植)  4.由Menuscript加入觸發切換按鈕 回到MDI母表單Form1,由Menuscript物件加入FrmSub的按鈕 點擊兩下後,撰寫觸發事件: FormSub newform = new FormSub(); //宣告newform為FormSub的型態  5.F5編譯+執行程式 點擊左上方按鈕 即可跳出FrmSub表單 這樣就完成了表單的匯入!! keyword:C#,MDI母表單,MDI子表單, 匯入表單,加入現存表單