В этом примере показано, как использовать 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
Постройте ответ скорости с исходными контроллерами. Графики показывают установившиеся ошибки и относительно медленное переходное поведение. Можно настроить контроллеры, чтобы достигнуть лучшей эффективности.
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-оси текущим ID является 0
A. Для токового контроллера q-оси текущим IQ является 0.1
A. Для контроллера скорости внешнего контура ссылочным током является 0.122
A и скорость в 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);
Вход Define sinestream сигнализирует от 10
к 10,000
rad/s с фиксированным шагом расчета 4e-6
s, то есть, шаг расчета текущего цикла управления sampleTime.CurrentControl
. Величиной сигнала sinestream является 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
функция, набор числовой метод поиска, используемый для этой итеративной оценки параметра как наименьшие квадраты Levenberg-Marquardt, ищет. Оцените модель в пространстве состояний с четырьмя состояниями и периодом 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, создайте систему управления как показано в следующей блок-схеме.
Задайте три настраиваемых блока ПИДа дискретного времени и их I/Os для 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
рад/с. Эта полоса пропускания используется и в отслеживании и в целях формы цикла. Кроме того, установите ошибку 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.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
второй, но усиления контроллера то же самое. Чтобы убедиться эффективность контроллера идентична с различными шагами расчета, дискретный формат интегратора ПИД-регуляторов 'Трапециевиден' в этом примере.
Исследуйте эффективность с помощью настроенных усилений контроллера. Во-первых, инициализируйте модель к ее нулевым начальным условиям с помощью 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
s, и затем к 200
rad/s в 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
rad/s к 150
rad/s в 0.05
s, направление реверсов в 0.5
s и затем обратно к 0
rad/s в 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')
Сравните ответы частоты вращения двигателя между существующими усилениями контроллера и настроенным результатом. Ответы скорости показывают рядом друг с другом по одной второй симуляции. Ответ скорости следует более тесно к команде шага. Установившаяся ошибка также уменьшается после того, как ПИ-контроллеры настраиваются с systune
.
scdfocmotorSystunePlotSpeed
После настройки контроллеров моторный ответ улучшается с более быстрым переходным процессом и меньшей установившейся ошибкой под обоими типами команд скорости.
bdclose(mdl)