Настройте ориентированные на поле контроллеры Используя 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 и я = 0.1997. Текущие ПИ-контроллеры и имеют усиления 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);

Для того, чтобы настроить все три ПИ-контроллера в модели 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);

Настройте все три ПИ-контроллера с помощью 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. Используйте настроенные параметры ПИ-контроллера, чтобы обновить параметры рабочей области для блоков ПИ-контроллера.

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, усиления контроллера:

  • ПИ-контроллер скорости имеет усиления P = 0.3609 и я = 0.1434.

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

  • Q-ось текущий ПИ-контроллер имеет усиления 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')

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

scdfocmotorSystunePlotSpeed

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

bdclose(mdl)

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

Похожие темы

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