Этот пример показывает, как задать линеаризацию блока Simulink или подсистемы.
Команда LINEARIZE
в Simulink Control Design дает линейную аппроксимацию модели Simulink с помощью точного подхода линеаризации. Эта линеаризация допустима в небольшой области вокруг данной рабочей точки. Этот подход работает хорошо на большинство моделей Simulink, но в некоторых случаях необходимо изменить точный подход линеаризации, чтобы учесть эффекты разрывов или аппроксимировать динамику действия задержки или производной. Много встроенных блоков Simulink, таких как насыщение или мертвая зональная нелинейность, обеспечивают способность выбрать "Treat as gain when linearizing", чтобы управлять этим поведением. В этом примере вы задаете пользовательскую линеаризацию для подсистемы, чтобы аппроксимировать линеаризацию сигнала PWM.
Следующая модель в качестве примера имеет подсистему scdpwm/Voltage to PWM
, который моделирует сигнал PWM, который вводит модель объекта управления.
mdl = 'scdpwm';
open_system(mdl);
Когда вы линеаризуете эту модель с помощью стандартной настройки, получившаяся линейная модель имеет усиление нуля.
io = getlinio(mdl); sys = linearize(mdl,io)
sys = D = Step Plant Model 0 Static gain.
Блок scdpwm/Voltage to PWM/Compare To Zero
заставляет эту линеаризацию быть нулем.
pwmblk = 'scdpwm/Voltage to PWM';
open_system(pwmblk)
Линеаризация является нулем, потому что блок представляет чистую прерывистую нелинейность.
u = [-1:0.1:0,0:0.1:1]; y = [zeros(11,1);ones(11,1)]; plot(u,y) xlabel('Block Input - u') ylabel('Block Output - y') ylim([-0.1 1.1]);
С Simulink Control Design можно управлять линеаризацией блоков в модели Simulink. Можно задать линеаризацию использования блока:
Матрицы
Линейные независимые от времени модели, такие как передаточные функции или пространство состояний
Устойчивое Управление неопределенные параметры/модели в пространстве состояний
В этом примере подсистема PWM содержит задержку
Эта задержка составляет частоту рабочего цикла сигнала PWM, который является на уровне 100 Гц. Задать задержку при щелчке правой кнопкой scdpwm/Voltage to PWM
подсистемы по блоку и выбрать Linear Analysis-> Specify Linearization. Следующее диалоговое окно блока, в котором вы задаете динамику задержки, открывается.
Следующий код эквивалентен вводу задержки в диалоговое окно спецификации.
set_param(pwmblk,'SCDEnableBlockLinearizationSpecification','on'); rep = struct('Specification','ss(1,''OutputDelay'',1/100)',... 'Type','Expression',... 'ParameterNames','',... 'ParameterValues',''); set_param(pwmblk,'SCDBlockLinearizationSpecification',rep);
Линеаризация модели с заданной линеаризацией подсистемы теперь дает ожидаемый результат.
opt = linearizeOptions('SampleTime',0);
sys = zpk(linearize(mdl,io,opt))
sys = From input "Step" to output "Plant Model": 1 exp(-0.01*s) * ------------- (s^2 + s + 1) Continuous-time zero/pole/gain model.
Можно сравнить линеаризацию модели к фактической линеаризации с помощью сигнала frest.createStep
. Важно отметить, что спецификация линеаризации не должна быть удалена, чтобы моделировать использование исходной настройки модели. Спецификация линеаризации не оказывает влияние на симуляцию, только линеаризация. Визуальный осмотр показывает, что линеаризация точно представляет динамику.
cla instep = frest.createStep('Ts',1/10000,'StepTime',1,... 'StepSize',1e-1,'FinalTime',15); [sysf,simoutstep] = frestimate(mdl,io,instep); frest.simCompare(simoutstep,sys,instep) legend('Linearization with PWM Subsystem Specification',... 'Simulated Step Response','Location','East')
Блокируйтесь спецификация линеаризации не ограничивается линейными независимыми от времени моделями. С Robust Control Toolbox можно задать неопределенные параметры и модели неопределенного пространства состояний (USS) для блоков в модели. Получившаяся линеаризация является затем неопределенной моделью. Пример "Линеаризация моделей Simulink с Неуверенностью" показывает, как вычислить линеаризацию с неуверенностью (Требует Robust Control Toolbox).
Можно также выполнить анализ моделей с дискретными контроллерами и непрерывной динамикой объекта в непрерывной области. Смотрите, что пример "Моделирует Вычислительную Задержку и Выбирает Эффекты" для получения дополнительной информации.
Закройте модель Simulink.
bdclose(mdl)