Управление двигателем постоянного тока

Этот пример показывает сравнение трех методов управления двигателем постоянного тока для отслеживания команд заданного значения и сокращения чувствительности, чтобы загрузить воздействия:

  • команда feedforward

  • интегральное управление с обратной связью

  • Регулирование LQR

См. "Получение Моделей Started:Building" для получения дополнительной информации о модели двигателя постоянного тока.

Проблемный оператор

В управляемых арматурой двигателях постоянного тока приложенное напряжение 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

Примечание: Вычислите с формой пространства состояний, чтобы минимизировать порядок модели.

Теперь постройте угловой скоростной ответ на ступенчатое изменение в напряжении Va:

stepplot(dcm(1));

Щелкните правой кнопкой по графику и выберите "Characteristics:Settling Time", чтобы отобразить время установления.

Система управления двигателя постоянного тока Feedforward

Можно использовать эту простую feedforward управляющую структуру, чтобы управлять угловой скоростью w к данному значению w_ref.

Усиление feedforward Kff должно быть установлено в обратную величину усиления DC от Va до w.

Kff = 1/dcgain(dcm(1))
Kff =

    4.1000

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

Очевидно feedforward управляют воздействиями загрузки указателей плохо.

Система управления двигателя постоянного тока обратной связи

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

Чтобы осуществить нулевую установившуюся ошибку, используйте интегральное управление формы

     C(s) = K/s
     where K is to be determined.

Чтобы определить усиление K, можно использовать метод корневого годографа, применился к разомкнутому циклу 1/с * передача (Va-> w):

h = rlocusplot(tf(1,[1 0]) * dcm(1));
setoptions(h,'FreqUnits','rad/s');
xlim([-15 5]);
ylim([-15 15]);

Нажмите на кривые, чтобы считать значения усиления и связанную информацию. Разумным выбором здесь является K = 5. Обратите внимание на то, что Design Tool SISO предлагает интегрированный графический интерфейс пользователя, чтобы выполнить такие проекты (помогите sisotool для деталей).

Сравните этот новый проект с начальной буквой feedforward проект на том же тесте:

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) для структуры обратной связи, показанной ниже.

В дополнение к интегралу ошибки схема 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

Этот график сравнивает диаграммы Боде с обратной связью для трех систем управления двигателя постоянного тока

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 выполняет лучше всего при отклонении воздействий загрузки (среди трех систем управления двигателя постоянного тока, обсужденных здесь).