Цифровое управление напряжением Степени каскада

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

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

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

open_system('rct_powerstage')

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

bode(psmodel)
grid

Контроллер должен регулировать напряжение Vchip доставляется на устройство для отслеживания уставки Vcmd и будьте нечувствительны к изменениям в токе нагрузки iLoad. Структура управления состоит из компенсатора обратной связи и компенсатора нарушения порядка с feedforward. Напряжение на Vin вход в усилитель ограничен. $V_{\rm max} = 12 V$Частота дискретизации контроллера составляет 10 МГц (шаг расчета Tm 1e-7 секунд).

Требования к эффективности

Это приложение является сложным, потому что полоса пропускания контроллера должна приблизиться к частоте Nyquist 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}$Используйте фильтр ограничения скорости, чтобы смоделировать команду ramp и потребовать, чтобы коэффициент усиления от входного сигнала ограничения скорости$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 конечной импульсной характеристики» в 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.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 интерфейс. Постройте график отклика замкнутой системы на команду step 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 на фазе отслеживания уставки.

См. также

| | | (Simulink Control Design) | (Simulink Control Design)

Похожие темы