Настройте ориентированные на поле контроллеры Используя 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 содержит все три контроллера PI. Контроллер PI внешнего цикла регулирует скорость двигателя. Два контроллера PI внутреннего цикла управляют d-осью и токами q-оси отдельно. Команда от диспетчера PI внешнего цикла непосредственно питается к q-оси, чтобы управлять крутящим моментом. Команда для d-оси является нулем для PMSM, потому что поток ротора фиксируется с постоянным магнитом для этого типа электродвигателя переменного тока.

Перед настраивающимися контроллерами исследуйте ответы скорости с исходными контроллерами и сохраните результаты симуляции в MAT-файл, SystunedSpeed.mat. У существующего контроллера PI скорости есть усиления P = 0.08655 и я = 0.1997. У текущих контроллеров PI и есть усиления P = 1 и я = 200.

scdfocmotorSystuneOriginalResponse

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

Чтобы собрать данные о частотной характеристике, найдите рабочую точку со скоростью рада/секунда 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-оси текущий контроллер текущим ID является 0 A. Для q-оси текущий контроллер текущим IQ является 0.1 A. Для контроллера скорости внешнего цикла ссылочным током является 0.122 A, и скорость в 150 rad/s. Для объекта PMSM, набор скорость ротора в структуре pmsm к 150 rad/s.

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);

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

in = frest.createFixedTsSinestream(4e-6,{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, устанавливает числовой метод поиска используемый для этой итеративной оценки параметра, когда наименьшие квадраты Levenberg-Marquardt ищут. Оцените модель в пространстве состояний с четырьмя состояниями и периодом секунд 4e-6.

optssest = ssestOptions('SearchMethod','lm');
optssest.Regularization.Lambda = 0.1;
sys_singletune = ssest(estsys,4,'Ts',4e-6,optssest);

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

Задайте три настраиваемых блока ПИДа дискретного времени и их I/Os для d-оси текущее управление, q-ось текущее управление и регулировка скорости.

Cd = tunablePID('Cd','pi',4e-6);
Cd.u = 'Id_e';
Cd.y = 'Vd';

Cq = tunablePID('Cq','pi',4e-6);
Cq.u = 'Iq_e';
Cq.y = 'Vq';

Cspeed = tunablePID('Cspeed','pi',4e-6);
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 rad/s. Эта пропускная способность используется и в отслеживании и в целях формы цикла. Кроме того, установите ошибку DC на 0.001 отражать максимальную установившуюся ошибку % 0.1. Установите пиковую ошибку на 10. Для d-оси текущий контроллер, набор пропускная способность отслеживания к 2500 rad/s, который намного быстрее, чем контроллер скорости внешнего цикла. Чтобы предотвратить контроллеры насыщения, задайте цели ограничить усиления для всех трех контроллеров.

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);

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

opt = systuneOptions('RandomStart',5);
rng(2);
[ST1,fSoft] = systune(ST0,[TR1,TR2,LS1,LS2,MG1,MG2,MG3],opt);
Final: Soft = 1.03, Hard = -Inf, Iterations = 104
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 65
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 62
Final: Soft = 1.01, Hard = -Inf, Iterations = 68
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Soft = 1.01, Hard = -Inf, Iterations = 63
Final: Soft = 1.01, Hard = -Inf, Iterations = 50

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

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

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

Cd = getBlockValue(ST1,'Cd');
Cq = getBlockValue(ST1,'Cq');
Cspeed = getBlockValue(ST1,'Cspeed');
paramCurrentControlPD = Cd.Kp;
paramCurrentControlID = Cd.Ki;
paramCurrentControlPQ = Cq.Kp;
paramCurrentControlIQ = Cq.Ki;
paramVelocityControlTuneP = Cspeed.Kp;
paramVelocityControlTuneI = Cspeed.Ki;

После настройки всех трех контроллеров, вместе использующих systune, усиления контроллера:

  • У контроллера PI скорости есть усиления P = 0.3609 и я = 0.1434.

  • D-ось текущий контроллер PI имеет усиления P = 2.7877 и я = 2676.7.

  • Q-ось текущий контроллер PI имеет усиления P = 1.3371 и я = 881.3072.

Подтвердите настроенный контроллер

Исследуйте производительность с помощью настроенных усилений контроллера. Во-первых, инициализируйте модель к ее нулевым начальным условиям с помощью ctrlIniValues. Соедините блоки ПИД-регулятора путем установки сигналов переключателя в 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 rad/s к 150 rad/s в секунду 0.05, и затем к 200 rad/s в секунду 0.8. Сохраните результат симуляции в logsout_tuned_oneside в MAT-файле, SystunedSpeed.mat.

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

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

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

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

scdfocmotorSystunePlotSpeed

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

bdclose(mdl)

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

Похожие темы