В этом примере показано, как использовать slTuner и systune настройка петель тока и скорости в линейном электроприводе с пределами насыщения.
Откройте модель Simulink линейного электропривода:
open_system('rct_linact')

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


Рис. 1: Регуляторы тока и скорости.
Следует отметить, что контроллер внутреннего контура (тока) является пропорциональным усилением, в то время как контроллер внешнего контура (скорости) имеет пропорциональные и интегральные действия. Выход обоих контроллеров ограничен значением плюс/минус 5.
Нам нужно настроить пропорциональный и интегральный выигрыш, чтобы ответить на требование скорости 2000 об/мин примерно за 0,1 секунды с минимальным превышением. Начальными установками усиления в модели являются P = 50 и PI (s) = 0,2 + 0 ,1/с, и соответствующий отклик показан на рисунке 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 содержит описание системы управления и ее перестраиваемых элементов. Далее укажите, что двигатель постоянного тока должен соответствовать требованию скорости 2000 об/мин в течение 0,1 секунды:
TR = TuningGoal.Tracking('Speed Demand (rpm)','rpm',0.1);
Теперь можно настроить пропорциональный и интегральный выигрыш с помощью looptune:
ST1 = systune(ST0,TR);
Final: Soft = 1.03, Hard = -Inf, Iterations = 124
Это возвращает обновленное описание ST1 содержит настроенные значения усиления. Чтобы проверить эту конструкцию, постройте график реакции замкнутого цикла от требуемой скорости к скорости:
T1 = getIOTransfer(ST1,'Speed Demand (rpm)',{'rpm','i'}); figure step(T1,0.5)

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

Рис. 3: Нелинейное моделирование настроенного контроллера.

Рис. 4: Выход контроллера тока.
До сих пор мы указывали только желаемое время отклика для внешнего (скоростного) контура. Это оставляет systune свободно распределять управляющее усилие между внутренним и внешним контурами. Насыщение во внутреннем цикле говорит о том, что пропорциональный коэффициент усиления слишком высок и что требуется некоторое ребалансирование. Одним из возможных способов является явное ограничение коэффициента усиления от команды speed до выхода «Current PID». Для эталона скорости 2000 об/мин и пределов насыщения плюс/минус 5 средний коэффициент усиления не должен превышать 5/2000 = 0,0025. Чтобы быть консервативным, постарайтесь сохранить коэффициент усиления от скорости по отношению к «Current PID» ниже 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')

Вторая конструкция менее агрессивна, но по-прежнему соответствует требованию времени отклика. Сравнение настроенных коэффициентов усиления PID показывает, что пропорциональный коэффициент усиления в токовом контуре был уменьшен с 18 примерно до 2.
showTunable(ST1) % initial tuning
Block 1: rct_linact/Current Controller/Current PID =
Kp = 18.4
Name: Current_PID
P-only controller.
-----------------------------------
Block 2: rct_linact/Speed Controller/Speed PID =
1
Kp + Ki * ---
s
with Kp = 0.402, Ki = 0.677
Name: Speed_PID
Continuous-time PI controller in parallel form.
showTunable(ST2) % retuning
Block 1: rct_linact/Current Controller/Current PID =
Kp = 2.38
Name: Current_PID
P-only controller.
-----------------------------------
Block 2: rct_linact/Speed Controller/Speed PID =
1
Kp + Ki * ---
s
with Kp = 0.44, Ki = 4.51
Name: Speed_PID
Continuous-time PI controller in parallel form.
Чтобы проверить эту новую конструкцию, переместите новые настроенные значения коэффициента усиления в модель Simulink и смоделируйте реакцию на потребность в скорости 2000 об/мин и возмущение нагрузки 500 N. Результаты моделирования представлены на рис. 5, а выходной сигнал контроллера тока показан на рис. 6.
writeBlockValue(ST2)

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

Рис. 6. Выход контроллера тока.
Нелинейные реакции теперь удовлетворительны, и петля тока больше не насыщается. Дополнительное ограничение усиления успешно сбалансировало усилие управления между внутренним и внешним контурами.
TuningGoal.Gain | TuningGoal.Tracking | slTuner (Simulink Control Design) | systune (slTuner) (Simulink Control Design) | writeBlockValue(Проект управления Simulink)