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