Simulink&車輛巡航控制 (2) -PID控制設計

1.系統模型和參數

下面給出了巡航控制問題的傳遞函數模型。有關推導,請參閱:MATLAB/Simulink建模-車輛巡航控制 (1)。

Simulink&車輛巡航控制 (2) -PID控制設計的圖1

公式(1)中使用的相關參數:

(m)   整車質量             1000 kg
(b)   阻尼系數             50 N.s/m

 (r)        參考車速                                 10 m/s


2.性能設定

  • 上升時間 < 5 s    

  • 過沖 < 10%    

  • 穩態誤差 < 2%


3.PID 概述

典型單位反饋系統的框圖如下所示。

Simulink&車輛巡航控制 (2) -PID控制設計的圖2

PID控制器的傳遞函數是:

Simulink&車輛巡航控制 (2) -PID控制設計的圖3

我們可以在MATLAB中直接定義傳遞函數:

Kp = 1;
Ki = 1;
Kd = 1;

s = tf('s');
C = Kp + Ki/s + Kd*s
C =

s^2 + s + 1
-----------
s

連續時間傳遞函數。

或者,我們可以使用 MATLAB 的 pid 控制器對象來生成等效的連續時間控制器,如下所示:

C = pid(Kp,Ki,Kd)
C =

1
Kp + Ki * --- + Kd * s
s

with Kp = 1, Ki = 1, Kd = 1

并聯形式的連續時間 PID 控制器。


4.比例控制

在這個問題中要做的第一件事是找到一個添加了比例控制 (C=Kp) 的閉環傳遞函數。通過減少單位反饋框圖,帶有比例控制器的閉環傳遞函數變為:

Simulink&車輛巡航控制 (2) -PID控制設計的圖4

比例控制器 Kp減少上升時間,這在這種情況下是可取的。現在,使用等于 100 的Kp和 10 m/s 的參考速度。 創建一個新的 m 文件并輸入以下命令。

m = 1000;
b = 50;
r = 10;

s = tf('s');
P_cruise = 1/(m*s + b);

Kp = 100;
C = pid(Kp);

T = feedback(C*P_cruise,1)

t = 0:0.1:20;
step(r*T,t)

axis([0 20 0 10])


T =

100
------------
1000 s + 150

連續時間傳遞函數。

Simulink&車輛巡航控制 (2) -PID控制設計的圖5

請注意,我們使用 MATLAB 反饋命令來簡化閉環系統的框圖簡化。 請自行驗證結果是否與上面推導的閉環傳遞函數 T 一致。在 MATLAB 中運行 m 文件應該會給您上面的階躍響應。 從圖中可以看出,穩態誤差和上升時間都不滿足我們的設計標準。您可以增加比例增益 Kp,以減少上升時間和穩態誤差。 更改現有的 m 文件,使 Kp等于 5000,然后在 MATLAB 命令窗口中重新運行它。 你應該看到下面的情節。

Kp = 5000;
C = pid(Kp);
T = feedback(C*P_cruise,1);

step(r*T,t)
axis([0 20 0 10])

Simulink&車輛巡航控制 (2) -PID控制設計的圖6

穩態誤差現在基本上為零,并且上升時間已大大減少。 然而,這種響應是不現實的,因為由于發動機和動力傳動系統的功率限制,真正的巡航控制系統通常不能在不到 0.5 秒的時間內將車輛的速度從 0 改變到 10 m/s。在控制系統工程的實踐中經常遇到執行器的限制,因此,在提出新的控制器時必須始終考慮所需的控制動作在這種情況下,這個問題的解決方案是選擇一個較低的比例增益Kp,這將提供一個合理的上升時間,并添加一個積分控制器來消除穩態誤差。


5.PI 控制

這個帶有 PI 控制器的巡航控制系統的閉環傳遞函數 (C = Kp + Ki/s) 是:

Simulink&車輛巡航控制 (2) -PID控制設計的圖7

向系統添加積分控制器可消除穩態誤差。 現在,讓 Kp 等于 600 和 Ki 等于 1,看看響應會發生什么。 將您的 m 文件更改為以下內容。

Kp = 600;
Ki = 1;
C = pid(Kp,Ki);

T = feedback(C*P_cruise,1);

step(r*T,t)
axis([0 20 0 10])

Simulink&車輛巡航控制 (2) -PID控制設計的圖8

現在調整比例增益 Kp 和積分增益 Ki,以獲得所需的響應。當調整積分增益 Ki 時,建議從較小的值開始,因為較大的 Ki 會使響應不穩定。 當 Kp 等于 800 且 Ki等于 40 時,階躍響應將如下所示:

Kp = 800;
Ki = 40;
C = pid(Kp,Ki);

T = feedback(C*P_cruise,1);

step(r*T,t)
axis([0 20 0 10])

Simulink&車輛巡航控制 (2) -PID控制設計的圖9


6.PID 控制

對于這個特定的例子,不需要實現微分控制器來獲得所需的輸出。 但是,您可能希望了解如何使用 PID 控制以供將來參考。 這個帶有 PID 控制器的巡航控制系統的閉環傳遞函數 (C = Kp + Ki/s + Kds) 是:

Simulink&車輛巡航控制 (2) -PID控制設計的圖10

令 Kp等于1,Ki等于1,Kd等于 1,然后在新的 m 文件中輸入以下命令。

Kp = 1;
Ki = 1;
Kd = 1;
C = pid(Kp,Ki,Kd);

T = feedback(C*P_cruise,1);

繪制階躍響應并調整所有 Kp、Kd 和Ki,直到獲得滿意的結果。

建議:通常選擇合適的增益需要一個反復試驗的過程。 解決這一繁瑣過程的最佳方法是一次調整一個變量(Kp、Ki 或 Kd),并觀察改變一個變量如何影響系統輸出。

【免責聲明】本文部分資料摘自網絡平臺,版權歸原作者所有,僅用于技術分享與交流,非商業用途!若有涉及版權等請告知,將及時修訂刪除,謝謝大家的關注!

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
3