我一直在設計一個運動系統的控制器。該控制器包含一個增益,比例積分器(PI)和一個前導濾波器串聯。我手動調整了控制器的增益,以獲得所需的帶寬(跨越頻率)。導聯和PI的頻率是基於經驗法則(對於導聯,帶寬/分子中的3,分母中的帶寬* 3以及對於其帶寬/ 5的積分器)。 如何才能決定控制器的增益自動獲得所需的帶寬。有沒有經驗法則可以遵循?它是如何根據採樣頻率改變的?如何計算控制器對所需帶寬的增益?
0
A
回答
0
PID控制器的設計本質上是困難的問題。你不能通過簡單的事情來做到這一點,除非你的系統允許你由於簡單性而派生某些表達式。
做到這一點的一種方法是恢復非凸非光滑優化算法,如Matlab自己的systune
或HIFOO或一些其他解決「一個」解決方案而不是「解決方案」的工具。
在文檔中有一些循環整形和帶寬限制的示例。
0
那麼你可以簡單地使用你的關於我的行動和領先過濾器的經驗法則。然後你只需檢查開環的波特圖。以您想要的帶寬檢查系統的大小。然後,您可以簡單計算您需要應用多少增益才能將點向上移至0 dB(帶寬)。
此外,經驗法則假定採樣頻率足夠高。但是,一般來說,如果採樣頻率變低,您的增益也會降低,但I動作和前置濾波器的頻率也會改變。
-edit-
我爲你製作了一個小腳本。劇本是自我解釋。
相同的方法可應用於離散域。此外,我不會在離散域中設計控制器,而是在連續時域中設計控制器。接下來,我將使用離散化方法將控制器從連續時間轉換爲離散時間,例如Bilinear transform。 http://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');
相關問題
- 1. 如何:Silverlight中的帶寬計算器
- 2. 如何控制輸出的增益?
- 3. 信息增益計算文本文件?
- 4. CLLocationManager正在計算仰角增益
- 5. 帶寬估算/計算
- 6. Python的DSP,自動增益控制(AGC)
- 7. 如何使用c來計算帶寬#
- 8. 如何根據每分鐘流量(fpm)計算帶寬需求?
- 9. 如何計算服務器中任何PHP頁面的帶寬?
- 10. Android - 如何在錄製時添加增益控制
- 11. 如何監控/計算NodeJS服務器的帶寬使用情況?
- 12. MATLAB:如何計算累計收益
- 13. WebRTC AGC(自動增益控制)
- 14. 控制檯計算器繼續計算
- 15. 使用Simulink的PI控制器的增益值
- 16. GTX 970帶寬計算
- 17. 需要幫助來計算增益。發生錯誤。請你需要幫助
- 18. Solr複製帶寬控制
- 19. 計算累計仰角增益給我更奇妙的結果
- 20. jQuery計算寬度,並將寬度應用到所需的容器
- 21. Web音頻增益節點可以控制其他增益節點嗎?
- 22. CakePHP所需控制器
- 23. 定時器控制增量計數器
- 24. 如何計算計算SHA-256散列所需的時間?
- 25. Javascript代碼不把我帶到所需的控制器MVC
- 26. MySQL的計算收益,虧損和淨增益在一段時間
- 27. 需要帶有webpack的AngularJs控制器
- 28. 如何在帶域控制器的非域xp計算機上同步時間?
- 29. 如何計算所需結果
- 30. 控制網絡帶寬
謝謝WG :) –
我想上述計算以相同的控制器,用於離散系統增益。我沒有找到足夠的材料來分析計算。你能否提供一些相同的見解? 在s域我可以通過用j * w代替s來找到增益。我需要幫助找到離散函數(z域)的增益。我試圖用exp(j * w)代替z,但它不能給出預期的結果。任何幫助將不勝感激.. –
@SomannaThapanda看到我的編輯。 –