Настройка векторных контроллеров с помощью SYSTUNE

В этом примере показано, как использовать systune команда для настройки векторного управления (FOC) для синхронной машины с постоянными магнитами (PMSM) на основе результата оценки частотной характеристики (FRE).

Векторное управление

В этом примере векторное управление (FOC) для синхронной машины с постоянными магнитами (PMSM) моделируется в Simulink ® с использованием Simscape™ компонентов Electrical™.

mdl = 'scdfocmotorSystune';
open_system(mdl)
SignalBuilderPath = [mdl,'/System_Inputs/Signal_Builder_Experiments'];

Векторное управление управляет 3-фазными токами статора как вектором. FOC основан на проекциях, которые преобразуют 3-фазовую зависящую от времени и скорости систему в двухкоординатную инвариантную по времени систему. Эти преобразования являются Преобразованием Кларка, Преобразованием Парка и их соответствующими обратными преобразованиями. Эти преобразования реализованы как блоки в подсистеме Controller_Algorithm.

Преимущества использования FOC для управления двигателями переменного тока включают:

  • Крутящий момент и поток управляются непосредственно и отдельно

  • Точное переходное и установившееся управление

  • Аналогичная эффективность по сравнению с двигателями постоянного тока

Подсистема Controller_Algorithm содержит всё три ПИ-контроллеров. Внешний контур ПИ-контроллера регулирует скорость двигателя. Два внутренних контура ПИ-контроллеров управлять токами по оси D и Q отдельно. Команда от внешнего контура ПИ-контроллера непосредственно подается на ось Q, чтобы управлять крутящим моментом. Команда для оси d равна нулю для PMSM, потому что поток ротора фиксирован постоянными магнитами для этого типа электродвигателя переменного тока.

Перед настройкой контроллеров исследуйте характеристики скорости с помощью исходных контроллеров и сохраните результаты симуляции в MAT-файл, SystunedSpeed.mat. Существующее ПИ-контроллер скорости имеет коэффициент усиления P = 0,08655 и I = 0,1997. Ток ПИ-контроллеров оба имеют усиления P = 1 и I = 200.

scdfocmotorSystuneOriginalResponse

Постройте график скорости с помощью исходных контроллеров. Графики показывают статические ошибки и относительно медленное переходное поведение. Можно настроить контроллеры для достижения лучшей эффективности.

figure
plot(logsout_original_oneside{2}.Values);
hold on
plot(logsout_original_oneside{1}.Values);
legend('Original Controller','Speed Reference','Location','southeast');
grid on
hold off

figure
plot(logsout_original_twoside{2}.Values);
hold on
plot(logsout_original_twoside{1}.Values);
legend('Original Controller','Speed Reference','Location','northeast');
grid on
hold off

Сбор данных частотной характеристики

Чтобы собрать данные частотной характеристики, найдите рабочую точку со скоростью 150 рад/с, задайте точки линейного анализа, задайте входные сигналы и оцените частотную характеристику.

Отсоедините исходные контроллеры и симулируйте системную модель без разомкнутого контура с помощью команд VD и VQ. Для достижения рабочей точки задайте начальные напряжения -0,1 В для VD и 3,465 В для VQ с помощью ctrlIniValues структура. Командные блоки постоянного напряжения соединяются путем установки сигналов переключателя в switchIniValue структура.

switchIniValue.openLoopD = 1;
switchIniValue.openLoopQ = 1;
ctrlIniValues.voltageD = -0.1;
ctrlIniValues.voltageQ = 3.465;

Захват моментального снимка симуляции в 3 с как рабочая точка для оценки частотной характеристики.

signalbuilder(SignalBuilderPath, 'activegroup', 1);
op = findop(mdl,3);

Используйте рабочую точку моментального снимка симуляции в качестве начального условия модели. Измените начальные значения модели в ctrlIniValues структура, которая находится в этом установившемся состоянии. Для токового контроллера оси D, идентификатор тока 0 А. Для токового контроллера q-оси текущий IQ 0.1 А. Для контроллера скорости внешнего контура ток ссылки равен 0.122 А и скорость на 150 рад/с. Для объекта PMSM установите скорость ротора в pmsm структура, к 150 рад/с.

set_param(mdl,'LoadInitialState','on');
set_param(mdl,'InitialState','getstatestruct(op)');
ctrlIniValues.currentDIC = 0;
ctrlIniValues.currentQIC = 0.1;
ctrlIniValues.speedIC = 150;
ctrlIniValues.speedCurrent = 0.122;
pmsm.RotorVelocityInit = 150;

Добавьте точки линейного анализа к модели для оценки частотной характеристики. Добавьте входные точки разомкнутого контура к VD и VQ. Добавьте выходные точки разомкнутого контура к ID, IQ и скорости. В сложение добавьте точку анализа цикла пропуска к измерению скорости.

io = getlinio(mdl);

Задайте входной сигнал синестрейма от 10 на 10,000 рад/с с фиксированным шагом расчета 4e-6 s, то есть шаг расчета текущего цикла управления sampleTime.CurrentControl. Сигнал синестрема величины 0.25 V. Эта величина гарантирует, что объект правильно возбуждается в пределах предела насыщения. Если амплитуда возбуждения либо слишком велика, либо слишком мала, это приводит к неточным результатам оценки частотной характеристики.

in = frest.createFixedTsSinestream(sampleTime.CurrentControl,{10,1e4});
in.Amplitude = 0.25;

Оцените частотную характеристику в заданной установившейся рабочей точке op, используя точки линейного анализа в io и входные сигналы в in. После завершения оценки частотной характеристики измените имена входного и выходного каналов в полученной модели и постройте график частотной характеристики.

estsys = frestimate(mdl,op,io,in);
estsys.InputName = {'Vd','Vq'};
estsys.OutputName = {'Id','Iq','speed'};
bode(estsys,'.')

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

Получите модель линейной системы пространства состояний из результата оценки частотной характеристики. Использование набора опций для ssest function, установите численный метод поиска, используемый для этой итерационной оценки параметра в качестве поиска методом наименьших квадратов Левенберга-Марквардта. Оцените модель пространства состояний с четырьмя состояниями и периодом 4e-6 секунд. Этот шаг требует программного обеспечения System Identification Toolbox™.

optssest = ssestOptions('SearchMethod','lm');
optssest.Regularization.Lambda = 0.1;
sys_singletune = ssest(estsys,4,'Ts',sampleTime.CurrentControl,optssest);

В порядок, чтобы настроить всё три ПИ-контроллеров в модели PMSM FOC, создайте систему управления, как показано на следующем блоке схеме.

Задайте трёх настраиваемых блоков ПИД в дискретном времени и их ввода-вывода для управления током по оси D, управления током по оси Q и управления скоростью. Шаги расчета этих ПИД-регуляторов в дискретном времени должны быть последовательными, что аналогично текущему циклу управления шага расчета. Чтобы гарантировать лучшее приближение более быстрых контроллеров по сравнению с исходными более медленными контроллерами, установите дискретную формулу интегратора для каждого ПИД-регулятора равной 'Trapezoidal'.

Cd = tunablePID('Cd','pi',sampleTime.CurrentControl);
Cd.IFormula = 'Trapezoidal';
Cd.u = 'Id_e';
Cd.y = 'Vd';

Cq = tunablePID('Cq','pi',sampleTime.CurrentControl);
Cq.IFormula = 'Trapezoidal';
Cq.u = 'Iq_e';
Cq.y = 'Vq';

Cspeed = tunablePID('Cspeed','pi',sampleTime.CurrentControl);
Cspeed.IFormula = 'Trapezoidal';
Cspeed.u = 'speed_e';
Cspeed.y = 'Iq_ref';

Создайте три суммирующих соединения для внутреннего и внешнего циклов обратной связи.

sum_speed = sumblk('speed_e = speed_ref - speed');
sum_id = sumblk('Id_e = Id_ref - Id');
sum_iq = sumblk('Iq_e = Iq_ref - Iq');

Задайте входы, выходы и точки анализа для настройки контроллера.

input = {'Id_ref','speed_ref'};
output = {'Id','Iq','speed'};
APs = {'Iq_ref','Vd','Vq','Id','Iq','speed'};

Наконец, соберите полную систему управления, ST0, с использованием этих компонентов.

ST0 = connect(sys_singletune,Cd,Cq,Cspeed,sum_speed,sum_id,sum_iq,input,output,APs);

Задайте цели настройки, включая отслеживание и цикл целей формы для обеспечения отслеживания команд, а также цели усиления для предотвращения насыщения. Для контроллера скорости установите полосу пропускания отслеживания равной 150 рад/с. Эта полоса пропускания используется как в целях отслеживания, так и в целях цикла формы. Кроме того, установите значение ошибки постоянного тока 0.001 для отражения максимальной установившейся ошибки 0.1%. Установите пиковую ошибку равной 10. Для токового контроллера d-оси установите полосу пропускания отслеживания равной 2500 рад/с, который намного быстрее, чем контроллер скорости внешнего контура. Чтобы предотвратить насыщение контроллеров, задайте цели, чтобы ограничить усиления для всех трех контроллеров.

TR1 = TuningGoal.Tracking('speed_ref','speed',2/150,0.001,10);
TR2 = TuningGoal.Tracking('Id_ref','Id',2/2500);
LS1 = TuningGoal.LoopShape('Id',2500);
LS2 = TuningGoal.LoopShape('speed',150);
MG1 = TuningGoal.Gain('speed_ref','Iq_ref',2);
MG2 = TuningGoal.Gain('speed_ref','Vq',50);
MG3 = TuningGoal.Gain('Id_ref','Vd',20);

Настройка всего трёх ПИ-контроллеров с помощью systune со всеми целями настройки, основанными на построенной модели ST0. Чтобы увеличить вероятность нахождения значений параметров, соответствующих всем проектным требованиям, установите опции для systune чтобы запустить пять дополнительных оптимизаций, начиная с пяти случайным образом сгенерированных значений параметров.

opt = systuneOptions('RandomStart',5);
rng(2)
[ST1,fSoft] = systune(ST0,[TR1,TR2,LS1,LS2,MG1,MG2,MG3],opt);
Final: Soft = 1.01, Hard = -Inf, Iterations = 73
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 87
Final: Soft = 1.01, Hard = -Inf, Iterations = 59
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 66
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 61
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 60

После нахождения решения используя systune, показать, как цели настройки достигаются в настроенной модели ST1. Покажите отслеживание, форму цикла и отдельно цели настройки усиления. Пунктирные линии на следующих рисунках представляют цели настройки, а сплошные линии являются результатом настроенных контроллеров.

figure
viewGoal([TR1,TR2],ST1)
figure
viewGoal([LS1,LS2],ST1)
figure
viewGoal([MG1,MG2,MG3],ST1)

После проверки целей настройки извлеките параметры контроллера из настроенной модели ST1. Используйте настроенные параметры ПИ-контроллера, чтобы обновить параметры рабочей области для блоков ПИ-контроллера.

Cd = getBlockValue(ST1,'Cd');
Cq = getBlockValue(ST1,'Cq');
Cspeed = getBlockValue(ST1,'Cspeed');

Ток по оси D ПИ-контроллера имеет настроенные коэффициенты усиления:

paramCurrentControlPD = Cd.Kp
paramCurrentControlID = Cd.Ki
paramCurrentControlPD =

    2.8898


paramCurrentControlID =

   2.6370e+03

Текущее ПИ-контроллер q-оси имеет настроенные усиления:

paramCurrentControlPQ = Cq.Kp
paramCurrentControlIQ = Cq.Ki
paramCurrentControlPQ =

    1.4964


paramCurrentControlIQ =

  679.7979

Скорость, которую ПИ-контроллер настроило коэффициент усиления:

paramVelocityControlTuneP = Cspeed.Kp
paramVelocityControlTuneI = Cspeed.Ki
paramVelocityControlTuneP =

    0.3713


paramVelocityControlTuneI =

    0.0179

После настройки всех трех контроллеров вместе с помощью systuneкоэффициент усиления контроллера значительно отличается от исходных значений. У ПИД-регулятора в цикл управления скорости другой шаг расчета, которое 0.001 второе. Настроенный результат использует другой шаг расчета 4e-6 во-вторых, коэффициент усиления контроллера одинаковый. Чтобы убедиться, что характеристики контроллера совпадают с различными шагами расчета, дискретный формат интегратора ПИД-контроллеров в этом примере является 'Trapezoidal'.

Валидация настроенного контроллера

Исследуйте характеристики с помощью настроенных коэффициентов усиления контроллера. Во-первых, инициализируйте модель до ее нулевых начальных условий, используя ctrlIniValues. Соедините блоки ПИД-регулятора путем установки сигналов switch в switchIniValue и установите соответствующие начальные условия для модели объекта управления PMSM.

switchIniValue.openLoopQ = 0;
switchIniValue.openLoopD = 0;
ctrlIniValues.currentDIC = 0;
ctrlIniValues.voltageD = 0;
ctrlIniValues.currentQIC = 0;
ctrlIniValues.voltageQ = 0;
ctrlIniValues.speedIC = 0;
ctrlIniValues.speedCurrent = 0;
pmsm.RotorVelocityInit = 0;
set_param(mdl,'LoadInitialState','off')

Сконфигурируйте модель, чтобы использовать односторонний командный сигнал скорости и симулировать модель. Покажите скоростную характеристику модели на одностороннюю команду скорости, которая поднимается из 0 рад/с, чтобы 150 рад/с в 0.05 s, а затем в 200 рад/с в 0.8 s. Сохраните результат симуляции в logsout_tuned_oneside в MAT-файле, SystunedSpeed.mat.

signalbuilder(SignalBuilderPath, 'activegroup', 2);
sim(mdl);
logsout_tuned_oneside = logsout;
save('SystunedSpeed','logsout_tuned_oneside','-append')

Сконфигурируйте модель, чтобы использовать двусторонний командный сигнал скорости и симулировать модель. Покажите скоростную характеристику модели на двустороннюю команду скорости, которая поднимается из 0 рад/с, чтобы 150 рад/с в 0.05 s, противоположное направление в 0.5 s, а затем вернемся к 0 рад/с в 0.8 s. Сохраните результат симуляции в logsout_tuned_twoside в MAT-файле, SystunedSpeed.mat.

signalbuilder(SignalBuilderPath, 'activegroup', 3);
sim(mdl);
logsout_tuned_twoside = logsout;
save('SystunedSpeed','logsout_tuned_twoside','-append')

Сравните характеристики скорости двигателя между существующими коэффициентами усиления контроллера и настроенным результатом. Характеристики скорости показаны один за другим в течение одной секунды симуляции. Ответ скорости следует более близко к команде step. Установившаяся ошибка также уменьшается после настройки ПИ-контроллеров systune.

scdfocmotorSystunePlotSpeed

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

bdclose(mdl)

См. также

Похожие темы