В этом примере показано, как настроить высокопроизводительный цифровой контроллер с пропускной способностью, близкой к частоте дискретизации.
Мы используем Simulink для моделирования контроллера напряжения в ступени питания для электронного устройства:
open_system('rct_powerstage')

Усилитель каскада мощности моделируется как линейная система второго порядка со следующим частотным откликом:
bode(psmodel) grid

Регулятор должен регулировать напряжение Vchip доставляется в устройство для отслеживания уставки Vcmd и быть нечувствительным к изменениям тока нагрузки iLoad. Управляющая структура состоит из компенсатора обратной связи и компенсатора возмущающей связи. Напряжение Vin вход в усилитель ограничен.
Частота дискретизации контроллера составляет 10 МГц (время дискретизации Tm 1e-7 секунд).
Это приложение является сложным, поскольку полоса пропускания контроллера должна приближаться к частоте Найквиста pi/Tm = 31,4 МГц. Чтобы избежать проблем с совмещением при дискретизации контроллеров непрерывного времени, предпочтительно настраивать контроллер непосредственно за дискретное время.
Ступень питания должна реагировать на изменение уставки требуемого напряжения Vcmd примерно за 5 периодов выборки с пиковой ошибкой (по частоте) 50%. Используйте требование отслеживания для фиксации этой цели.
Req1 = TuningGoal.Tracking('Vcmd','Vchip',5*Tm,0,1.5); Req1.Name = 'Setpoint change'; viewGoal(Req1)

Энергетическая ступень также должна быстро отвергать нарушения нагрузки iLoad. Выразить это требование с точки зрения выгоды от iLoad кому Vchip. Это усиление должно быть низким при низкой частоте для хорошего отклонения возмущений.
s = tf('s'); nf = pi/Tm; % Nyquist frequency Req2 = TuningGoal.Gain('iLoad','Vchip',1.5e-3 * s/nf); Req2.Focus = [nf/1e4, nf]; Req2.Name = 'Load disturbance';
Высокие требования к производительности могут привести к большим усилиям по управлению и насыщению. Для профиля пандуса vcmd указанный в модели Simulink (от 0 до 1 за приблизительно 250 периодов выборки), мы хотим избежать попадания в ограничение насыщения.
Используйте фильтр ограничения скорости для моделирования команды ramp и требуйте, чтобы коэффициент усиления от входного сигнала ограничителя скорости
был меньше.
RateLimiter = 1/(250*Tm*s); % models ramp command in Simulink % |RateLimiter * (Vcmd->Vin)| < Vmax Req3 = TuningGoal.Gain('Vcmd','Vin',Vmax/RateLimiter); Req3.Focus = [nf/1000, nf]; Req3.Name = 'Saturation';
Для обеспечения достаточной надежности требуется не менее 7 дБ запаса усиления и 45 градусов запаса фазы на входе в установку.
Req4 = TuningGoal.Margins('Vin',7,45); Req4.Name = 'Margins';
Наконец, компенсатор обратной связи имеет тенденцию отменять резонанс установки, вырезая его. Такая инверсия растений может привести к плохим результатам, когда резонансная частота точно не известна или подвержена изменениям. Чтобы предотвратить это, наложите минимальное затухание по замкнутому контуру 0,5 для активного увлажнения резонансного режима установки.
Req5 = TuningGoal.Poles(0,0.5,3*nf);
Req5.Name = 'Damping';
Следующее использование systune для настройки параметров контроллера в соответствии с требованиями, определенными выше. Сначала используйте slTuner для настройки модели Simulink. В частности, указать, что существует два настраиваемых блока и что модель должна быть линеаризована и настроена во время выборки Tm.
TunedBlocks = {'compensator','FIR'};
ST0 = slTuner('rct_powerstage',TunedBlocks);
ST0.Ts = Tm;
% Register points of interest for open- and closed-loop analysis
addPoint(ST0,{'Vcmd','iLoad','Vchip','Vin'});
Мы хотим использовать фильтр FIR в качестве компенсатора обратной связи. Для этого создайте параметризацию фильтра FIR первого порядка и назначьте его блоку «Feedforward FIR» в Simulink.
FIR = tunableTF('FIR',1,1,Tm); % Fix denominator to z^n FIR.Denominator.Value = [1 0]; FIR.Denominator.Free = false; setBlockParam(ST0,'FIR',FIR);
Обратите внимание, что slTuner автоматически параметризует компенсатор обратной связи как модель пространства состояния третьего порядка (порядок, заданный в блоке Simulink). Далее настройте компенсаторы обратной связи и обратной связи с помощью systune. Оцените требования к демпфированию и запасам как жесткие ограничения и постарайтесь наилучшим образом удовлетворить остальные требования.
rng(0)
topt = systuneOptions('RandomStart',6);
ST = systune(ST0,[Req1 Req2 Req3],[Req4 Req5],topt);
Final: Soft = 1.31, Hard = 0.8739, Iterations = 467 Final: Soft = 1.28, Hard = 0.99356, Iterations = 398 Final: Soft = 1.3, Hard = 0.99398, Iterations = 335 Final: Soft = 1.29, Hard = 0.99508, Iterations = 524 Final: Soft = 1.3, Hard = 0.89588, Iterations = 341 Final: Soft = 1.29, Hard = 0.97353, Iterations = 395 Final: Soft = 1.29, Hard = 0.98295, Iterations = 401
Наилучшая конструкция удовлетворяет жестким ограничениям (Hard менее 1) и почти удовлетворяет другим ограничениям (Soft близко к 1). Проверьте это графически, построив график настроенных ответов для каждого требования.
figure('Position',[10,10,1071,714])
viewGoal([Req1 Req2 Req3 Req4 Req5],ST)

Сначала проверьте конструкцию в линейной области с помощью slTuner интерфейс. Постройте график реакции замкнутого цикла на команду шага Vcmd и ступенчатое нарушение iLoad.
figure('Position',[100,100,560,500]) subplot(2,1,1) step(getIOTransfer(ST,'Vcmd','Vchip'),20*Tm) title('Response to step command in voltage') subplot(2,1,2) step(getIOTransfer(ST,'iLoad','Vchip'),20*Tm) title('Rejection of step disturbance in load current')

Использовать getLoopTransfer вычислять отклик с разомкнутым контуром на входе установки и накладывать отклики установки и компенсатора обратной связи.
clf L = getLoopTransfer(ST,'Vin',-1); C = getBlockValue(ST,'compensator'); bodeplot(L,psmodel(2),C(2),{1e-3/Tm pi/Tm}) grid legend('Open-loop response','Plant','Compensator')

Контроллер достигает требуемой полосы пропускания, и ответы достаточно быстрые. Примените настроенные значения параметров к модели Simulink и смоделируйте настроенные отклики.
writeBlockValue(ST)
Результаты нелинейного моделирования представлены ниже. Обратите внимание, что управляющий сигнал Vin остается приблизительно в пределах
пределов насыщения для части отслеживания уставки в моделировании.

Рис. 1: Реакция на нарушения команды и ступенчатой нагрузки.

Рисунок 2: Амплитуда входного напряжения Vin на этапе отслеживания уставки.
TuningGoal.Gain | TuningGoal.Margins | TuningGoal.Tracking | slTuner (Simulink Control Design) | systune (slTuner)(Проект управления Simulink)