Как рассчитать усиление контроллера для желаемой полосы пропускания?

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

2 ответа

Конструкция ПИД-регулятора - сложная задача. Вы не можете сделать это с помощью простых вещей, если ваша система не позволяет вам получать определенные выражения из-за простоты.

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

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

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

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

-редактировать-

Я сделал небольшой сценарий для вас. Сценарий самоочевиден.

Те же самые методы могут быть применены в дискретной области. Кроме того, я бы не проектировал контроллер в дискретной области, а скорее в непрерывной временной области. Далее я бы использовал метод дискретизации для преобразования контроллера из непрерывного времени в дискретное время, например, билинейное преобразование. 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');
Другие вопросы по тегам