0

Я проектировал контроллер для системы движения. Контроллер содержит усиление, пропорциональный интегратор (PI) и последовательный фильтр. Я настроил усиление контроллера вручную, чтобы получить желаемую полосу пропускания (перекрестная частота). Частота свинца и PI основана на эмпирическом правиле (для свинца, полосы пропускания/3 в числителе, полосе пропускания * 3 в знаменателе, а для интегратора - ширина полосы пропускания/5). Как я могу определить прирост контроллера для получения автоматически, просто указав желаемую полосу пропускания. Есть ли какое-либо эмпирическое правило? Как это изменяется в соответствии с частотой выборки?как рассчитать коэффициент усиления контроллера для желаемой полосы пропускания?

ответ

0

PID-контроллер дизайн по своей сути трудный проблема. Вы не можете сделать это с помощью простых вопросов, если ваша система не позволяет вывести определенные выражения из-за простоты.

Один из способов сделать это - вернуться к невыпуклым негладким алгоритмам оптимизации, таким как собственный Matlab systune или HIFOO или некоторые другие инструменты, которые решаются для решения «а», но не «для».

Есть примеры для формирования петли и ограничений пропускной способности для документации.

0

Ну, вы можете просто использовать свои эмпирические правила относительно действия I и свинцового фильтра. Затем вы просто проверяете диаграмму bode открытого цикла. Проверьте величину системы на частоте, где вы хотите использовать свою полосу пропускания. Затем вы можете просто подсчитать, сколько усилений вам нужно применить, чтобы переместить точку вверх до 0 дБ, ширину полосы.

Кроме того, эмпирические правила предполагают достаточно высокую частоту дискретизации. Но, в общем случае, если частота дискретизации станет ниже, ваш коэффициент усиления также будет ниже, однако частоты 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'); 
+0

Спасибо WG :) –

+0

Я пытаюсь вычислить коэффициенты усиления для дискретной системы с теми же контроллерами, как упоминалось выше. Я не нахожу достаточно материала для вычисления аналитически. Можете ли вы рассказать о том же? В случае s-домена я мог бы найти коэффициент усиления, заменив s на j * w. Мне нужна помощь в поиске выигрыша дискретной функции (z-домена). Я попытался заменить z на exp (j * w), но он не дает ожидаемых результатов. Любая помощь будет оценена. –

+0

@SomannaThapanda см. Мое редактирование. –

 Смежные вопросы

  • Нет связанных вопросов^_^