Управление линейного электропривода

В этом примере показано, как использовать slTuner и systune настроить текущие циклы и скоростные циклы в линейном электроприводе с пределами насыщения.

Линейная модель электропривода

Откройте модель Simulink линейного электропривода:

open_system('rct_linact')

Электрические и механические компоненты моделируются с помощью Simscape Electrical и Simscape Multibody. Система управления состоит из двух каскадной обратной связи, контролирующей ведущую текущую и угловую скорость двигателя постоянного тока.

Рисунок 1: текущий и контроллеры скорости.

Обратите внимание на то, что (текущий) контроллер внутреннего цикла является пропорциональным усилением, в то время как внешний цикл (скорость) контроллер имеет пропорциональные и интегральные действия. Выход обоих контроллеров ограничивается плюс/минус 5.

Спроектируйте спецификации

Мы должны настроить пропорциональные и интегральные усиления, чтобы ответить на спрос на скорость на 2 000 об/мин приблизительно через 0,1 секунды с минимальным перерегулированием. Начальные настройки усиления в модели являются P=50 и PI =0.2+0.1/s, и соответствующий ответ показывают в рисунке 2. Этот ответ является слишком медленным и слишком чувствительным, чтобы загрузить воздействия.

Рисунок 2: ненастроенный ответ.

Настройка системы управления

Можно использовать systune совместно настроить обе обратной связи. Чтобы настроить проект, создайте экземпляр slTuner интерфейс со списком настроенных блоков. Все блоки и сигналы заданы их именами в модели. Модель линеаризуется в t=0.5, чтобы избежать разрывов в некоторых производных в t=0.

TunedBlocks = {'Current PID','Speed PID'};
tLinearize = 0.5;  % linearize at t=0.5

% Create tuning interface
ST0 = slTuner('rct_linact',TunedBlocks,tLinearize);
addPoint(ST0,{'Current PID','Speed PID'})

Структура данных ST0 содержит описание системы управления и ее настраиваемых элементов. Затем укажите, что двигатель постоянного тока должен следовать за спросом на скорость на 2 000 об/мин через 0,1 секунды:

TR = TuningGoal.Tracking('Speed Demand (rpm)','rpm',0.1);

Можно теперь настроить пропорциональные и интегральные усиления с looptune:

ST1 = systune(ST0,TR);
Final: Soft = 1.04, Hard = -Inf, Iterations = 40

Это возвращает обновленное описание ST1 содержа настроенные значения усиления. Чтобы подтвердить этот проект, постройте ответ с обратной связью от скорости, потребуйте ускоряться:

T1 = getIOTransfer(ST1,'Speed Demand (rpm)',{'rpm','i'});
figure
step(T1,0.5)

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

writeBlockValue(ST1)

Нелинейные результаты симуляции появляются в рисунке 3. Нелинейное поведение намного хуже, чем линейная аппроксимация. Рисунок 4 показывает насыщение и колебания во внутреннем (текущем) цикле.

Рисунок 3: нелинейная симуляция настроенного контроллера.

Рисунок 4: текущий контроллер Выход.

Предотвращение насыщения

До сих пор мы только задали желаемое время отклика для внешнего (скорость) цикл. Это оставляет systune свободный выделить усилие по управлению между внутренними и внешними циклами. Насыщение во внутреннем цикле предполагает, что пропорциональное усиление слишком высоко и что некоторое изменение баланса необходимо. Одно возможное средство должно явным образом ограничить усиление от команды скорости до "Current PID" выход. Для ссылки скорости 2 000 об/мин и пределов насыщения плюс/минус 5, среднее усиление не должно превышать 5/2000 = 0.0025. Чтобы быть консервативными, попытайтесь мешать усилению ссылка скорости на "Текущий ПИД" ниже 0.001. Для этого добавьте ограничение усиления и повторно настройте усиления контроллера с обоими требованиями на месте.

% Mark the "Current PID" output as a point of interest
addPoint(ST0,'Current PID')

% Limit gain from speed demand to "Current PID" output to avoid saturation
MG = TuningGoal.Gain('Speed Demand (rpm)','Current PID',0.001);

% Retune with this additional goal
ST2 = systune(ST0,[TR,MG]);
Final: Soft = 1.39, Hard = -Inf, Iterations = 52

Итоговое усиление 1.39 указывает, что требования почти, но не точно соответствовавшие (все требования удовлетворяются, когда итоговое усиление меньше 1). Используйте viewGoal смотреть как настроенный тариф контроллеров против каждой цели.

figure('Position',[100,100,560,550])
viewGoal([TR,MG],ST2)

Затем сравните два проекта в линейной области.

T2 = getIOTransfer(ST2,'Speed Demand (rpm)',{'rpm','i'});
figure
step(T1,'b',T2,'g--',0.4)
legend('Initial tuning','Tuning with Gain Constraint')

Второй проект менее агрессивен, но все еще удовлетворяет требование времени отклика. Сравнение настроенных коэффициентов ПИД показывает, что пропорциональное усиление в текущем цикле уменьшалось с 18 до приблизительно 2.

showTunable(ST1)  % initial tuning
Block 1: rct_linact/Current Controller/Current PID =
 
  Kp = 30
 
Name: Current_PID
P-only controller.

-----------------------------------

Block 2: rct_linact/Speed Controller/Speed PID =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.391, Ki = 0.412
 
Name: Speed_PID
Continuous-time PI controller in parallel form.

showTunable(ST2)  % retuning
Block 1: rct_linact/Current Controller/Current PID =
 
  Kp = 2.19
 
Name: Current_PID
P-only controller.

-----------------------------------

Block 2: rct_linact/Speed Controller/Speed PID =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.482, Ki = 4.96
 
Name: Speed_PID
Continuous-time PI controller in parallel form.

Чтобы подтвердить этот новый проект, продвиньте новые настроенные значения усиления к модели Simulink и симулируйте ответ на спрос на скорость на 2 000 об/мин и воздействие загрузки на 500 Н. Результаты симуляции появляются в рисунке 5 и текущем контроллере, который выход показывают в рисунке 6.

writeBlockValue(ST2)

Рисунок 5: нелинейный ответ настройки с ограничением усиления.

Рисунок 6: текущий контроллер Выход.

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

Смотрите также

| | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте