Определение линеаризации для компонентов модели Используя System Identification

Этот пример показывает, как задать линеаризацию для компонента модели, который не линеаризует хорошо использование идентифицированного использования линейной модели System Identification Toolbox™. Этот пример требует программного обеспечения Simscape™ Electrical™.

Линеаризуйте модель жесткого диска

Откройте simulink модель для жесткого диска.

model = 'scdpwmharddrive';
open_system(model)

В этой модели объект жесткого диска управляется текущим источником. Текущий источник реализован схемой, которая управляется сигналом Модуляции ширины импульса (PWM) так, чтобы его вывод мог быть настроен рабочим циклом. Для получения дополнительной информации модели жесткого диска, смотрите Цифровое Сервоуправление Жесткого диска (Control System Toolbox).

PWM-управляемые схемы обычно имеют компоненты переключения высокой частоты, такие как транзистор MOSFET в этой модели, среднее поведение которой не четко определено. Таким образом точная линеаризация этого типа схемы проблематична. Когда вы линеаризуете модель от входа рабочего цикла до ошибки положения, результатом является нуль.

Решатель Simscape в этой модели сконфигурирован, чтобы запуститься в локальном режиме решателя. При линеаризации модели сначала выключите локальный решатель.

SimscapeSolver = [model '/PWM driven converter/Solver Configuration'];
set_param(SimscapeSolver,'UseLocalSolver','off');

Линеаризуйте модель.

io(1) = linio('scdpwmharddrive/Duty cycle',1,'input');
io(2) = linio('scdpwmharddrive/Hard Disk Model',1,'output');
sys = linearize(model,io)
sys =
 
  D = 
                 Duty cycle
   position err           0
 
Static gain.

Как ожидалось компоненты PWM заставляют систему линеаризовать, чтобы обнулить.

Снова включите локальный решатель для симуляции.

set_param(SimscapeSolver,'UseLocalSolver','on')

Найдите линейную модель для компонента PWM

Можно оценить частотную характеристику PWM-управляемого текущего источника и использовать результат идентифицировать линейную модель для него. Текущий сигнал имеет дискретный шаг расчета 1e-7. Поэтому необходимо использовать сигнал sinestream с фиксированным шагом расчета как входной сигнал оценки. Создайте сигнал, который имеет частоты между 2,000 и 200 000 рад/с.

idinput = frest.createFixedTsSinestream(Ts,{2000,200000});
idinput.Amplitude = 0.1;

Задайте точки ввода и вывода для PWM-управляемой схемы и запустите оценку частотной характеристики с помощью sinestream входного сигнала.

pwm_io(1) = linio('scdpwmharddrive/Duty cycle',1,'input');
pwm_io(2) = linio('scdpwmharddrive/PWM driven converter',1,'openoutput');
sysfrd = frestimate(model,pwm_io,idinput);

Чтобы идентифицировать модель второго порядка с помощью данных о частотной характеристике, используйте tfest от System Identification Toolbox. Затем сравните идентифицированную модель с исходными данными о частотной характеристике.

sysid = ss(tfest(idfrd(sysfrd),2));
bode(sysid,sysfrd,'r*')

Мы использовали данные о частотной характеристике с частотами между 2,000 и 200 000 рад/с. Идентифицированная модель имеет плоский ответ значения для частот, меньших, чем 2 000. Однако наша оценка не включала те частоты. Чтобы проверить, является ли частотная характеристика плоской для более низких частот, оцените ответ с помощью sinestream входного сигнала с частотами 20 и 200 рад/с.

lowfreq = [20 200];
inputlow = frest.createFixedTsSinestream(Ts,lowfreq)
 
The sinestream input signal:
 
      Frequency           : [20 200] (rad/s)
      Amplitude           : 1e-05
      SamplesPerPeriod    : [3141593 314159]
      NumPeriods          : 4
      RampPeriods         : 0
      FreqUnits (rad/s,Hz): rad/s
      SettlingPeriods     : 1
      ApplyFilteringInFRESTIMATE (on/off)    : on
      SimulationOrder (Sequential/OneAtATime): Sequential
 

Комбинация быстрого шага расчета секунд 1e-7 (частота дискретизации на 10 МГц) и ниже создает высокую стоимость SamplesPerPeriod. В этом случае, полагая, что каждая частота имеет четыре периода, оценка частотной характеристики регистрировала бы выходные данные приблизительно с 14 миллионами выборок.

Поскольку такой высокий уровень выборки не необходим для анализа частот на 20 и 200 рад/с, можно избежать проблем памяти путем увеличения шага расчета до 1e-4.

Tslow = 1e-4;
wslow = 2*pi/Tslow;
inputlow = frest.createFixedTsSinestream(Tslow,wslow./round(wslow./lowfreq));
inputlow.Amplitude = 0.1;

Чтобы сделать модель совместимой с меньшим уровнем выборки, передискретизируйте точку выходных данных с помощью блока перехода уровня в качестве в измененной модели:

modellow = 'scdpwmharddrive_lowfreq';
open_system(modellow)

Запустите анализ для низких частот путем выполнения следующей команды:

sysfrdlow = frestimate(modellow,getlinio(modellow),inputlow);

Оценка частотной характеристики может занять несколько минут. В данном примере загрузите результаты оценки.

load scdpwmharddrive_lowfreqresults.mat

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

bode(sysid,sysfrdlow,'r*')

Закройте низкочастотную модель.

bdclose(modellow)

Задайте линеаризацию для компонента PWM

Чтобы задать линеаризацию PWM-управляемого компонента с помощью подтвержденной идентифицированной модели, задайте линеаризацию PWM управляемая подсистема конвертера.

pwmblock = 'scdpwmharddrive/PWM driven converter';
set_param(pwmblock,'SCDEnableBlockLinearizationSpecification','on');
rep = struct('Specification','sysid',...
             'Type','Expression',...
             'ParameterNames','',...
             'ParameterValues','');
set_param(pwmblock,'SCDBlockLinearizationSpecification',rep);
set_param('scdpwmharddrive/Duty cycle','SampleTime','Ts_plant');

Линеаризуйте модель.

set_param(SimscapeSolver,'UseLocalSolver','off')
sys = linearize(model,io);
set_param(SimscapeSolver,'UseLocalSolver','on')

Можно подтвердить полный результат линеаризации с помощью оценки частотной характеристики, с помощью следующих команд:

valinput = frest.Sinestream(sys);
valinput = fselect(valinput,3e3,1e5);
valinput.Amplitude = 0.1;
sysval = frestimate(model,io,valinput);

Оценка частотной характеристики может занять несколько минут. В данном примере загрузите результаты оценки.

load scdpwmharddrive_valfreqresults.mat
bodemag(sys,sysval,'r*')

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

Закройте модель.

bdclose('scdpwmharddrive')

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

|

Похожие темы

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