Этот пример показывает сравнение трех методов управления двигателем постоянного тока для отслеживания команд уставки и снижения чувствительности к нарушениям порядка нагрузки:
команда 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
Примечание: Вычислите с формой пространство состояний, чтобы минимизировать порядок модели.
Теперь постройте график скорости вращения на изменение шага напряжения Va:
stepplot(dcm(1));
Щелкните правой кнопкой мыши график и выберите «Характеристики: Время установления», чтобы отобразить время установления.
Можно использовать эту простую структуру управления с feedforward, чтобы вызвать скорость вращения w к заданному w_ref значений.
Коэффициент усиления Kff с feedforward должен быть установлен на взаимное усиление 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/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).
Сравните этот новый проект с исходным проектом с 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 также использует вектор состояния 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-компенсатор лучше всего работает при отклонении нарушений порядка нагрузки (среди трех обсуждаемых здесь систем управления двигателем постоянного тока).