В этом примере показано сравнение трех методов управления двигателем постоянного тока для отслеживания команд уставки и снижения чувствительности к возмущениям нагрузки:
команда feedforward
интегральное управление с обратной связью
Регулирование LQR
Дополнительные сведения о модели двигателя постоянного тока см. в разделе «Начало работы: построение моделей».
В двигателях постоянного тока, управляемых якорем, приложенное напряжение Va управляет угловой скоростью w вала.

В этом примере показаны два способа управления двигателем постоянного тока для снижения чувствительности w к изменениям нагрузки (изменения крутящего момента, противоположные нагрузке двигателя).

Упрощенная модель двигателя постоянного тока показана выше. Крутящий момент Td моделирует нарушения нагрузки. Необходимо минимизировать изменения скорости, вызванные такими возмущениями.
Для этого примера физические константы:
R = 2.0; % Ohms L = 0.5; % Henrys Km = 0.1; % torque constant Kb = 0.1; % back emf constant Kf = 0.2; % Nms J = 0.02; % kg.m^2/s^2
Сначала создайте модель состояния-пространства двигателя постоянного тока с двумя входами (Va, Td) и одним выходом (w):
h1 = tf(Km,[L R]); % armature h2 = tf(1,[J Kf]); % eqn of motion dcm = ss(h2) * [h1 , 1]; % w = h2 * (h1*Va + Td) dcm = feedback(dcm,Kb,1,1); % close back emf loop
Примечание.Расчет с помощью формы state-space для минимизации порядка модели.
Теперь постройте график реакции угловой скорости на ступенчатое изменение напряжения Va:
stepplot(dcm(1));

Щелкните правой кнопкой мыши по графику и выберите «Characteristics: Settling Time» для просмотра времени настройки.
Эту простую управляющую структуру можно использовать для команды угловой скорости w до заданного значения w_ref.

Коэффициент Kff усиления передачи должен быть установлен на обратную величину коэффициента усиления постоянного тока от Va до w.
Kff = 1/dcgain(dcm(1))
Kff =
4.1000
Для оценки конструкции прямой связи в условиях возмущений нагрузки смоделировать реакцию на w_ref=1 команды шага с возмущением Td = -0.1Nm между t = 5 и t = 10 секунд:
t = 0:0.1:15; Td = -0.1 * (t>5 & t<10); % load disturbance u = [ones(size(t)) ; Td]; % w_ref=1 and Td cl_ff = dcm * diag([Kff,1]); % add feedforward gain cl_ff.InputName = {'w_ref','Td'}; cl_ff.OutputName = 'w'; h = lsimplot(cl_ff,u,t); title('Setpoint tracking and disturbance rejection') legend('cl\_ff') % Annotate plot line([5,5],[.2,.3]); line([10,10],[.2,.3]); text(7.5,.25,{'disturbance','T_d = -0.1Nm'},... 'vertic','middle','horiz','center','color','r');

Очевидно, что управление с прямой связью плохо справляется с нарушениями нагрузки.
Затем попробуйте использовать структуру управления с обратной связью, показанную ниже.

Для применения нулевой стационарной ошибки используйте интегральное управление формой
C(s) = K/s
where K is to be determined.
Для определения коэффициента усиления K можно использовать метод корневого локуса, применяемый к передаче 1/s * с разомкнутым контуром (Va- > w):
h = rlocusplot(tf(1,[1 0]) * dcm(1)); setoptions(h,'FreqUnits','rad/s'); xlim([-15 5]); ylim([-15 15]);

Щелкните по кривым для считывания значений усиления и соответствующей информации. Разумным выбором здесь является K = 5. Обратите внимание, что инструмент SISO Design Tool предлагает интегрированный графический интерфейс пользователя для выполнения таких проектов (для получения подробной информации см. справку sisotool).
Сравните эту новую конструкцию с исходной конструкцией для того же тестового случая:
K = 5; C = tf(K,[1 0]); % compensator K/s cl_rloc = feedback(dcm * append(C,1),1,1,1); h = lsimplot(cl_ff,cl_rloc,u,t); cl_rloc.InputName = {'w_ref','Td'}; cl_rloc.OutputName = 'w'; title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback w/ rlocus','Location','NorthWest')

Конструкция корневого локуса лучше устраняет нарушения нагрузки.
Для дальнейшего повышения производительности попробуйте разработать линейный квадратичный регулятор (LQR) для структуры обратной связи, показанной ниже.

В дополнение к интегралу ошибки схема LQR также использует вектор состояния x = (i, w) для синтеза управляющего напряжения Va. Результирующее напряжение имеет вид
Va = K1 * w + K2 * w/s + K3 * i
where i is the armature current.
Для лучшего отклонения возмущений используйте функцию затрат, которая штрафует за большую интегральную ошибку, например, функцию затрат.

где

Оптимальное усиление LQR для этой функции затрат вычисляется следующим образом:
dc_aug = [1 ; tf(1,[1 0])] * dcm(1); % add output w/s to DC motor model
K_lqr = lqry(dc_aug,[1 0;0 20],0.01);
Затем выведите модель с замкнутым контуром для целей моделирования:
P = augstate(dcm); % inputs:Va,Td outputs:w,x C = K_lqr * append(tf(1,[1 0]),1,1); % compensator including 1/s OL = P * append(C,1); % open loop CL = feedback(OL,eye(3),1:3,1:3); % close feedback loops cl_lqr = CL(1,[1 4]); % extract transfer (w_ref,Td)->w
На этом графике сравниваются схемы Bode с замкнутым контуром для трех конструкций управления электродвигателями постоянного тока
bodeplot(cl_ff,cl_rloc,cl_lqr);

Щелкните по кривым, чтобы определить системы или проверить данные.
Наконец, мы сравним три проекта управления двигателем постоянного тока в нашем тестовом примере моделирования:
h = lsimplot(cl_ff,cl_rloc,cl_lqr,u,t); title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback (rlocus)','feedback (LQR)','Location','NorthWest')

Благодаря своим дополнительным степеням свободы, компенсатор LQR лучше всего работает при отклонении возмущений нагрузки (среди трех рассмотренных здесь конструкций управления двигателем постоянного тока).