Цифровое управление напряжения этапа степени

В этом примере показано, как настроить высокоэффективный цифровой контроллер с пропускной способностью близко к частоте дискретизации.

Регулирование напряжения на этапе степени

Мы используем Simulink, чтобы смоделировать контроллер напряжения на этапе степени для электронного устройства:

open_system('rct_powerstage')

Усилитель этапа степени моделируется как линейная система второго порядка со следующей частотной характеристикой:

bode(psmodel)
grid

Контроллер должен отрегулировать напряжение Vchip поставленный устройству, чтобы отследить заданное значение Vcmd и будьте нечувствительны к изменениям загрузки текущий iLoad. Управляющая структура состоит из компенсатора обратной связи и воздействия компенсатор feedforward. Напряжение Vin вход в усилитель ограничивается$V_{\rm max} = 12 V$. Контроллер, производящий уровень, - 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 периодов выборки), мы не хотим поражать ограничение насыщения$V_{\rm in} \le V_{\rm max}$. Используйте ограничивающий уровень фильтр, чтобы смоделировать команду пандуса и потребовать что усиление от входа ограничителя уровня$V_{\rm in}$ быть меньше$V_{\rm max}$.

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'});

Мы хотим использовать КИХ-фильтр в качестве компенсатора feedforward. Для этого создайте параметризацию КИХ-фильтра первого порядка и присвойте его блоку "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). Затем настройте feedforward и компенсаторы обратной связи с systune. Обработайте затухание и маржинальные требования как трудные ограничения и попытайтесь лучше всего удовлетворить остающиеся требования.

rng(0)
topt = systuneOptions('RandomStart',6);
ST = systune(ST0,[Req1 Req2 Req3],[Req4 Req5],topt);
Final: Soft = 1.29, Hard = 0.86093, Iterations = 376
Final: Soft = 1.29, Hard = 0.99995, Iterations = 384
Final: Soft = 1.29, Hard = 0.99039, Iterations = 451
Final: Soft = 1.3, Hard = 0.93106, Iterations = 335
Final: Soft = 1.28, Hard = 0.99922, Iterations = 422
Final: Soft = 1.29, Hard = 0.85572, Iterations = 358
Final: Soft = 1.29, Hard = 0.99184, Iterations = 464

Лучший проект удовлетворяет трудным ограничениям (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 остается приблизительно в$\pm 12 V$ границах насыщения для фрагмента отслеживания заданного значения симуляции.

Рисунок 1: Ответ на команду пандуса и шаг загружает воздействия.

Рисунок 2: Амплитуда входного напряжения Vin во время фазы отслеживания заданного значения.

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

| | | |

Похожие темы

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