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

Этот пример показывает, как использовать 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);

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

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

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

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

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

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

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

writeBlockValue(ST1)

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

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

Рисунок 4: Текущий Контроллер Вывод (ограниченный плюс/минус 5).

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

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

% Mark the control signals as points of interest so that they can be
% referenced in the gain requirements
addPoint(ST0,{'Current PID','Speed PID'})

% Limit gain from speed demand to control signals to avoid saturation
MG1 = TuningGoal.Gain('Speed Demand (rpm)','Speed PID',0.001);
MG2 = TuningGoal.Gain('Speed Demand (rpm)','Current PID',0.001);

% Retune with these additional requirements
ST2 = systune(ST0,[TR,MG1,MG2]);
Final: Soft = 1.39, Hard = -Inf, Iterations = 42

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

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

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

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

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

writeBlockValue(ST2)

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

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

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

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

| | | |

Похожие темы