2016-03-04 23 views
0

我一直在設計一個運動系統的控制器。該控制器包含一個增益,比例積分器(PI)和一個前導濾波器串聯。我手動調整了控制器的增益,以獲得所需的帶寬(跨越頻率)。導聯和PI的頻率是基於經驗法則(對於導聯,帶寬/分子中的3,分母中的帶寬* 3以及對於其帶寬/ 5的積分器)。 如何才能決定控制器的增益自動獲得所需的帶寬。有沒有經驗法則可以遵循?它是如何根據採樣頻率改變的?如何計算控制器對所需帶寬的增益?

回答

0

PID控制器的設計本質上是困難的問題。你不能通過簡單的事情來做到這一點,除非你的系統允許你由於簡單性而派生某些表達式。

做到這一點的一種方法是恢復非凸非光滑優化算法,如Matlab自己的systune或HIFOO或一些其他解決「一個」解決方案而不是「解決方案」的工具。

在文檔中有一些循環整形和帶寬限制的示例。

0

那麼你可以簡單地使用你的關於我的行動和領先過濾器的經驗法則。然後你只需檢查開環的波特圖。以您想要的帶寬檢查系統的大小。然後,您可以簡單計算您需要應用多少增益才能將點向上移至0 dB(帶寬)。

此外,經驗法則假定採樣頻率足夠高。但是,一般來說,如果採樣頻率變低,您的增益也會降低,但I動作和前置濾波器的頻率也會改變。

-edit-

我爲你製作了一個小腳本。劇本是自我解釋。

相同的方法可應用於離散域。此外,我不會在離散域中設計控制器,而是在連續時域中設計控制器。接下來,我將使用離散化方法將控制器從連續時間轉換爲離散時間,例如Bilinear transformhttp://nl.mathworks.com/help/control/ref/c2d.html提供瞭如何在Matlab中做到這一點的信息。

另外,我想推薦這個工具對你來說,http://cstwiki.wtb.tue.nl/index.php?title=Home_of_ShapeIt

clear all; 
close all; 
clc; 

%% Initialize parameters 
s = tf('s'); 

% Mass of plant 
m = 10; 

% Desired bandwidth 
BW = 10; 

%% Define plant 
P = 1/(m*s^2); 

%% Define filters 
% Lead lag filter 
f1 = (1/(2*pi*BW/3)*s + 1)/(1/(2*pi*BW*3)*s + 1); 

% Integrator 
f2 = (s + 2*pi*BW/5)/s; 

% define Controller 
C = f1*f2; 

%% Determine gain 
% Open loop 
OL = C*P; 

% Evaluate at bandwidth and get magnitude 
mag = abs(evalfr(OL,2*pi*BW)); 

% Desired gain is 1/mag 
C = 1/mag*C; 

% Recalculate open loop 
OL = C*P; 

% Evaluate at bandwidth, magnitude should be 1 
sprintf('Magnitude at bandwidth: %f\n',abs(evalfr(OL,2*pi*BW))); 

%% Compute other stuff 
% Sensnitivity 
SS = 1/(1 + OL); 

% Closed loop, complementary sensitivity 
CL = OL*SS; 

% Process sensitivity 
PS = P*SS; 

% Controller sensitivity 
CS = C*SS; 

%% Create some plots 
% Open loop 
figure(1); 
bode(OL); 
title('Open loop'); 

% Nyquist 
figure(2); 
nyquist(OL); 

% Other sensitivities 
figure(3); 
subplot(2,2,1); 
bodemag(CL); 
title('Closed loop'); 
subplot(2,2,2); 
bodemag(SS); 
title('Sensitivity'); 
subplot(2,2,3); 
bodemag(PS); 
title('Process sensitivity'); 
subplot(2,2,4); 
bodemag(CS); 
title('Controller sensitivity'); 

% Step 
figure(4); 
step(CL); 
title('Step response'); 
+0

謝謝WG :) –

+0

我想上述計算以相同的控制器,用於離散系統增益。我沒有找到足夠的材料來分析計算。你能否提供一些相同的見解? 在s域我可以通過用j * w代替s來找到增益。我需要幫助找到離散函數(z域)的增益。我試圖用exp(j * w)代替z,但它不能給出預期的結果。任何幫助將不勝感激.. –

+0

@SomannaThapanda看到我的編輯。 –