exponenta event banner

Задание линеаризации для компонентов модели с использованием идентификации системы

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

Линеаризация модели жесткого диска

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

model = 'scdpwmharddrive';
open_system(model)

В этой модели установка жестких дисков управляется источником тока. Источник тока реализуется схемой, которая возбуждается сигналом широтно-импульсной модуляции (ШИМ), так что его выход может регулироваться рабочим циклом. Дополнительные сведения о модели жесткого диска см. в разделе Цифровое сервоконтроль жесткого диска.

Схемы, управляемые ШИМ, обычно имеют высокочастотные переключающие компоненты, такие как МОП-транзистор в этой модели, среднее поведение которого не вполне определено. Таким образом, точная линеаризация этого типа схемы является проблематичной. При линеаризации модели от ввода рабочего цикла до ошибки положения результат равен нулю.

Решатель 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.

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

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

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

Поиск линейной модели для компонента ШИМ

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

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

Определите входную и выходную точки для схемы, управляемой ШИМ, и выполните оценку частотной характеристики, используя входной сигнал синестрима.

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 на панели инструментов идентификации системы. Затем сравните идентифицированную модель с исходными данными частотного отклика.

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

Мы использовали данные частотной характеристики с частотами от 2000 до 200 000 рад/с. Идентифицированная модель имеет отклик плоской величины для частот менее 2000. Однако наша оценка не включала эти частоты. Чтобы проверить, является ли частотный отклик плоским для более низких частот, оцените отклик с помощью синестрименного входного сигнала с частотами 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)

Определение линеаризации для компонента ШИМ

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

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

См. также

| (панель инструментов идентификации системы)

Связанные темы