В этом примере показано, как использовать 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)